PDFBox - 提高性能的选项

ore*_*gad 5 java pdfbox

我有2个关于PDFBox库(JAVA)的问题:

  1. 我刚刚开始使用PDFBox库,虽然它运行良好,但我还是不禁注意到它在使用ut.mergeDocuments()方法(对ITEXT的concat_pdf.main(..))时运行速度比ITEXT(我使用的其他pdf库)慢.有没有人知道我是否可以/如何提高这个工具的性能?

  2. 我看到PDFBox对加密文件更敏感.ITEXT允许我对加密的PDF进行合并,但PDFBox正在抛出一个异常,说明:

    "PDFBoxConcat failedjava.io.IOException:错误:目标PDF已加密,无法附加加密的PDF文档."

有没有人知道它如何在ITEXT上运行而不在PDFBox上运行?
我的猜测是,ITEXT更精确地知道什么是加密的并允许采取行动,而PDFBox只是检查它是否加密.

谁能为我证实这一点?

我有这个代码(开源)的pfdBox mergeDocuments(),你可以看到检查加密的方法:

 if( destination.isEncrypted() )
        {
            throw new IOException( "Error: destination PDF is encrypted, can't append encrypted PDF documents." );
        }
Run Code Online (Sandbox Code Playgroud)

我试着把它放在评论上,但合并后的文件却是胡言乱语.


只是添加了一些我尝试提高性能的代码示例.

这些是我尝试这样做的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 0

关于你的第一个问题:有谁知道我是否/如何提高这个工具(= Apache PdfMergerUtility)的性能?

以下设置帮助我将合并时间减少了约 75%:

pdfMergerUtility.setDocumentMergeMode(PDFMergerUtility.DocumentMergeMode.OPTIMIZE_RESOURCES_MODE);
Run Code Online (Sandbox Code Playgroud)