PDFBox - 将单个pdf拆分为多个pdf文件

时间:2018-05-31 21:01:28

标签: java pdfbox

我的要求是,我必须将一个大的pdf文件拆分成多个小的pdf文件。我有一个10000页的pdf文件,我想将文件拆分为1000个文件,每个文件10页。我试图使用pdfbox api拆分文件。我可以根据我的要求拆分文件,并且它对于没有页面的小文件也能正常工作。但是,当我尝试10000页时,它需要花费大量时间,即数小时。在实际场景中,我甚至可以获得超过20000页和超过5000个分割的pdf文件。

分割的时间是基于分割的减少而减少的。如果我尝试将同一文件拆分为100 * 100页,则花费的时间更少。任何人都可以验证我的代码并检查我是否以正确的方式进行,或者我可以添加代码以提高性能。

注意:我不能使用'iText',因为这是针对客户特定项目的。是否有任何api可用于拆分除iText和pdfbox

之外的pdf文件

请参阅我的以下代码

public class Test {

private static String sourceFolderPath = "/local_path/PDFSplitter_perf/10000_pages/";
private static String outputPath = sourceFolderPath+"output/";
private static String pdfFileName = sourceFolderPath+"test_1.pdf";
private static int pageCount = 10;

public static void main(String[] args) throws IOException {
    splitUsingPDFBox(pdfFileName);
}

public static void splitUsingPDFBox(String pdfFilePath) throws IOException, InterruptedException, ExecutionException{ 
    try (final PDDocument document = PDDocument.load(new File(pdfFilePath));) {
        int i = 1;

        while(i<10000){
            int startPage = i;
            int endPage = i + (pageCount-1);
            String chidlPdfFile = outputPath+"/"+startPage+"_"+endPage+".pdf";

            Splitter splitter = new Splitter();
            splitter.setStartPage(startPage);
            splitter.setEndPage(endPage);
            splitter.setSplitAtPage(endPage);

            List<PDDocument> pages = splitter.split(document);

            PDDocument pd = null;
            try{
                pd = pages.get(0);
                pd.save(chidlPdfFile);
            }finally{
               if( pd != null ){
                  pd.close();
               }
            }
    } 
}
}

}

0 个答案:

没有答案