使用Javascript将doc/docx批量转换为pdf
我正在开发一个Java程序,通过编程将.doc和.docx文件转换为pdf。我已经测试了几种将.doc和.docx文件转换为pdf的不同方法,例如使用几个开源Java库,遗憾的是这些库经常会弄乱文档中的布局 我偶然发现了一个javascript脚本,它使用底层的Microsoft Word实例打开文件并将其保存为PDF格式(位于:): 这个javascript脚本是从我的Java程序中为每个文档同步调用的 在小范围内,这似乎很有效,但在处理大量文档(如数千个文档)时,我遇到了几个问题:使用Javascript将doc/docx批量转换为pdf,java,javascript,docx,doc,Java,Javascript,Docx,Doc,我正在开发一个Java程序,通过编程将.doc和.docx文件转换为pdf。我已经测试了几种将.doc和.docx文件转换为pdf的不同方法,例如使用几个开源Java库,遗憾的是这些库经常会弄乱文档中的布局 我偶然发现了一个javascript脚本,它使用底层的Microsoft Word实例打开文件并将其保存为PDF格式(位于:): 这个javascript脚本是从我的Java程序中为每个文档同步调用的 在小范围内,这似乎很有效,但在处理大量文档(如数千个文档)时,我遇到了几个问题: 有时,
- 有时,一个单词进程会挂起在“另存为”提示符处,如果发生这种情况,则需要用户干预才能继续。在任何用户交互之前,该过程都会被阻塞
- 有时单词进程会挂在“书签”提示符处。该过程也会被阻止,直到任何用户干预通过提示
任何经验或想法都将不胜感激 我设法避开了与Microsoft Word中的进程在提示时被卡住有关的问题。在我的最终解决方案中,我修改了Java代码,使其在单独的线程中启动Javascript脚本。然后,我的主线程将休眠几秒钟,然后检查另一个线程 另一个线程保留对它用来运行Javascript脚本的流程实例的引用。然后,主线程将检查该进程的exitValue,如果脚本在Microsoft Word提示符处卡住,则将抛出非法ThreadStateException。然后,我将通过终止进程并清理Microsoft Word留下的任何临时文件来处理异常。说不要在无人值守的情况下使用office服务器端 如果您需要简单转换,LibreOffice有一个命令行选项-convert to.您可以使用serverless(例如AWS Lambda)并行执行转换。Lambda负责并发性。docx wasm是独立的(即不需要运行Microsoft Word)。Freemium模型 编辑2019年4月
是一个在Lambda上使用它的示例项目。这是javascript或更糟的,不是Java。除非您试图学习该技术,否则只需安装pdf打印机,并将文档“打印”为pdf。我使用了AdobeAcrobat提供的(非免费)工具,但似乎有很多免费工具可以做同样的事情。是否也遇到了同样的问题?(C#相似)-微软公司注意到了Office自动化(他们不建议这样做)。@mlk,只有在服务器端完成自动化时才会发出警告,而这里没有这种情况(问题中没有提到)。docx wasm不再可用。他们的网站已被拆除,不再发放许可证。
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();
}
}