zoukankan      html  css  js  c++  java
  • office转换成pdf

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.pdf.PdfWriter;
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.ComFailException;
    import com.jacob.com.ComThread;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    
    public class JacobPDFConverter implements PDFConverter {
        private static final int wdFormatPDF = 17;
        private static final int xlTypePDF = 0;
        private static final int ppSaveAsPDF = 32;
        
        public void convert2PDF(String inputFile, String pdfFile) {
            String suffix = FileUtils.getFileSufix(inputFile);
            File file = new File(inputFile);
            if(!file.exists()){
                System.out.println("文件不存在!");
                return;
            }
            if(suffix.equals("pdf")){
                System.out.println("PDF not need to convert!");
                return ;
            }
            boolean isImg = false;//FileUtils.isImage(inputFile);
            try{
                isImg = FileUtils.isImage(inputFile);
            }catch(Exception ce){
    
            }
            if(isImg){
                img2PDF(inputFile,pdfFile);
            }else if(suffix.equals("doc")||suffix.equals("docx")||suffix.equals("txt")){
                word2PDF(inputFile,pdfFile);
            }else if(suffix.equals("ppt")||suffix.equals("pptx")){
                ppt2PDF(inputFile,pdfFile);
            }else if(suffix.equals("xls")||suffix.equals("xlsx")){
                excel2PDF(inputFile,pdfFile);
            }else if(suffix.equals("wps")){
                //wps2PDF(inputFile,pdfFile);
                word2PDF(inputFile,pdfFile);
            }else{
                //System.out.println("文件格式不支持转换!");
                word2PDF(inputFile,pdfFile);
            }
        }
    
        public void convert2PDF(String inputFile) {
            String pdfFile = FileUtils.getFilePrefix(inputFile)+".pdf";
            convert2PDF(inputFile,pdfFile);
            
        }
        
        public  void convert2PDF(String[] inputFiles, String[] pdfFiles) {
            try {
                for(int i = 0;i<inputFiles.length;i++){
                    String inputFile = inputFiles[i];
                    String pdfFile = pdfFiles[i];
                    if(inputFile==null || inputFile.equals("")) continue;
                    convert2PDF(inputFile,pdfFile);
                }
            }catch (Exception ce) {
                
            }
        }
        
        public void convert2PDF(String[] inputFiles) {
            String pdfFiles[] = new String[inputFiles.length];
            for(int i = 0;i<inputFiles.length;i++){
                String inputFile = inputFiles[i];
                String pdfFile = FileUtils.getFilePrefix(inputFile)+".pdf";
                pdfFiles[i] = pdfFile;
            }
            convert2PDF(inputFiles,pdfFiles);
        }    
        
        public static void word2PDF(String inputFile,String pdfFile){
            ActiveXComponent app = null;
            Dispatch doc = null;
            try {
                ComThread.InitSTA();
                app = new ActiveXComponent("Word.Application"); //打开word应用程序
                app.setProperty("Visible", false); //设置word不可见
                Dispatch docs = app.getProperty("Documents").toDispatch(); //获得word中所有打开的文档,返回Documents对象
                //调用Documents对象中Open方法打开文档,并返回打开的文档对象Document
                doc = Dispatch.call(docs,
                                        "Open",
                                        inputFile,
                                        false,
                                        true
                                        ).toDispatch();
                Dispatch.call(doc,
                    "ExportAsFixedFormat",
                    pdfFile,
                    wdFormatPDF        //word保存为pdf格式宏,值为17
                    );
            } catch (ComFailException e) {  
                  
            } catch (Exception e) {  
              
            } finally {  
                if (doc != null) {  
                    Dispatch.call(doc, "Close", false); //关闭文档
                }  
                if (app != null) {  
                    app.invoke("Quit", 0); //关闭word应用程序
                }  
                ComThread.Release();  
            }  
        }
        public static void excel2PDF(String inputFile,String pdfFile){
            ActiveXComponent app = null;
            Dispatch excel = null;
            try {
                ComThread.InitSTA();
                app = new ActiveXComponent("Excel.Application");
                app.setProperty("Visible", false);
                Dispatch excels = app.getProperty("Workbooks").toDispatch();
                excel = Dispatch.call(excels,
                                        "Open",
                                        inputFile,
                                        false,
                                        true
                                        ).toDispatch();
                Dispatch.call(excel,
                        "ExportAsFixedFormat",
                        xlTypePDF,        
                        pdfFile
                        );
            } catch (ComFailException e) {  
                 
            } catch (Exception e) {  
      
            } finally {  
                if (excel != null) {  
                    Dispatch.call(excel, "Close",false);  
                }  
                if (app != null) {  
                    app.invoke("Quit");  
                }  
                ComThread.Release();  
            }
        }
        public static void ppt2PDF(String inputFile,String pdfFile){
            ActiveXComponent app = null;  
            Dispatch ppt = null; 
            try {
                ComThread.InitSTA();
                app = new ActiveXComponent("PowerPoint.Application");
                //app.setProperty("Visible", false);
                Dispatch ppts = app.getProperty("Presentations").toDispatch();
                ppt = Dispatch.call(ppts,
                                        "Open",
                                        inputFile,
                                        true,//ReadOnly
                                        true,//Untitled指定文件是否有标题
                                        false//WithWindow指定文件是否可见
                                        ).toDispatch();
                Dispatch.call(ppt,
                        "SaveAs",
                        pdfFile,
                        ppSaveAsPDF    
                        );
            } catch (ComFailException e) {  
                System.out.println(e.getMessage());
            } catch (Exception e) {  
      
            } finally {  
                if (ppt != null) {  
                    Dispatch.call(ppt, "Close");  
                }  
                if (app != null) {  
                    app.invoke("Quit");  
                }  
                ComThread.Release();
            }
        }
        
        public void wps2PDF(String inputFile,String pdfFile) {  
            File sFile = new File(inputFile);
            File tFile = new File(pdfFile);
            ActiveXComponent wps = null;
            try {
                ComThread.InitSTA();
                wps = new ActiveXComponent("wps.application");
                ActiveXComponent doc = wps.invokeGetComponent("Documents").invokeGetComponent("Open", new Variant(sFile.getAbsolutePath()));  
                doc.invoke("ExportPdf", new Variant(tFile.getAbsolutePath()));  
                doc.invoke("Close");  
                doc.safeRelease();  
            } catch (Exception e) {  
                System.out.println(e.getMessage());  
            } finally {  
                if (wps != null) {  
                    wps.invoke("Terminate");  
                    wps.safeRelease();  
                }
                ComThread.Release();
            }  
        }  
    
        public void img2PDF(String inputFile,String pdfFile) {
            Document doc = new Document(PageSize.A4, 20, 20, 20, 20);
            try {
                PdfWriter.getInstance(doc, new FileOutputStream(pdfFile));
                doc.open();
                doc.newPage();
                Image img = Image.getInstance(inputFile);
                float heigth = img.getHeight();
                float width = img.getWidth();
                int percent = getPercent(heigth, width);
                img.setAlignment(Image.MIDDLE);
                img.scalePercent(percent+3);// 表示是原来图像的比例;
                doc.add(img);
                doc.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (DocumentException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            File mOutputPdfFile = new File(pdfFile);
            if (!mOutputPdfFile.exists()) {
                mOutputPdfFile.deleteOnExit();
                return;
            }
        }
        public static int getPercent(float h, float w) {
            int p = 0;
            float p2 = 0.0f;
            p2 = 530 / w * 100;
            p = Math.round(p2);
            return p;
           }
    }
  • 相关阅读:
    HP LoadRunner11.0下载地址(官网地址)
    出现500错误[code=CANT_CONNECT_LOOPBACK] Cannot connect due to potential loopback problems的解决方法
    一个数据库的所见即所得的好工具
    强制释放windows被占用的端口
    测试管理工具QC第二篇QC安装步骤(史上最详细的图解过程)第二篇server2003的环境设置
    NAT连接虚拟机和主机的通信(静态IP配置完整图解,测试通过可用)附vmware tools的安装(未完待续)第一篇
    QC插件大集合
    winmail搭建自己的邮件服务器第二篇(详细图解,测试通过)
    QTP基本脚本设计(第一部分)
    winmail搭建自己的邮件服务器第一篇(附详细图解测试通过可用)
  • 原文地址:https://www.cnblogs.com/silentjesse/p/3679896.html
Copyright © 2011-2022 走看看