根据文件大小将一个Pdf文件拆分为多个

时间:2012-11-14 22:56:24

标签: java pdf itext

我一直在尝试根据其大小将一个大PDF文件拆分为多个pdf文件。我能够分割它,但它只创建一个文件,其余的文件数据丢失。意味着它不会创建多个文件来分割它。有人可以帮忙吗?这是我的代码

public static void main(String[] args) {
    try {
        PdfReader Split_PDF_By_Size = new PdfReader("C:\\Temp_Workspace\\TestZip\\input1.pdf");
        Document document = new Document();
        PdfCopy copy = new PdfCopy(document, new FileOutputStream("C:\\Temp_Workspace\\TestZip\\File1.pdf"));
        document.open();

        int number_of_pages = Split_PDF_By_Size.getNumberOfPages();
        int pagenumber = 1; /* To generate file name dynamically */
        // int Find_PDF_Size; /* To get PDF size in bytes */
        float combinedsize = 0; /* To convert this to Kilobytes and estimate new PDF size */
        for (int i = 1; i < number_of_pages; i++ ) {
            float Find_PDF_Size;
            if (combinedsize == 0 && i != 1) {
                document = new Document();
                pagenumber++;
                String FileName = "File" + pagenumber + ".pdf";
                copy = new PdfCopy(document, new FileOutputStream(FileName));
                document.open();
            }

            copy.addPage(copy.getImportedPage(Split_PDF_By_Size, i));
            Find_PDF_Size = copy.getCurrentDocumentSize();
            combinedsize = (float)Find_PDF_Size / 1024;
            if (combinedsize > 496 || i == number_of_pages) {
                document.close();
                combinedsize = 0;
            }
        }

        System.out.println("PDF Split By Size Completed. Number of Documents Created:" + pagenumber);                        
    }
    catch (Exception i)
    {
        System.out.println(i);
    }
}

}

1 个答案:

答案 0 :(得分:0)

(顺便说一下,如果你用 itext 标记你的问题,那就太好了。)

PdfCopy用于关闭来自页面导入的源PdfReadersPdfReader已关闭的导入页面PdfCopy。这是因为最初的预期用例是从多个源PDF创建一个目标PDF,结合许多用户忘记关闭PdfReaders这一事实。

因此,关闭第一个目标PdfCopy后,PdfReader也会关闭,并且不再提取其他页面。

如果我将最近的签入正确解释为iText SVN存储库,则PdfReaders的隐式关闭正在从代码中删除。因此,使用下一个 iText 版本之一,您的代码可能会按预期工作。