java - 使用 Javascript 将 doc/docx 批量转换为 pdf

标签 java javascript docx doc

我正在开发一个 Java 程序,该程序以编程方式将 .doc 和 .docx 文件转换为 pdf。我测试了几种将 .doc 和 .docx 文件转换为 pdf 的不同方法,例如使用几个开源 Java 库,遗憾的是这些库经常会弄乱文档中的布局。

我偶然发现了一个 JavaScript 脚本,可以使用底层 Microsoft Word 实例打开文件并将其另存为 PDF(位于: 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 秒钟后,如果进程仍然处于 Activity 状态,就会被终止。

我过去处理过类似的问题,解决方案包括一个“杀死字进程批处理脚本”,用于杀死程序结束后卡住的任何 WORD 进程。不是很干净,但它完成了它的工作。

任何经验或想法将不胜感激!

最佳答案

您可以使用https://www.npmjs.com/package/@nativedocuments/docx-wasm无服务器(例如 AWS Lambda)并行执行转换。 Lambda 负责并发性。 docx-wasm 是独立的(即不需要运行 Microsoft Word)。免费增值模式。

编辑 2019 年 4 月

https://github.com/NativeDocuments/docx-to-pdf-on-AWS-Lambda是在 Lambda 上使用它的示例项目。

关于java - 使用 Javascript 将 doc/docx 批量转换为 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199958/

相关文章:

java - 通过java运行批处理文件(.bat)所需的解决方案

javascript - 如何隐藏没有给定类集的复选框?

javascript - 如何使用在线链接在视频播放器中添加字幕?

javascript - 如何修复显示 html 符号

ms-word - OpenXML 2 SDK-Word文档-以编程方式创建项目符号列表

javascript - 如何使Electron在外部应用程序中自动打开下载的文件?

java - java中的字符串连接

java - Jini/JavaSpaces 发现错误

java - gradle 构建 : class, 接口(interface),或预期的枚举

php docx模板修改