我正在开发一个以编程方式将 .doc 和 .docx 文件转换为 pdf 的 Java 程序。我已经测试了几种将 .doc 和 .docx 文件转换为 pdf 的不同方法,例如使用几个开源 Java 库,遗憾的是这些库经常会弄乱文档中的布局。
我偶然发现了一个使用底层 Microsoft Word 实例打开文件并将其保存为 PDF 的 javascript 脚本(位于:https ://superuser.com/questions/17612/batch-convert-word-documents-to -pdfs-free/28303#28303 ):
var fso = new ActiveXObject("Scripting.FileSystemObject");
var docPath = WScript.Arguments(0);
var pdfPath = WScript.Arguments(1);
docPath = fso.GetAbsolutePathName(docPath);
var objWord = null;
try{
WScript.Echo("Saving '" + docPath + "' as '" + pdfPath + "'...");
objWord = new ActiveXObject("Word.Application");
objWord.Visible = false;
var objDoc = objWord.Documents.Open(docPath);
var wdFormatPdf = 17;
objDoc.SaveAs(pdfPath, wdFormatPdf);
objDoc.Close();
WScript.Echo("The CV was succesfully converted.");
} catch(err){
WScript.Echo("An error occured: " + err.message);
}finally{
if (objWord != null){
objWord.Quit();
}
}
这个 javascript 脚本是从我的 Java 程序中为每个文档同步调用的。
在小范围内,这似乎很有效,但是在处理数千个文件时,我遇到了几个问题:
- 有时一个 Word 进程会在“另存为”提示下挂起,如果发生这种情况,则需要用户干预才能继续。在任何用户交互之前,该过程都会阻塞。
- 有时 Word 进程会挂在“书签”提示符下。在任何用户干预以通过提示之前,该过程也被阻止。
我正在寻找最好/最干净的方法,通过给它们一个截止日期或其他东西来更好地控制这些 Word 进程。就像给他们 5 秒钟打开 Word 文档并将其保存为 PDF 一样,5 秒钟后如果仍然处于活动状态,该进程将被终止。
我过去处理过类似的事情,解决方案包括“杀死单词进程批处理脚本”来杀死程序结束后卡住的任何 WORD 进程。不是很干净,但它完成了它的工作。
任何经验或想法将不胜感激!