PDFBox ライブラリ (JAVA) に関して 2 つの質問があります。
PDFBox ライブラリの使用を開始したばかりで、うまく機能していますが、
ut.mergeDocuments()
(ITEXT の concat_pdf.main(..) に対して) メソッドを使用すると、ITEXT (使用した他の PDF ライブラリ) よりも実行速度が遅いことに気付きました。このツールのパフォーマンスを向上させることができるかどうか、またはその方法を知っている人はいますか?PDFBox は暗号化されたファイルに対してより敏感であることがわかります。ITEXT を使用すると、暗号化された PDF をマージできますが、PDFBox は次のような例外をスローします。
「PDFBoxConcat failedjava.io.IOException: エラー: 宛先 PDF は暗号化されています。暗号化された PDF ドキュメントを追加できません。」
ITEXTでは機能するがPDFBoxでは機能しない理由を知っている人はいますか?
私の推測では、ITEXT は暗号化されているものを正確に認識し、それによってアクションを許可するように洗練されているのに対し、PDFBox は暗号化されているかどうかを確認しているだけです。
誰でも私のためにこれを確認できますか?
mergeDocuments()
暗号化のチェックを確認できる方法として、pfdBox のこのコード (オープン ソース) があります。
if( destination.isEncrypted() )
{
throw new IOException( "Error: destination PDF is encrypted, can't append encrypted PDF documents." );
}
これをコメントに入れようとしましたが、マージされたドキュメントは意味不明なものになりました。
パフォーマンスを改善するための私の試みのコード例をいくつか追加するだけです。
これらは私がこれをやろうとした3つの異なる方法です:
private static void PDFBoxConcat(String filePath) {
PDFMergerUtility ut = new PDFMergerUtility();
for (int i = 0; i < 50; i++) {
ut.addSource(filePath);
}
ut.setDestinationFileName("C:\\amdocs\\sensis\\dlv858\\pdfBox" + testNum + ".pdf");
try {
ut.mergeDocuments();
} catch (Exception e) {
System.out.println("PDFBoxConcat failed");
e.printStackTrace();
}
}
private static void PDFBoxConcat2(String filePath) {
String [] fileNamesArray = new String[51];
int i = 0;
for (i = 0; i < 50; i++) {
fileNamesArray[i] = filePath;
}
fileNamesArray[i] = "C:\\amdocs\\sensis\\dlv858\\pdfM" + testNum + ".pdf";
try {
PDFMerger.main(fileNamesArray);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void PDFBoxConcat3(String filePath) {
ArrayList<InputStream> list = new ArrayList<InputStream>();
PDFMergerUtility ut = new PDFMergerUtility();
for (int i = 0; i < 50; i++){
InputStream inputStream = new FileInputStream(filePath);
list.add(inputStream);
}
ut.addSources(list);
try {
ut.mergeDocuments();
} catch (Exception e) {
System.out.println("PDFBoxConcat failed");
e.printStackTrace();
}
}