• java+jacob实现office文件转成pdf


    import java.io.File;
    import java.util.Date;
    
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.ComThread;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    
    public class JacobUtil {
        private static final int wdFormatPDF = 17;
        private static final int xlTypePDF = 0;
        private static final int ppSaveAsPDF = 32;
    
        public static void main(String[] args) {
    
            int time = convert2PDF("D:/4.ppt", "D:/eee.pdf");
    
            if (time == -4) {
                System.out.println("转化失败,未知错误...");
            } else if(time == -3) {
                System.out.println("原文件就是PDF文件,无需转化...");
            } else if (time == -2) {
                System.out.println("转化失败,文件不存在...");
            }else if(time == -1){
                System.out.println("转化失败,请重新尝试...");
            }else if (time < -4) {
                System.out.println("转化失败,请重新尝试...");
            }else {
                System.out.println("转化成功,用时:  " + time + "s...");
            }
    
        }
    
        /***
         * 判断需要转化文件的类型(Excel、Word、ppt)
         *
         * @param inputFile
         * @param pdfFile
         */
        private static int convert2PDF(String inputFile, String pdfFile) {
            String kind = getFileSufix(inputFile);
            File file = new File(inputFile);
            if (!file.exists()) {
                return -2;//文件不存在
            }
            if (kind.equals("pdf")) {
                return -3;//原文件就是PDF文件
            }
            if (kind.equals("doc")||kind.equals("docx")||kind.equals("txt")) {
                return JacobUtil.word2PDF(inputFile, pdfFile);
            }else if (kind.equals("ppt")||kind.equals("pptx")) {
                return JacobUtil.ppt2PDF(inputFile, pdfFile);
            }else if(kind.equals("xls")||kind.equals("xlsx")){
                return JacobUtil.Ex2PDF(inputFile, pdfFile);
            }else {
                return -4;
            }
        }
    
        /***
         * 判断文件类型
         *
         * @param fileName
         * @return
         */
        public static String getFileSufix(String fileName) {
            int splitIndex = fileName.lastIndexOf(".");
            return fileName.substring(splitIndex + 1);
        }
    
        /***
         *
         * Word转PDF
         *
         * @param inputFile
         * @param pdfFile
         * @return
         */
    
        private static int word2PDF(String inputFile, String pdfFile) {
            // TODO Auto-generated method stub
            try {
                // 打开Word应用程序
                ActiveXComponent app = new ActiveXComponent("KWPS.Application");
                System.out.println("开始转化Word为PDF...");
                long date = new Date().getTime();
                // 设置Word不可见
                app.setProperty("Visible", new Variant(false));
                // 禁用宏
                app.setProperty("AutomationSecurity", new Variant(3));
                // 获得Word中所有打开的文档,返回documents对象
                Dispatch docs = app.getProperty("Documents").toDispatch();
                // 调用Documents对象中Open方法打开文档,并返回打开的文档对象Document
                Dispatch doc = Dispatch.call(docs, "Open", inputFile, false, true).toDispatch();
                /***
                 *
                 * 调用Document对象的SaveAs方法,将文档保存为pdf格式
                 *
                 * Dispatch.call(doc, "SaveAs", pdfFile, wdFormatPDF
                 * word保存为pdf格式宏,值为17 )
                 *
                 */
                Dispatch.call(doc, "ExportAsFixedFormat", pdfFile, wdFormatPDF);// word保存为pdf格式宏,值为17
                System.out.println(doc);
                // 关闭文档
                long date2 = new Date().getTime();
                int time = (int) ((date2 - date) / 1000);
    
                Dispatch.call(doc, "Close", false);
                // 关闭Word应用程序
                app.invoke("Quit", 0);
                return time;
            } catch (Exception e) {
                // TODO: handle exception
                return -1;
            }
    
        }
    
        /***
         *
         * Excel转化成PDF
         *
         * @param inputFile
         * @param pdfFile
         * @return
         */
        private static int Ex2PDF(String inputFile, String pdfFile) {
            try {
    
                ComThread.InitSTA(true);
                ActiveXComponent ax = new ActiveXComponent("KET.Application");
                System.out.println("开始转化Excel为PDF...");
                long date = new Date().getTime();
                ax.setProperty("Visible", false);
                ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
                Dispatch excels = ax.getProperty("Workbooks").toDispatch();
    
                Dispatch excel = Dispatch
                        .invoke(excels, "Open", Dispatch.Method,
                                new Object[] { inputFile, new Variant(false), new Variant(false) }, new int[9])
                        .toDispatch();
                // 转换格式
                Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[] { new Variant(0), // PDF格式=0
                        pdfFile, new Variant(xlTypePDF) // 0=标准 (生成的PDF图片不会变模糊) 1=最小文件
                                                // (生成的PDF图片糊的一塌糊涂)
                }, new int[1]);
    
                // 这里放弃使用SaveAs
                /*
                 * Dispatch.invoke(excel,"SaveAs",Dispatch.Method,new Object[]{
                 * outFile, new Variant(57), new Variant(false), new Variant(57),
                 * new Variant(57), new Variant(false), new Variant(true), new
                 * Variant(57), new Variant(true), new Variant(true), new
                 * Variant(true) },new int[1]);
                 */
                long date2 = new Date().getTime();
                int time = (int) ((date2 - date) / 1000);
                Dispatch.call(excel, "Close", new Variant(false));
    
                if (ax != null) {
                    ax.invoke("Quit", new Variant[] {});
                    ax = null;
                }
                ComThread.Release();
                return time;
            } catch (Exception e) {
                // TODO: handle exception
                return -1;
            }
        }
    
        /***
         * ppt转化成PDF
         *
         * @param inputFile
         * @param pdfFile
         * @return
         */
        private static int ppt2PDF(String inputFile, String pdfFile) {
            try {
                ComThread.InitSTA(true);
                ActiveXComponent app = new ActiveXComponent("KWPP.Application");
    //            app.setProperty("Visible", false);
                System.out.println("开始转化PPT为PDF...");
                long date = new Date().getTime();
                Dispatch ppts = app.getProperty("Presentations").toDispatch();
                Dispatch ppt = Dispatch.call(ppts, "Open", inputFile, true, // ReadOnly
                    //    false, // Untitled指定文件是否有标题
                        false// WithWindow指定文件是否可见
                ).toDispatch();
                Dispatch.invoke(ppt, "SaveAs", Dispatch.Method, new Object[]{
                        pdfFile,new Variant(ppSaveAsPDF)},new int[1]);
                System.out.println("PPT");
                Dispatch.call(ppt, "Close");
                long date2 = new Date().getTime();
                int time = (int) ((date2 - date) / 1000);
                app.invoke("Quit");
                return time;
            } catch (Exception e) {
                // TODO: handle exception
                return -1;
            }
        }
    }
  • 相关阅读:
    总公司路由排错?
    黄永成-thinkphp讲解-个人博客讲解26集
    fedora配置网络
    只有文本编辑器才是王道, 什么ide都是evil的浮云, 看看linus linux的内核开发工具vim emacs
    痛苦的事, 伤心的事, 一生只需要一次, 别折腾, 别忘痛- 人生, 软件, 所有人皆如是!
    我再也不-或许永远不-用zend studio-受够了!
    linux安装-版本选择-终极决定
    黄永成-thinkphp讲解-个人博客讲解25集
    linux的多媒体 播放 软件版权问题
    如何解决winows启动后出现grub?
  • 原文地址:https://www.cnblogs.com/shihaiming/p/12992495.html
Copyright © 2020-2023  润新知