java实现word转pdf 谁有正常运行过的程序或配置,能否共享一下。网上看了好多资料,最终没能正常运行,谢拉。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;/** * @author XuMing Li * * @version 1.00, 2007-4-9 * */public class D2P { private ActiveXComponent wordCom = null; private Object wordDoc = null; private final Variant False = new Variant(false); private final Variant True = new Variant(true); /** * 打开word文档 * * @param filePath * word文档 * @return 返回word文档对象 */ public boolean openWord(String filePath) { //建立ActiveX部件 wordCom = new ActiveXComponent("Word.Application"); try { //返回wrdCom.Documents的Dispatch Dispatch wrdDocs = wordCom.getProperty("Documents").toDispatch(); //调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc wordDoc = Dispatch.invoke(wrdDocs, "Open", Dispatch.Method, new Object[] { filePath }, new int[1]).toDispatch(); return true; } catch (Exception ex) { ex.printStackTrace(); } return false; } /** * 关闭word文档 */ public void closeWord() { //关闭word文件 wordCom.invoke("Quit", new Variant[] {}); } /** * * 将word文档打印为PS文件后,使用Distiller将PS文件转换为PDF文件 * * * @param sourceFilePath * 源文件路径 * * @param destinPSFilePath * 首先生成的PS文件路径 * * @param destinPDFFilePath * 生成PDF文件路径 */ public void docToPDF(String sourceFilePath, String destinPSFilePath, String destinPDFFilePath) { if (!openWord(sourceFilePath)) { closeWord(); return; } //建立Adobe Distiller的com对象 ActiveXComponent distiller = new ActiveXComponent( "PDFDistiller.PDFDistiller.1"); try { //设置当前使用的打印机,我的Adobe Distiller打印机名字为"Adobe PDF" wordCom.setProperty("ActivePrinter", new Variant("Adobe PDF")); //设置printout的参数,将word文档打印为postscript文档。目前只使用了前5个参数,如果要使用更多的话可以参考MSDN的office开发相关api //是否在后台运行 Variant Background = False; //是否追加打印 Variant Append = False; //打印所有文档 int wdPrintAllDocument = 0; Variant Range = new Variant(wdPrintAllDocument); //输出的postscript文件的路径 Variant OutputFileName = new Variant(destinPSFilePath); Dispatch.callN((Dispatch) wordDoc, "PrintOut", new Variant[] { Background, Append, Range, OutputFileName }); System.out.println("由word文档打印为ps文档成功!"); //调用Distiller对象的FileToPDF方法所用的参数,详细内容参考Distiller Api手册 //作为输入的ps文档路径 Variant inputPostScriptFilePath = new Variant(destinPSFilePath); //作为输出的pdf文档的路径 Variant outputPDFFilePath = new Variant(destinPDFFilePath); //定义FileToPDF方法要使用adobe pdf设置文件的路径,在这里没有赋值表示并不使用pdf配置文件 Variant PDFOption = new Variant(""); //调用FileToPDF方法将ps文档转换为pdf文档 Dispatch.callN(distiller, "FileToPDF", new Variant[] { inputPostScriptFilePath, outputPDFFilePath, PDFOption }); System.out.println("由ps文档转换为pdf文档成功!"); } catch (Exception ex) { ex.printStackTrace(); } finally { closeWord(); } } public static void main(String[] argv) { D2P d2p = new D2P(); // d2p.openWord("c:/12.doc"); // d2p.callWordMacro("c:/12.docc", "MyWordMacro", // new String[] { "这是调用word宏的测试程序" }); d2p.docToPDF("d:/12.doc", "c:/1p.ps", "c:/1p.pdf"); }}=================================================When you create a PostScript file you have to send the host fonts.Please go to the printer properties, "Adobe PDF Settings" page and turn OFF the option "Do not send fonts to Distiller"=================================================com.jacob.com.ComFailException: Invoke of: PrintOutSource: Microsoft WordDescription: SSORS=1 at com.jacob.com.Dispatch.invokev(Native Method) at com.jacob.com.Dispatch.invokev(Dispatch.java:804) at com.jacob.com.Dispatch.callN(Dispatch.java:440) at com.lixuming.util.D2P.docToPDF(D2P.java:87) at com.lixuming.util.D2P.main(D2P.java:113) 这个可能是jacob版本的问题。你换一个jacob可能会好得~ GOOGLE 搜索 "JAVA操作OPENOFFICE" 第一个 还有 这是相当有难度的, 10分显然少了 与大家分享我的第一个开源项目 请问各路高手java中有没有备份原文件的类库 画的弧闪一下就不见了? 新手求助,谢谢! 求高手指教:怎么样利用JMF同时使用两个USB摄像头进行视频采集? EditPlus的使用者come in 用Class.forName(String)时,提示找不到这个类? 请问,如何一次查询一个数据库的所有表? 关于JTable双击表头的排序的问题。 Java的File类中getAbsoluteFile()与getAbsolutePath()这两个方法的区别到底是什么? java中对未捕获异常是否可以设置一个全局的处理函数 用SUN的sun.net.ftp包怎么下载很慢?
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;/**
* @author XuMing Li
*
* @version 1.00, 2007-4-9
*
*/
public class D2P {
private ActiveXComponent wordCom = null; private Object wordDoc = null; private final Variant False = new Variant(false); private final Variant True = new Variant(true); /**
* 打开word文档
*
* @param filePath
* word文档
* @return 返回word文档对象
*/
public boolean openWord(String filePath) {
//建立ActiveX部件
wordCom = new ActiveXComponent("Word.Application"); try {
//返回wrdCom.Documents的Dispatch
Dispatch wrdDocs = wordCom.getProperty("Documents").toDispatch();
//调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc
wordDoc = Dispatch.invoke(wrdDocs, "Open", Dispatch.Method,
new Object[] { filePath }, new int[1]).toDispatch();
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
} /**
* 关闭word文档
*/
public void closeWord() {
//关闭word文件
wordCom.invoke("Quit", new Variant[] {});
} /**
* * 将word文档打印为PS文件后,使用Distiller将PS文件转换为PDF文件 *
*
* @param sourceFilePath
* 源文件路径 *
* @param destinPSFilePath
* 首先生成的PS文件路径 *
* @param destinPDFFilePath
* 生成PDF文件路径
*/
public void docToPDF(String sourceFilePath, String destinPSFilePath,
String destinPDFFilePath) {
if (!openWord(sourceFilePath)) {
closeWord();
return;
}
//建立Adobe Distiller的com对象
ActiveXComponent distiller = new ActiveXComponent(
"PDFDistiller.PDFDistiller.1");
try {
//设置当前使用的打印机,我的Adobe Distiller打印机名字为"Adobe PDF"
wordCom.setProperty("ActivePrinter", new Variant("Adobe PDF"));
//设置printout的参数,将word文档打印为postscript文档。目前只使用了前5个参数,如果要使用更多的话可以参考MSDN的office开发相关api
//是否在后台运行
Variant Background = False;
//是否追加打印
Variant Append = False;
//打印所有文档
int wdPrintAllDocument = 0;
Variant Range = new Variant(wdPrintAllDocument);
//输出的postscript文件的路径
Variant OutputFileName = new Variant(destinPSFilePath); Dispatch.callN((Dispatch) wordDoc, "PrintOut", new Variant[] {
Background, Append, Range, OutputFileName });
System.out.println("由word文档打印为ps文档成功!");
//调用Distiller对象的FileToPDF方法所用的参数,详细内容参考Distiller Api手册
//作为输入的ps文档路径
Variant inputPostScriptFilePath = new Variant(destinPSFilePath);
//作为输出的pdf文档的路径
Variant outputPDFFilePath = new Variant(destinPDFFilePath);
//定义FileToPDF方法要使用adobe pdf设置文件的路径,在这里没有赋值表示并不使用pdf配置文件
Variant PDFOption = new Variant("");
//调用FileToPDF方法将ps文档转换为pdf文档
Dispatch.callN(distiller, "FileToPDF", new Variant[] {
inputPostScriptFilePath, outputPDFFilePath, PDFOption });
System.out.println("由ps文档转换为pdf文档成功!");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
closeWord();
}
} public static void main(String[] argv) {
D2P d2p = new D2P();
// d2p.openWord("c:/12.doc");
// d2p.callWordMacro("c:/12.docc", "MyWordMacro",
// new String[] { "这是调用word宏的测试程序" });
d2p.docToPDF("d:/12.doc", "c:/1p.ps", "c:/1p.pdf");
}
}=================================================
When you create a PostScript file you have to send the host fonts.
Please go to the printer properties, "Adobe PDF Settings" page
and turn OFF the option "Do not send fonts to Distiller"
=================================================
com.jacob.com.ComFailException: Invoke of: PrintOut
Source: Microsoft Word
Description: SSORS=1 at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:804)
at com.jacob.com.Dispatch.callN(Dispatch.java:440)
at com.lixuming.util.D2P.docToPDF(D2P.java:87)
at com.lixuming.util.D2P.main(D2P.java:113)
第一个 还有
这是相当有难度的, 10分显然少了