PDFBox - 提高性能的选项

时间:2011-03-03 13:52:44

标签: java pdfbox

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

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

  2. 我发现PDFBox对加密文件更敏感。 ITEXT允许 我要对加密的PDF进行合并,但PDFBox正在抛出异常声明:

      

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

  3. 有没有人知道它如何在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();
        }
    }
    

0 个答案:

没有答案