(java office转pdf) MS Office2010、WPS2015、OpenOffice4用Java将Office文档转换为PDF,WIN7 64位系统
来源:互联网 发布:网络布线施工室分 编辑:程序博客网 时间:2024/05/17 02:09
1.前言
MS Office2010是可以的,理论上2007版本也可以,博主没试过;
Wps2015是可以的,理论上Wps2016也能用,Wps理论上还兼容MS Office的相关代码,有时间的可以试试;
Wps和Ms Office都需要导入jacob-1.18.jar包,以及将jacob-1.18-x64.dll或者jacob-1.18-x64.dll放置到jdk的bin目录(或者windows的System32/SysWoW64目录下)
而OpenOffice需要导入jodconverter-2.2.1.jar等相关包;
相关包的下载链接,包含实现代码:http://download.csdn.net/detail/huitoukest/9506740
包中的代码可能没有捕获NoClassDefFoundError异常和,建议使用者自行捕获;
2.MS Office2010
核心代码如下:
[java] view plain copy
- private static final int wdFormatPDF = 17;
- private static final int xlTypePDF = 0;
- private static final int ppSaveAsPDF = 32;
- //private static final int msoTrue = -1;
- //private static final int msofalse = 0;
- /**
- * @return 操作成功与否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置错误; 如果返回 0,
- * 则表示操作成功; 返回1, 则表示转换失败
- */
- @Override
- public int officeToPdf(OfficeToPDFInfo officeToPDFInfo) {
- String sourceFile=officeToPDFInfo.sourceUrl;
- String destFile=officeToPDFInfo.destUrl;
- File inputFile = new File(sourceFile);
- if (!inputFile.exists()) {
- return -1;// 找不到源文件, 则返回-1
- }
- // 如果目标路径不存在, 则新建该路径
- File outputFile = new File(destFile);
- if (!outputFile.getParentFile().exists()) {
- outputFile.getParentFile().mkdirs();
- }
- String extentionName=FileUtils.getFileExtension(sourceFile);
- if(extentionName.equalsIgnoreCase("ppt")||extentionName.equalsIgnoreCase("pptx"))
- {
- ppt2pdf(officeToPDFInfo.sourceUrl,officeToPDFInfo.destUrl);
- }else if(extentionName.equalsIgnoreCase("doc")||extentionName.equalsIgnoreCase("docx")){
- doc2pdf(officeToPDFInfo.sourceUrl,officeToPDFInfo.destUrl);
- }else if(extentionName.equalsIgnoreCase("xls")||extentionName.equalsIgnoreCase("xlsx")){
- excel2PDF(officeToPDFInfo.sourceUrl,officeToPDFInfo.destUrl);
- }
- return 0;
- }
- protected static boolean 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();
- 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, "Compatibility", false); //兼容性检查,为特定值false不正确
- Dispatch.put(doc, "RemovePersonalInformation", false);
- Dispatch.call(doc, "ExportAsFixedFormat", pdfFilePath,wdFormatPDF); // word保存为pdf格式宏,值为17
- return true; // set flag true;
- }finally {
- if (doc != null) {
- Dispatch.call(doc, "Close", false);
- }
- if (app != null) {
- app.invoke("Quit", 0);
- }
- ComThread.Release();
- }
- }
- protected static boolean ppt2pdf(String srcFilePath, String pdfFilePath) {
- ActiveXComponent app = null;
- Dispatch ppt = null;
- 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, ppSaveAsPDF); //ppSaveAsPDF为特定值32
- return true; // set flag true;
- }finally {
- if (ppt != null) {
- Dispatch.call(ppt, "Close");
- }
- if (app != null) {
- app.invoke("Quit");
- }
- ComThread.Release();
- }
- }
- public static boolean excel2PDF(String inputFile,String pdfFile){
- ActiveXComponent app=null;
- Dispatch excel =null;
- try{
- ComThread.InitSTA();
- 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);
- return true;
- }finally{
- if (excel!= null) {
- Dispatch.call(excel, "Close");
- }
- if (app != null) {
- app.invoke("Quit");
- }
- ComThread.Release();
- }
- }
2.Wps 2015
核心代码如下:
[java] view plain copy
- public final static String WORDSERVER_STRING="KWPS.Application";
- public final static String PPTSERVER_STRING="KWPP.Application";
- public final static String EXECLSERVER_STRING="KET.Application";
- private static final int wdFormatPDF = 17;
- private static final int xlTypePDF = 0;
- private static final int ppSaveAsPDF = 32;
- /**
- * @return 操作成功与否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置错误; 如果返回 0,
- * 则表示操作成功; 返回1, 则表示转换失败
- */
- @Override
- public int officeToPdf(OfficeToPDFInfo officeToPDFInfo) {
- String sourceFile=officeToPDFInfo.sourceUrl;
- String destFile=officeToPDFInfo.destUrl;
- File inputFile = new File(sourceFile);
- if (!inputFile.exists()) {
- return -1;// 找不到源文件, 则返回-1
- }
- // 如果目标路径不存在, 则新建该路径
- File outputFile = new File(destFile);
- if (!outputFile.getParentFile().exists()) {
- outputFile.getParentFile().mkdirs();
- }
- String extentionName=FileUtils.getFileExtension(sourceFile);
- if(extentionName.equalsIgnoreCase("ppt")||extentionName.equalsIgnoreCase("pptx")||extentionName.equalsIgnoreCase("wpt"))
- {
- ppt2pdf(officeToPDFInfo.sourceUrl,officeToPDFInfo.destUrl);
- }else if(extentionName.equalsIgnoreCase("doc")||extentionName.equalsIgnoreCase("docx")||extentionName.equalsIgnoreCase("wps")){
- doc2pdf(officeToPDFInfo.sourceUrl,officeToPDFInfo.destUrl);
- }else if(extentionName.equalsIgnoreCase("xls")||extentionName.equalsIgnoreCase("xlsx")||extentionName.equalsIgnoreCase("et")){
- excel2PDF(officeToPDFInfo.sourceUrl,officeToPDFInfo.destUrl);
- }
- return 0;
- }
- protected static boolean doc2pdf(String srcFilePath, String pdfFilePath) {
- ActiveXComponent pptActiveXComponent=null;
- ActiveXComponent workbook = null;
- try {
- ComThread.InitSTA();//初始化COM线程
- pptActiveXComponent = new ActiveXComponent(WORDSERVER_STRING);//初始化exe程序
- Variant[] openParams=new Variant[]{
- new Variant(srcFilePath),//filePath
- new Variant(true),
- new Variant(true)//readOnley
- };
- workbook = pptActiveXComponent.invokeGetComponent("Documents").invokeGetComponent
- ("Open",openParams);
- workbook.invoke("SaveAs",new Variant(pdfFilePath),new Variant(wdFormatPDF));
- return true;
- }finally{
- if(workbook!=null)
- {
- workbook.invoke("Close");
- workbook.safeRelease();
- }
- if(pptActiveXComponent!=null)
- {
- pptActiveXComponent.invoke("Quit");
- pptActiveXComponent.safeRelease();
- }
- ComThread.Release();
- }
- }
- protected static boolean ppt2pdf(String srcFilePath, String pdfFilePath) {
- ActiveXComponent pptActiveXComponent=null;
- ActiveXComponent workbook = null;
- boolean readonly = true;
- try {
- ComThread.InitSTA();//初始化COM线程
- pptActiveXComponent = new ActiveXComponent(PPTSERVER_STRING);//初始化exe程序
- workbook = pptActiveXComponent.invokeGetComponent("Presentations").invokeGetComponent
- ("Open",new Variant(srcFilePath),new Variant(readonly));
- workbook.invoke("SaveAs",new Variant(pdfFilePath),new Variant(ppSaveAsPDF));
- return true;
- }finally{
- if(workbook!=null)
- {
- workbook.invoke("Close");
- workbook.safeRelease();
- }
- if(pptActiveXComponent!=null)
- {
- pptActiveXComponent.invoke("Quit");
- pptActiveXComponent.safeRelease();
- }
- ComThread.Release();
- }
- }
- public static boolean excel2PDF(String srcFilePath,String pdfFilePath){
- ActiveXComponent et = null;
- Dispatch workbooks = null;
- Dispatch workbook = null;
- ComThread.InitSTA();//初始化COM线程
- //ComThread.InitSTA(true);
- try {
- et = new ActiveXComponent(EXECLSERVER_STRING);//初始化et.exe程序
- et.setProperty("Visible", new Variant(false));
- workbooks = et.getProperty("Workbooks").toDispatch();
- //workbook = Dispatch.call(workbooks, "Open", filename).toDispatch();//这一句也可以的
- workbook = Dispatch.invoke(workbooks,"Open",Dispatch.Method,new Object[]{srcFilePath,0,true},new int[1]).toDispatch();
- //Dispatch.invoke(workbook,"SaveAs",Dispatch.Method,new Object[]{pdfFilePath,xlTypePDF},new int[1]);
- Dispatch.call(workbook,"ExportAsFixedFormat",new Object[]{xlTypePDF,pdfFilePath});
- return true;
- }finally{
- if(workbook!=null)
- {
- Dispatch.call(workbook,"Close");
- workbook.safeRelease();
- }
- if(et!=null)
- {
- et.invoke("Quit");
- et.safeRelease();
- }
- ComThread.Release();
- }
- }
3.OpenOffice4.X
[java] view plain copy
- public int officeToPdf(OfficeToPDFInfo officeToPDFInfo) throws IOException {
- String sourceFile=officeToPDFInfo.sourceUrl;
- String destFile=officeToPDFInfo.destUrl;
- String OpenOffice_HOME=officeToPDFInfo.openOfficeHOME;
- File inputFile = new File(sourceFile);
- if (!inputFile.exists()) {
- return -1;// 找不到源文件, 则返回-1
- }
- // 如果目标路径不存在, 则新建该路径
- File outputFile = new File(destFile);
- if (!outputFile.getParentFile().exists()) {
- outputFile.getParentFile().mkdirs();
- }
- //= "D:\\Program Files\\OpenOffice.org 3";//这里是OpenOffice的安装目录, 在我的项目中,为了便于拓展接口,没有直接写成这个样子,但是这样是绝对没问题的
- // 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\'
- if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
- OpenOffice_HOME += "\\";
- }
- // 启动OpenOffice的服务
- String command = OpenOffice_HOME
- + "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;StarOffice.ServiceManager\" -nofirststartwizard";
- Process pro = Runtime.getRuntime().exec(command);
- // connect to an OpenOffice.org instance running on port 8100
- OpenOfficeConnection connection = new SocketOpenOfficeConnection(
- "127.0.0.1", 8100);
- connection.connect();
- // convert
- DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
- //DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
- converter.convert(inputFile, outputFile);
- // close the connection
- connection.disconnect();
- // 关闭OpenOffice服务的进程
- pro.destroy();
- return 0;
- }
0 0
- (java office转pdf) MS Office2010、WPS2015、OpenOffice4用Java将Office文档转换为PDF,WIN7 64位系统
- (java office转pdf) MS Office2010、WPS2015、OpenOffice4用Java将Office文档转换为PDF,WIN7 64位系统
- java使用openoffice将office系列文档转换为PDF
- java读取pdf和MS Office文档
- java office文档转pdf
- (三)java实现文档的在线浏览-使用JODConverter将office文档转换为pdf
- java中office文档的pdf转换
- office转pdf java
- 将office文档(word,excel,powerpoint)转换为pdf
- 将office文档(word,excel,powerpoint)转换为pdf
- (二)使用JODConverter将office文档转换为pdf
- 用Java实现office文件转换为PDF文件
- LibreOffice将office转换为pdf
- java将office文档pdf文档转换成swf文件在线预览
- java将office文档,word,ppt,pdf文档转换成swf文件在线预览
- Java利用OpenOffice将word等office文档转换成PDF
- Java利用OpenOffice将word等office文档转换成PDF
- Java利用OpenOffice将word等office文档转换成PDF
- 关于快速排序与归并排序
- Android关于安兔兔手机信息造假的问题。
- 项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目
- AES LINUX加密结果不一致
- Redis Cluster 源码分析
- (java office转pdf) MS Office2010、WPS2015、OpenOffice4用Java将Office文档转换为PDF,WIN7 64位系统
- 【leetcode】candy
- linux下安装mysql
- 8421码
- ZeroC Ice IceGrid Node和IceGrid
- node项目在服务器的部署
- webSocket与html区别,以及服务端与客户端消息通讯利用webSocket
- 中缀表达式转化为后缀表达式、后缀表达式求解(栈)
- bootstrap