Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据文件大小将一个Pdf文件拆分为多个_Java_Pdf_Itext - Fatal编程技术网

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

Java 根据文件大小将一个Pdf文件拆分为多个,java,pdf,itext,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"); Documen

我一直在尝试根据大小将一个大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);
    }
}
publicstaticvoidmain(字符串[]args){
试一试{
PdfReader按大小拆分为新的PdfReader(“C:\\Temp\u Workspace\\TestZip\\input1.PDF”);
文档=新文档();
PdfCopy copy=新PdfCopy(文档,新文件输出流(“C:\\Temp\u Workspace\\TestZip\\File1.pdf”);
document.open();
int number_of_pages=按大小拆分PDF。getNumberOfPages();
int pagenumber=1;/*动态生成文件名*/
//int Find_PDF_Size;/*以获取以字节为单位的PDF大小*/
float combinedsize=0;/*将其转换为KB并估计新的PDF大小*/
对于(int i=1;i<页数;i++){
浮动查找PDF大小;
如果(combinedsize==0&&i!=1){
文件=新文件();
页码++;
String FileName=“File”+pagenumber+“.pdf”;
复制=新的PdfCopy(文档,新文件输出流(文件名));
document.open();
}
copy.addPage(copy.getImportedPage(按大小拆分PDF);
Find_PDF_Size=copy.getCurrentDocumentSize();
combinedsize=(float)Find_PDF_Size/1024;
if(combinedsize>496 | | i==页数){
document.close();
组合大小=0;
}
}
System.out.println(“PDF按完成的大小拆分。创建的文档数:“+pagenumber”);
}
捕获(例外情况一)
{
系统输出打印LN(i);
}
}
}

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

PdfCopy
用于关闭
PdfReader
页面导入的源
PdfReader
切换或关闭
PdfCopy
时,它从导入页面。这是因为最初的预期用例是从多个源PDF创建一个目标PDF,再加上许多用户忘记关闭
PDF阅读器的事实

因此,在关闭第一个目标
PdfCopy
后,
PdfReader
也将关闭,不再提取更多页面

如果我正确地解释了iText SVN存储库中最近的签入,那么
PdfReaders
的隐式关闭正在从代码中删除。因此,在下一个iText版本中,您的代码可以按预期工作