PDFBox - разделение одного PDF-файла на несколько PDF-файлов - PullRequest
0 голосов
/ 01 июня 2018

Мое требование: мне нужно разделить большой файл PDF на несколько маленьких файлов PDF.У меня есть PDF-файл на 10000 страниц, и я хочу разделить файл на 1000 файлов по 10 страниц в каждом.Я попытался разделить файл с помощью API pdfbox.Я могу разделить файл в соответствии с моим требованием, а также он отлично работает с файлом, имеющим небольшое количество страниц.Но когда я попробовал с 10000 страницами, это заняло огромное время, т.е.) в часах.В реальном сценарии я могу даже получить PDF-файл с более чем 20000 страницами и более чем 5000 разделениями.

Время разделения уменьшается в зависимости от количества делений.Если я попытаюсь разделить один и тот же файл на 100 * 100 страниц, это займет меньше времени.Может ли кто-нибудь проверить мой код и проверить, правильно ли я это делаю, или я могу добавить код, чтобы повысить производительность.

Примечание: я не могу использовать «iText», так как это для конкретного проекта клиента.Есть ли какие-либо API для разделения PDF-файлов, кроме iText и pdfbox

Пожалуйста, обратитесь мой код ниже

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();
               }
            }
    } 
}
}

}

...