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;
       }
}

 

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;       }}

posted @ 2017-03-28 11:48  hoi123  阅读(272)  评论(0编辑  收藏  举报