Jacob工具类使用文件互转服务 word转html html转excel word转pdf excel转pdf ppt转pdf
- 安装Microsoft Office
- JDK 最低1.6
- jacob-1.18-M2-1.zip
- idea
- spring boot项目
需求:银行的报表下载来有的是正规的excel 有的是不正规的表格 内部是html写的,因此 产生了此业务.
原来 用linux上的LibreOffice命令行方式将excel进行转换,后来发现 转换过程中发现不支持多线程并发,转换科学计数法会出问题.跟Microsoft Office不是一个级别的.最终方案 在一台windows上搭建一个转换服务,使用kafka 或httpClient方式进行服务.
核心工具类:
package com.guige.base.util; 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; import java.util.Date; /**
* TODO
*
* @author songaw
* @date 2018/5/17 9:54
*/
public class JacobUtil {
//word转PDF
private static final String wdFormatPDF="17";
//html转xls
private static final String htmlFormatExcel="51";
//PPT 转pdf
private static final String pptFormatPDF="32";
//excel转PDF
private static final String xlTypePDF="0"; /**
* html转excel
* @param srcFilePath
* @param targetFilePath
* @return
*/
public static boolean htmlToExcel(String srcFilePath, String targetFilePath) {
ActiveXComponent app = null;
Dispatch excel = null;
try {
app = new ActiveXComponent("Excel.Application");
System.out.println("*****正在转换...*****");
// 设置Excel应用程序不可见
app.setProperty("Visible", false);
// Workbooks表示Excel程序的所有文档窗口,(
app.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
Dispatch excels = app.getProperty("Workbooks").toDispatch();
//打开要转换的Excel文件
excel = Dispatch.call(excels, "Open", srcFilePath, false,
true).toDispatch();
//设置兼容性检查为false
Dispatch.put(excel, "CheckCompatibility", false);
app.setProperty("DisplayAlerts",false);
Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[]{targetFilePath, new Variant(htmlFormatExcel)}, new int[1]);
app.setProperty("DisplayAlerts",true);
System.out.println("*****转换成功...*****");
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (excel != null) {
Dispatch.call(excel, "Close", false);
}
if (app != null) {
app.invoke("Quit", new Variant[] {});
//app.invoke("Quit", 0);
}
ComThread.Release();
}
} /**
* word转pdf
* @param srcFilePath
* @param targetFilePath
* @return
*/
public static boolean docToPdf(String srcFilePath, String targetFilePath) {
ActiveXComponent app = null;
Dispatch doc = null;
try {
ComThread.InitSTA();
app = new ActiveXComponent("Word.Application");
System.out.println("*****正在转换...*****");
app.setProperty("Visible", false);
Dispatch docs = app.getProperty("Documents").toDispatch();
doc = Dispatch.invoke(docs, "Open", Dispatch.Method,
new Object[] { srcFilePath,
new Variant(false),
new Variant(true),//是否只读
new Variant(false),
new Variant("pwd") },
new int[1]).toDispatch();
//Dispatch.put(doc, "CheckCompatibility", false); //兼容性检查,为特定值false不正确
Dispatch.put(doc, "RemovePersonalInformation", false);
app.setProperty("DisplayAlerts",false);
Dispatch.call(doc, "ExportAsFixedFormat", targetFilePath, wdFormatPDF); // word保存为pdf格式宏,值为17
app.setProperty("DisplayAlerts",true);
System.out.println("*****转换成功...*****");
return true; // set flag true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (doc != null) {
Dispatch.call(doc, "Close", false);
}
if (app != null) {
app.invoke("Quit", 0);
} ComThread.Release();
}
}
public static boolean pptToPdf(String srcFilePath, String pdfFilePath) {
ActiveXComponent app = null;
Dispatch ppt = null;
try {
ComThread.InitSTA();
app = new ActiveXComponent("PowerPoint.Application");
System.out.println("*****正在转换...*****");
Dispatch ppts = app.getProperty("Presentations").toDispatch(); // 因POWER.EXE的发布规则为同步,所以设置为同步发布
ppt = Dispatch.call(ppts, "Open", srcFilePath, true,// ReadOnly
true,// Untitled指定文件是否有标题
false// WithWindow指定文件是否可见
).toDispatch();
//Dispatch.put(ppt, "CheckCompatibility", false); //兼容性检查,为特定值false不正确
app.setProperty("DisplayAlerts",false);
Dispatch.call(ppt, "SaveAs", pdfFilePath, pptFormatPDF); //ppSaveAsPDF为特定值32
app.setProperty("DisplayAlerts",true);
System.out.println("*****转换成功...*****");
return true; // set flag true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (ppt != null) {
Dispatch.call(ppt, "Close");
}
if (app != null) {
app.invoke("Quit");
}
ComThread.Release();
}
}
public static boolean excelToPDF(String srcFilePath, String pdfFilePath) {
ActiveXComponent app = null;
Dispatch excel = null;
try { ComThread.InitSTA(true);
app = new ActiveXComponent("Excel.Application");
System.out.println("*****正在转换...*****");
long date = new Date().getTime();
app.setProperty("Visible", false);
app.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
Dispatch excels = app.getProperty("Workbooks").toDispatch(); excel = Dispatch
.invoke(excels, "Open", Dispatch.Method,
new Object[] { srcFilePath, new Variant(false), new Variant(false) }, new int[9])
.toDispatch();
// 转换格式
Dispatch.put(excel, "CheckCompatibility", false);
app.setProperty("DisplayAlerts",false);
Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[] { new Variant(0), // PDF格式=0
pdfFilePath, new Variant(xlTypePDF) // 0=标准 (生成的PDF图片不会变模糊) 1=最小文件
// (生成的PDF图片糊的一塌糊涂)
}, new int[1]);
app.setProperty("DisplayAlerts",true);
System.out.println("*****转换成功...*****");
// 这里放弃使用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]);
*/ return true;
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
return false;
}finally {
if (excel != null) {
Dispatch.call(excel, "Close", false);
}
if (app != null) {
app.invoke("Quit", new Variant[] {});
//app.invoke("Quit", 0);
}
ComThread.Release();
}
}
}
各个转换代码:
Excel操作 转换
xlAddIn 18 Microsoft Office Excel 加载项 xlAddIn8 18 Excel 2007 加载项 xlCSV 6 CSV xlCSVMac 22 Macintosh CSV xlCSVMSDOS 24 MSDOS CSV xlCSVWindows 23 Windows CSV xlCurrentPlatformText -4158 当前平台文本 xlDBF2 7 DBF2 xlDBF3 8 DBF3 xlDBF4 11 DBF4 xlDIF 9 DIF xlExcel12 50 Excel 12 xlExcel2 16 Excel 2 xlExcel2FarEast 27 Excel2 FarEast xlExcel3 29 Excel3 xlExcel4 33 Excel4 xlExcel4Workbook 35 Excel4 工作簿 xlExcel5 39 Excel5 xlExcel7 39 Excel7 xlExcel8 56 Excel8 xlExcel9795 43 Excel9795 xlHtml 44 HTML 格式 xlIntlAddIn 26 国际加载项 xlIntlMacro 25 国际宏 xlOpenXMLAddIn 55 打开 XML 加载项 xlOpenXMLTemplate 54 打开 XML 模板 xlOpenXMLTemplateMacroEnabled 53 打开启用的 XML 模板宏 xlOpenXMLWorkbook 51 打开 XML 工作簿 xlOpenXMLWorkbookMacroEnabled 52 打开启用的 XML 工作簿宏 xlSYLK 2 SYLK xlTemplate 17 模板 xlTemplate8 17 模板 8 xlTextMac 19 Macintosh 文本 xlTextMSDOS 21 MSDOS 文本 xlTextPrinter 36 打印机文本 xlTextWindows 20 Windows 文本 xlUnicodeText 42 Unicode 文本 xlWebArchive 45 Web 档案 xlWJ2WD1 14 WJ2WD1 xlWJ3 40 WJ3 xlWJ3FJ3 41 WJ3FJ3 xlWK1 5 WK1 xlWK1ALL 31 WK1ALL xlWK1FMT 30 WK1FMT xlWK3 15 WK3 xlWK3FM3 32 WK3FM3 xlWK4 38 WK4 xlWKS 4 工作表 xlWorkbookDefault 51 默认工作簿 xlWorkbookNormal -4143 常规工作簿 xlWorks2FarEast 28 Works2 FarEast xlWQ1 34 WQ1 xlXMLSpreadsheet 46 XML 电子表格 word 操作 转换 //0:Microsoft Word 97 - 2003 文档 (.doc) //1:Microsoft Word 97 - 2003 模板 (.dot) //2:文本文档 (.txt) //3:文本文档 (.txt) //4:文本文档 (.txt) //5:文本文档 (.txt) //6:RTF 格式 (.rtf) //7:文本文档 (.txt) //8:HTML 文档 (.htm)(带文件夹) //9:MHTML 文档 (.mht)(单文件) //10:MHTML 文档 (.mht)(单文件) //11:XML 文档 (.xml) //12:Microsoft Word 文档 (.docx) //13:Microsoft Word 启用宏的文档 (.docm) //14:Microsoft Word 模板 (.dotx) //15:Microsoft Word 启用宏的模板 (.dotm) //16:Microsoft Word 文档 (.docx) //17:PDF 文件 (.pdf) //18:XPS 文档 (.xps) //19:XML 文档 (.xml) //20:XML 文档 (.xml) //21:XML 文档 (.xml) //22:XML 文档 (.xml) //23:OpenDocument 文本 (.odt) //24:WTF 文件 (.wtf)
看看效果:
excel转PDF
PPF转PDF

html转xls


源码地址https://gitee.com/javaqingchun/rocky-convert.git
Jacob工具类使用文件互转服务 word转html html转excel word转pdf excel转pdf ppt转pdf的更多相关文章
- 【转载】ASP.NET工具类:文件夹目录Directory操作工具类
在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...
- 文件压缩、解压工具类。文件压缩格式为zip
package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...
- FastDFS 工具类实现文件上传_02
一.jar 包 jar包下载:https://pan.baidu.com/s/1nwkAHU5 密码:tlv6 或者 下载工程,安装到 maven 本地仓库 工程下载:https://pan.baid ...
- 工具类_JavaPOI_Office文件内容读取
文件内容读取工具类,亲测可用 maven依赖: <dependency> <groupId>org.apache.poi</groupId> <artifac ...
- list集合、txt文件对比的工具类和文件读写工具类
工作上经常会遇到处理大数据的问题,下面两个工具类,是在处理大数据时编写的:推荐的是使用map的方式处理两个list数据,如果遇到list相当大数据这个方法就起到了作用,当时处理了两个十万级的list, ...
- 常用工具类,文件和内存的大小获取,shell脚本的执行
/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- 【转载】C#工具类:实现文件操作File的工具类
在应用程序的开发中,文件操作的使用基本上是必不可少的,FileStream类.StreamWriter类.Directory类.DirectoryInfo类等都是文件操作中时常涉及到的类,我们可以通过 ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- Android工具类整合
Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...
随机推荐
- OpenCV轮廓检测,计算物体旋转角度
效果还是有点问题的,希望大家共同探讨一下 // FindRotation-angle.cpp : 定义控制台应用程序的入口点. // // findContours.cpp : 定义控制台应用程序的入 ...
- 深度剖析linux内核万能--双向链表,Hash链表模版
我们都知道,链表是数据结构中用得最广泛的一种数据结构,对于数据结构,有顺序存储,数组就是一种.有链式存储,链表算一种.当然还有索引式的,散列式的,各种风格的说法,叫法层出不穷,但是万变不离其中,只要知 ...
- OpenCV 求外接矩形以及旋转角度
程序没有写完整,大概功能就是实现了,希望大家分享学习,把他改对 // FindRotation-angle.cpp : 定义控制台应用程序的入口点. // // findContours.cpp : ...
- nexus安装
nexus 快速安装指南 1)下载 nexus-2.9.2-01-bundle.zip 地址: http://www.sonatype.org/nexus/ 2)解压 redhat服务器:/opt下面 ...
- Mac OS X安装native gem提示找不到 dyld_stub_binding_helper
在Mac OS X10.10下sudo gem install curses 返回如下错误: apple@kissAir: ruby_src$sudo gem install curses Passw ...
- Oracle12c(12.1)中性能优化&功能增强之通过参数THREADED_EXECTION使用多线程模型
1. 后台 UNIX/Linux系统上,oracle用多进程模型.例如:linux上一个常规安装的数据库会有如下进程列: $ ps -ef | grep [o]ra_ oracle 15356 ...
- Hibernate与Mybatis的比较
Hibernate与Mybatis的比较: Hibernate: 标准的.重量级.全自动化的ORM框架 可以写sql(SQLQuery,sql )也可以不写sql(Query,hql) ORM映射主要 ...
- Form 和 Input 对象
更改表单的 action 属性 <html> <head> <script type="text/javascript"> function c ...
- Unknown entity: org.jbpm.services.task.audit.TaskEventImpl
1. use this persistence.xml - simply copy it into src/main/resources/META-INF please note the name o ...
- 了解与建设有中国特色的Android M&N(Android6.0和7.0新特性分析)
http://geek.csdn.NET/news/detail/110434 Android N已经发布有段时间,甚至马上都要发布android 7.1,相信不少玩机爱好者已经刷入最新的Androi ...