Мое требование: мне нужно разделить большой файл 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();
}
}
}
}
}
}