美文网首页
iava 实现将office 文件转成pdf

iava 实现将office 文件转成pdf

作者: 意浅离殇 | 来源:发表于2017-10-15 21:46 被阅读0次

做一个项目需要文件预览效果,于是将office 文件转成pdf 进行预览,但是在网上找了很多发现很多大神都是用openoffice实现的,本地还要安装,感觉有点麻烦,难道就没有第三发就jar支持么,于是乎找了很久很久终于找到了一片博客 地址点这里
里面介绍的也和详细
首先我们需要下载这个jar 和dll文件放入java 配置路径
下载jacob.zip ,地址:https://sourceforge.net/projects/jacob-project/
下载完成后解压如下图:

这里写图片描述
如果是64位的就将x64 放入到jdk 安装目录的bin 中如果是32位的就将x86放入到jdk 安装目录的bin
之后再项目的pom配置文件中引入当然不是maven 工程也可以倒入这个jar
<dependency>
      <groupId>com.jacob</groupId>
      <artifactId>jacob</artifactId>
      <version>1.18-M2</version>
      <scope>system</scope>
      <systemPath>D:/jacob.jar</systemPath>
    </dependency>```
    之后写一个util的类来处理转换
    

public class PDFUtil {
    private static final Integer WORD_TO_PDF_OPERAND = 17;
    private static final Integer PPT_TO_PDF_OPERAND = 32;
    private static final Integer EXCEL_TO_PDF_OPERAND = 0;
    public void doc2pdf(String srcFilePath, String pdfFilePath)  {
        ActiveXComponent app = null;
        Dispatch doc = null;
        try {
            ComThread.InitSTA();
            app = new ActiveXComponent("Word.Application");
            app.setProperty("Visible", false);
            Dispatch docs = app.getProperty("Documents").toDispatch();
            Object[] obj = new Object[]{
                    srcFilePath,
                    new Variant(false),
                    new Variant(false),//是否只读
                    new Variant(false),
                    new Variant("pwd")
            };
            doc = Dispatch.invoke(docs, "Open", Dispatch.Method, obj, new int[1]).toDispatch();
//          Dispatch.put(doc, "Compatibility", false);  //兼容性检查,为特定值false不正确
            Dispatch.put(doc, "RemovePersonalInformation", false);
            Dispatch.call(doc, "ExportAsFixedFormat", pdfFilePath, WORD_TO_PDF_OPERAND); // word保存为pdf格式宏,值为17
        }catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (doc != null) {
                Dispatch.call(doc, "Close", false);
            }
            if (app != null) {
                app.invoke("Quit", 0);
            }
            ComThread.Release();
        }
    }

    public void ppt2pdf(String srcFilePath, String pdfFilePath) throws Exception {
        ActiveXComponent app = null;
        Dispatch ppt = null;
        try {
            ComThread.InitSTA();
            app = new ActiveXComponent("PowerPoint.Application");
            Dispatch ppts = app.getProperty("Presentations").toDispatch();

            /*
             * call
             * param 4: ReadOnly
             * param 5: Untitled指定文件是否有标题
             * param 6: WithWindow指定文件是否可见
             * */
            ppt = Dispatch.call(ppts, "Open", srcFilePath, true,true, false).toDispatch();
            Dispatch.call(ppt, "SaveAs", pdfFilePath, PPT_TO_PDF_OPERAND); // ppSaveAsPDF为特定值32

        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (ppt != null) {
                Dispatch.call(ppt, "Close");
            }
            if (app != null) {
                app.invoke("Quit");
            }
            ComThread.Release();
        }
    }

    public void excel2Pdf(String inFilePath, String outFilePath) throws Exception {
        ActiveXComponent ax = null;
        Dispatch excel = null;
        try {
            ComThread.InitSTA();
            ax = new ActiveXComponent("Excel.Application");
            ax.setProperty("Visible", new Variant(false));
            ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
            Dispatch excels = ax.getProperty("Workbooks").toDispatch();

            Object[] obj = new Object[]{
                    inFilePath,
                    new Variant(false),
                    new Variant(false)
            };
            excel = Dispatch.invoke(excels, "Open", Dispatch.Method, obj, new int[9]).toDispatch();

            // 转换格式
            Object[] obj2 = new Object[]{
                    new Variant(EXCEL_TO_PDF_OPERAND), // PDF格式=0
                    outFilePath,
                    new Variant(0)  //0=标准 (生成的PDF图片不会变模糊) ; 1=最小文件
            };
            Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method,obj2, new int[1]);

        } catch (Exception es) {
            es.printStackTrace();
            throw es;
        } finally {
            if (excel != null) {
                Dispatch.call(excel, "Close", new Variant(false));
            }
            if (ax != null) {
                ax.invoke("Quit", new Variant[] {});
                ax = null;
            }
            ComThread.Release();
        }

    }
}

相关文章

  • iava 实现将office 文件转成pdf

    做一个项目需要文件预览效果,于是将office 文件转成pdf 进行预览,但是在网上找了很多发现很多大神都是用o...

  • windows系统 安装OpenOffice(office文档转

    摘要:最近在做文件管理系统的时候,需要将office文档转成PDF文件,于是想到调用OpenOffice软件的co...

  • pdf转成word后格式调试

    pdf转成word后格式调试?我们常用的pdf转换软件在处理pdf文件转成了word文件时,经常会出现文件的格式方...

  • pdf转成word后格式快速调整

    pdf转成word后格式调试?我们常用的pdf转换软件在处理pdf文件转成了word文件时,经常会出现文件的格式方...

  • pdf转成word乱码怎么办

    pdf转成word乱码怎么办?我们常常在pdf文件的处理时,会用到pdf转换器软件对pdf文件进行转成word处理...

  • pdf转成word乱码怎么办

    pdf转成word乱码怎么办?我们常常在pdf文件的处理时,会用到pdf转换器软件对pdf文件进行转成word处理...

  • Excel文件怎么转成PDF文件

    Excel文件怎么转成PDF文件,在很多情况下,大家为了Excel文件更好的保存,往往会把Excel文件转成PDF...

  • 电脑和手机如何将PPT转成PDF?

    怎样才能将PPT转成PDF?将office文档转成PDF是我们平时经常会用到的,转换的方法也很多,下面分别从电脑和...

  • pdf转成word后还是不能编辑

    pdf转成word后还是不能编辑,怎么处理?pdf转成word后还是不能编辑的原因应该是pdf文件的源文件没有确定...

  • pdf格式文件转成ppt的教程

    pdf格式文件转成ppt的教程?pdf格式的文件转成ppt文件其实方法很多很多,我们在网络上看到的文献、或者资料等...

网友评论

      本文标题:iava 实现将office 文件转成pdf

      本文链接:https://www.haomeiwen.com/subject/sachuxtx.html