赞
踩
java采用jacob包的功能,把ppt演示文稿转换为pdf。
支持文件格式:pptx,ppt
1、依赖于office,需安装office办公软件
2、需要下载一个jacob-1.20-x64.dll的文件,放到java的bin目录下。
文件可以网上搜索下载。也可以点击百度网盘下载链接:
https://pan.baidu.com/s/16y-N03KPQJkne6g4sMLAmg?pwd=ix4j
- <dependency>
- <groupId>com.jacob</groupId>
- <artifactId>jacob</artifactId>
- <version>1.20</version>
- </dependency>
主要看ppt2PDF方法。
- package com.lan.fts.util;
-
- import com.jacob.activeX.ActiveXComponent;
- import com.jacob.com.ComThread;
- import com.jacob.com.Dispatch;
- import com.jacob.com.Variant;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
- /**
- * excel word ppt转pdf
- * 未完全完善
- * @author LAN
- * @date 2021年07月01日
- */
- public class JacobUtil {
-
- private static Logger log = LoggerFactory.getLogger(JacobUtil.class);
- 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 static void word2PDF(String inputFile, String pdfFile) {
- ComThread.InitSTA();
- ActiveXComponent app = new ActiveXComponent("Word.Application");
- try {
- app.setProperty("Visible", false);
- Dispatch docs = app.getProperty("Documents").toDispatch();
-
- Dispatch doc = Dispatch.call(docs, "Open", new Object[]{inputFile, false, true}).toDispatch();
- Dispatch.call(doc, "ExportAsFixedFormat", new Object[]{pdfFile, WORD_TO_PDF_OPERAND});
- Dispatch.call(doc, "Close", new Object[]{false});
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("转换出错:" + pdfFile);
- } finally {
- app.invoke("Quit");
- ComThread.Release();
- }
- }
-
- public static void excel2PDF(String inputFile, String pdfFile) {
- ComThread.InitSTA(true);
- ActiveXComponent app = new ActiveXComponent("Excel.Application");
- try {
- app.setProperty("Visible", false);
- app.setProperty("AutomationSecurity", new Variant(3));// 禁用宏
- Dispatch excels = app.getProperty("Workbooks").toDispatch();
- Object[] param1 = new Object[]{inputFile, new Variant(false), new Variant(false)};
- Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, param1, new int[9]).toDispatch();
- //转换
- Object[] param2 = new Object[]{
- new Variant(EXCEL_TO_PDF_OPERAND), // PDF格式=0
- pdfFile,
- new Variant(0) //0=标准 (生成的PDF图片不会变模糊) ; 1=最小文件
- };
- Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, param2, new int[1]);
- //关闭
- Dispatch.call(excel, "Close", new Object[]{false});
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("转换出错:" + pdfFile);
- } finally {
- app.invoke("Quit");
- ComThread.Release();
- }
- }
-
- private static ActiveXComponent ppt_app = new ActiveXComponent("PowerPoint.Application");
- public static void ppt2PDF(String inputFile, String pdfFile) {
- // ComThread.InitSTA();
- Dispatch ppts = ppt_app.getProperty("Presentations").toDispatch();
- try {
- /**
- * call
- * param 4: ReadOnly
- * param 5: Untitled指定文件是否有标题
- * param 6: WithWindow指定文件是否可见
- * */
- Dispatch ppt = Dispatch.call(ppts, "Open", new Object[]{inputFile, true, true, false}).toDispatch();
- Dispatch.call(ppt, "SaveAs", new Object[]{pdfFile, PPT_TO_PDF_OPERAND});
- //关闭
- Dispatch.call(ppt, "Close");
- } catch (Exception e) {
- log.error("转换出错:" + inputFile, e);
- try{
- ppt_app.invoke("Quit");
- }catch (Exception e1){
- log.error("ppt_app.invoke(\"Quit\")关闭出错!",e);
- }finally{
- ppt_app = new ActiveXComponent("PowerPoint.Application");
- }
- } finally {
- // ppt_app.invoke("Quit");
- // ComThread.Release();
- }
- }
- }

- public static void main(String[] args) {
- JacobUtil.ppt2PDF("D:\\data\\out\\lanhezhong文件转换.pptx", "D:\\data\\out\\lanhezhong文件转换.pptx.pdf");
- }
运行结果:
总结:ppt转pdf转换的结果比较好,基本上保持ppt的原本内容格式。
***********************************************************************************************
author:蓝何忠
email:lanhezhong@163.com
***********************************************************************************************
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。