需要的环境:
1. 把jacob.dll添加到C:\Windows\System32里,及导入jacob.jar ,并把dll文件放到jdk的jre/bin目录下;
2. 安装Acrobat_Pro_8.1.2工具,非reader ;
3. 2步骤安装完成后,进入控制面板,设置打印机Adobe PDF 的首选项里"仅依靠系统字体..."勾选去掉 ;
4.最好本机安装了office2007
代码:
import com.jacob.com.*;
import com.jacob.activeX.*;
public class JacboPdfOfPrinter {
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
Object wrdDocs = wordCom.getProperty("Documents").toDispatch();
// 调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc
wordDoc = Dispatch.invoke((Dispatch) 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文件
if (wordCom != null) {
int save = 0;
Variant doNotSaveChanges = new Variant(save);
wordCom.invoke("Quit", new Variant[] { doNotSaveChanges });
wordCom = null;
ComThread.Release();
}
}
/**
* 将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"));
// 是否在后台运行
Variant Background = False;
// 是否追加打印
Variant Append = False;
// 打印所有文档
int wdPrintAllDocument = 0;
Variant Range = new Variant(wdPrintAllDocument);
// 输出的postscript文件的路径
Variant OutputFileName = new Variant(destinPSFilePath);
// 调用word文档对象的PrintOut方法:将word文档打印为postscript文档,简称ps文档
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();
System.out.println("由ps文档转换为pdf文档失败!");
} finally {
closeWord();
}
}
public static void main(String[] argv) {
JacboPdfOfPrinter d = new JacboPdfOfPrinter();
d.docToPDF("E:/wordToHtml/test.doc", "E:/wordToHtml/test1.ps", "E:/wordToHtml/test1.pdf");
}
}
测试通过即可...
PS:若报错com.jacob.com.ComFailException: VariantChangeType failed,那么在C:\Windows\System32\config\systemprofile下创建文件夹Desktop.
=============所需的工具见附件==============