项目中遇到了需要把用户上传的word,execl,ppt每页截图保存。需要先用到jacob把资源转换为pdf,在通过pdf-renderer把每页截图下来。

下载相关的jar包:http://download.csdn.net/download/papima/10208770

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 Word2PDF {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("E:/aaaa.doc", "E:/临时文件.pdf");int time = convert2PDF("E:/培训考试系统功能开发 - V1.0.xls", "E:/临时文件1.pdf");/*   int time = convert2PDF("E:/ccccc.ppt", "E:/临时文件2.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 Word2PDF.word2PDF(inputFile, pdfFile);}else if (kind.equals("ppt")||kind.equals("pptx")) {return Word2PDF.ppt2PDF(inputFile, pdfFile);}else if(kind.equals("xls")||kind.equals("xlsx")){return Word2PDF.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 stubtry {// 打开Word应用程序ActiveXComponent app = new ActiveXComponent("Word.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方法打开文档,并返回打开的文档对象DocumentDispatch doc = Dispatch.call(docs, "Open", inputFile, false, true).toDispatch();File tofile = new File(pdfFile);  if (tofile.exists()) {  tofile.delete();  }  /**** * 调用Document对象的SaveAs方法,将文档保存为pdf格式* * Dispatch.call(doc, "SaveAs", pdfFile, wdFormatPDF* word保存为pdf格式宏,值为17 )* */Dispatch.call(doc, "ExportAsFixedFormat", pdfFile, wdFormatPDF);// word保存为pdf格式宏,值为17System.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 exceptione.printStackTrace();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("Excel.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();File tofile = new File(pdfFile);  if (tofile.exists()) {  tofile.delete();  } // 转换格式Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[] { new Variant(0), // PDF格式=0pdfFile, 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 exceptione.printStackTrace();return -1;}}/**** ppt转化成PDF* PPT必须是2007一下的版本,不然会报错。* @param inputFile* @param pdfFile* @return*/private static int ppt2PDF(String inputFile, String pdfFile) {try {ComThread.InitSTA(true);ActiveXComponent app = new ActiveXComponent("PowerPoint.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();File tofile = new File(pdfFile);  if (tofile.exists()) {  tofile.delete();  } 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 exceptione.printStackTrace();return -1;}}
}

java利用jacob实现word,ppt,excel,jpg转pdf相关推荐

  1. java使用jacob将word,excel,ppt转成html

    用到的jar包及插件: jacob-1.18( jacob.jar) jacob-1.18( jacob-1.18-x64.dll)(32位) jacob-1.18( jacob-1.18-x86.d ...

  2. java 利用openOffice实现word ppt 等资源转化为pdf文件

    网上有很多教程,但是很多坑,比如jobconvert2.2.1无法转pptx等格式的文件 而jobconvert2.2.2可以  但是maven仓库又没有  对于公司开发  这是个问题 毕竟公司的仓库 ...

  3. python 根据word生成ppt_未明学院:利用Python将Wordamp;PPT批量转成PDF

    Python中的许多库,像一个个具有不同功能的"工具",能帮助我们解决工作中的不同问题,提高工作效率! 本期将继续为大家放松python中的实用技能,本期的主题是:利用Python ...

  4. java 使用jacob实现word、excle、ppt、图片转pdf

    java 使用jacob实现word.excle.ppt.图片转pdf IDEA Maven 微服务项目示例 示例: 步骤: 1.jarcob jar包.插件下载 SaveAsPDFandXPS 下载 ...

  5. jacob操作word和excel

    jacob操作word和excel jacob的官方文档:http://danadler.com/jacob/ 微软的javasdk文档:http://f2.grp.yahoofs.com/v1/II ...

  6. java使用jacob操作word添加图片

    1.操作word需要的jacobjar包和dll文件.(请多多支持!) java使用jacob给word添加水印.这是给word添加水印,当业务需求在多页word文档中,某一页添加水印一样的盖章,这个 ...

  7. Office2016只安装三件套方法(word,ppt,excel)另附安装visio2016安装教程

    制作简介:在安装office时除了常用的三件套,office其他的组件基本用不上,但是一键安装的时候,无法选择安装:这里就介绍了只安装office三件套的方法: 1.下载需要的office安装文件io ...

  8. office@microsoft365@官方在线安装@第三方离线下载并安装(word+ppt+excel)

    文章目录 官方下载@office下载安装 其他(三方)安装途径(离线安装) 版本补充说明 官方下载@office下载安装 Download and install or reinstall Micro ...

  9. Java 利用hutool工具实现导出excel并合并单元格

    Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...

最新文章

  1. 用电脑自带画图工具加字方法
  2. 免费报名 | 微软全双工语音对话以及在智能硬件上的应用
  3. Exchange 2010 EMC 删除 DisconnectedMailbox
  4. oop第二章1知识点汇总
  5. Power Designer反向获取数据库物理模型时Unable to list the users.
  6. .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
  7. flex 读取外部txt文件时候出现中文乱码现象
  8. [SD2.0大会]王坚:Data–centric Computing
  9. Python Django 使用cookie实现三天免登录及记住密码功能代码示例
  10. 【springboot】静态资源设置缓存时间
  11. 如何绑定多个action到一个slot
  12. [转]Redis内部数据结构详解-sds
  13. python计算空类型_python的变量 类型和存储
  14. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY‘RE NOT. RENEWALS ARE LESSER
  15. 【数据分享】历次人口普查数据(一普到七普)
  16. 《数字孪生体技术白皮书》重磅发布(附完整版下载)
  17. s3cmd常用命令和使用技巧
  18. pr EN2824 - Pr EN 2825- Pr EN 2826 是烟密度和烟气成分分析测试
  19. c语言用switch计算税收,求助。。关于用switch编写简易计算器
  20. 关于 DRM 中 DUMB 和 PRIME 名字的由来

热门文章

  1. android app在线商城,ECMobile:只需一步即可生成iOS或Android原生APP商城应用
  2. 2020 零基础到快速开发 Vue全家桶开发电商管理系统(Element-UI)商品分类篇
  3. Stata教程(二)---基本操作
  4. 烦不烦,别再问我时间复杂度了:这次不色,女孩子进来吧
  5. ASP.NET(基于C#)及Sql Server2008网页项目学习总结
  6. 计算机课件制作总结,课件制作培训总结5篇
  7. nuxt.js面试篇
  8. AAC文件格式与解码流程(未完待续)
  9. Opportunity
  10. 标准G726音频解码和与H264视频封装为avi