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;

       }

}

 

你可能感兴趣的:(Office)