プログラムで .doc ファイルと .docx ファイルを pdf に変換する Java プログラムに取り組んでいます。いくつかのオープン ソース Java ライブラリを使用するなど、.doc ファイルと .docx ファイルを pdf に変換するいくつかの異なる方法をテストしましたが、悲しいことに、これらのライブラリはドキュメントのレイアウトを台無しにすることがよくあります。
基盤となる 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 プログラムから同期的に呼び出されます。
小規模ではこれはうまくいくように見えますが、数千のような大量のドキュメントを扱うとき、いくつかの問題に遭遇しました:
- 1 つの Word プロセスが「名前を付けて保存」プロンプトでハングすることがありました。これが発生した場合、続行するにはユーザーの介入が必要でした。ユーザーの操作が行われるまで、プロセスはブロックされます。
- Word プロセスが「ブックマーク」プロンプトでハングすることがありました。このプロセスは、ユーザーが介入してプロンプトを通過するまでブロックされます。
締め切りなどを与えることで、これらのWordプロセスをより適切に制御するための最良/最もクリーンな方法を探しています。Word 文書を開いて PDF として保存するのに 5 秒を与えるのと同様に、5 秒後にプロセスがまだアクティブな場合は強制終了されます。
私は過去に似たようなことを扱ったことがあり、その解決策には、プログラムの終了後にスタックした WORD プロセスを強制終了するための「kill word processes batch script」が含まれていました。あまりきれいではありませんが、それはその仕事をしました。
どんな経験やアイデアでも大歓迎です!