簡體   English   中英

使用Javascript將doc / docx批量轉換為pdf

[英]Batch converting doc/docx to pdf using Javascript

我正在研究一個Java程序,該程序以編程方式將.doc-和.docx文件轉換為pdf。 我已經測試了幾種將.doc-和.docx-files轉換為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();
    }
}

從我的Java程序中為每個文檔同步調用此javascript-script。

在較小的范圍內,這似乎很好用,但是在處理許多文檔(例如數千個)時,我遇到了兩個問題:

  • 有時,如果需要繼續進行用戶干預,則一個Word進程會掛在“另存為”提示上。 在沒有任何用戶交互之前,該過程只會阻塞。
  • 有時,Word進程會掛在“書簽”提示符下。 該過程也將被阻止,直到有任何用戶干預來傳遞提示。

我正在尋找最好/最干凈的方法,通過給它們一個截止日期或其他東西來更好地控制這些Word流程。 就像給他們5秒鍾的時間來打開Word文檔並將其另存為PDF一樣,如果5秒鍾后該過程仍然處於活動狀態,則該過程將被終止。

我過去處理過類似的東西,針對該問題的解決方案包括“殺死字進程批處理腳本”,以殺死程序結束后卡住的所有WORD進程。 不是很干凈,但是它確實完成了工作。

任何經驗或想法,將不勝感激!

您可以使用https://www.npmjs.com/package/@nativedocuments/docx-wasmless serverless(例如AWS Lambda)並行執行轉換。 Lambda負責並發。 docx-wasm是獨立的(即無需運行Microsoft Word)。 免費增值模式。

編輯2019年4月

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

我設法解決了與該過程卡在Microsoft Word提示中有關的問題。 在最終的解決方案中,我更改了Java代碼,使其在單獨的線程中啟動Javascript腳本。 然后,我的主線程將休眠幾秒鍾,然后檢查另一個線程。

另一個線程保留了用於運行Javascript腳本的Process實例的引用。 然后,如果腳本被卡在Microsoft Word提示符下,則主線程將檢查該進程的exitValue,將引發IllegalThreadStateException。 然后,我將通過終止進程並清理Microsoft Word留下的任何臨時文件來處理異常。

微軟支持說不要在服務器端無人看管的情況下使用Office。

如果需要簡單的轉換,LibreOffice有一個命令行選項-convert-to。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM