• java使用jacob将office文档转换为PDF格式


    jacob 包下载地址: http://sourceforge.net/projects/jacob-project/

    下载后,将jacob 与 jacob-1.19-x64.dll放到安装jdk目录中

    jacob.jar  放入到 jdk/jre/lib/ext中

    jacob-1.19-x64.dll放入到 jdk/jre/bin中

    实现代码如下

    package com.ypr.modules.op.utils;
    
    import java.io.File;
    
    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 ToPDF {
    
        private static final int wdFormatPDF = 17; // PDF 格式
        private static final int xlTypePDF = 0;  // xls格式
    
        public boolean toPDF(String sfileName, String toFileName) {
            System.out.println("------开始转换------");
            String suffix = getFileSufix(sfileName);
            File file = new File(sfileName);
            if (!file.exists()) {
                System.out.println("文件不存在!");
                return false;
            }
            if (suffix.equals("pdf")) {
                System.out.println("PDF not need to convert!");
                return false;
            }
    
            if (suffix.equals("doc") || suffix.equals("docx") || suffix.equals("txt")) {
                return word2PDF(sfileName, toFileName);
            } else if (suffix.equals("ppt") || suffix.equals("pptx")) {
                return ppt2PDF(sfileName, toFileName);
            } else if (suffix.equals("xls") || suffix.equals("xlsx")) {
                return excel2PDF(sfileName, toFileName);
            } else {
                System.out.println("文件格式不支持转换!");
                return false;
            }
    
        }
       //截取文件后缀方法
        public static String getFileSufix(String fileName) {
            int splitIndex = fileName.lastIndexOf(".");
            return fileName.substring(splitIndex + 1);
        }
      //转换word文档
        public boolean word2PDF(String sfileName, String toFileName) {
            long start = System.currentTimeMillis();
            ActiveXComponent app = null;
            Dispatch doc = null;
            boolean result = true;
    
            try {
                app = new ActiveXComponent("Word.Application");
                app.setProperty("Visible", new Variant(false));
                Dispatch docs = app.getProperty("Documents").toDispatch();
                doc = Dispatch.call(docs, "Open", sfileName).toDispatch();
                System.out.println("打开文档..." + sfileName);
                System.out.println("转换文档到 PDF..." + toFileName);
                File tofile = new File(toFileName);
                if (tofile.exists()) {
                    tofile.delete();
                }
                Dispatch.call(doc, "SaveAs", toFileName, wdFormatPDF);
                long end = System.currentTimeMillis();
                System.out.println("转换完成..用时:" + (end - start) + "ms.");
    
                result = true;
            } catch (Exception e) {
                // TODO: handle exception
    
                System.out.println("========Error:文档转换失败:" + e.getMessage());
                result = false;
            } finally {
                Dispatch.call(doc, "Close", false);
                System.out.println("关闭文档");
                if (app != null) {
                    app.invoke("Quit", new Variant[] {});
                }
            }
    
            ComThread.Release();
    
            return result;
        }
        //转换excel文档
        public boolean excel2PDF(String inputFile, String pdfFile) {
            ActiveXComponent app = null;
            Dispatch excel = null;
            boolean result = true;
            try {
                
                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);
                System.out.println("打开文档..." + inputFile);
                System.out.println("转换文档到 PDF..." + pdfFile);
                result = true;
            } catch (Exception e) {
                result = false;
            } finally {
                if (excel != null) {
                    Dispatch.call(excel, "Close");
                }
                if (app != null) {
                    app.invoke("Quit");
                }
            }
            return result;
        }
        //转换ppt文档
        public boolean ppt2PDF(String srcFilePath, String pdfFilePath) {
            ActiveXComponent app = null;
            Dispatch ppt = null;
            boolean result = true;
            try {
                ComThread.InitSTA();
                app = new ActiveXComponent("PowerPoint.Application");
                Dispatch ppts = app.getProperty("Presentations").toDispatch();
    
                // 因POWER.EXE的发布规则为同步,所以设置为同步发布
                ppt = Dispatch.call(ppts, "Open", srcFilePath, true, // ReadOnly
                        true, // Untitled指定文件是否有标题
                        false// WithWindow指定文件是否可见
                ).toDispatch();
    
                Dispatch.call(ppt, "SaveAs", pdfFilePath, 32); // ppSaveAsPDF为特定值32
                System.out.println("转换文档到 PDF..." + pdfFilePath);
                result = true; // set flag true;
            } catch (ComFailException e) {
                result = false;
            } catch (Exception e) {
                result = false;
            } finally {
                if (ppt != null) {
                    Dispatch.call(ppt, "Close");
                }
                if (app != null) {
                    app.invoke("Quit");
                }
                ComThread.Release();
            }
            return result;
        }
    
        public static void main(String[] args) {
            ToPDF d = new ToPDF();
            //d.wordToPDF("E:\poi-test\hadoop集群搭建.docx", "E:\poi-test\hadoop集群搭建.pdf");
            d.toPDF("E:\poi-test\私有云清单.xlsx", "E:\poi-test\私有云清单.pdf");
            
        }
    }
  • 相关阅读:
    如何查看自己的显卡是否支持DirectX 12
    笔记本屏幕忽然变暗的解决办法
    Python 自动给数字前面补0
    vscode左边侧边栏字体的大小
    .NET 异步详解
    新版 C# 高效率编程指南
    轻松学会 React 钩子:以 useEffect() 为例
    React Hooks 入门教程
    UMI.js开发知识总结
    处理react项目ie11浏览器运行空白问题
  • 原文地址:https://www.cnblogs.com/yypr/p/java.html
Copyright © 2020-2023  润新知