我有一个Java代码,它将pdf文件从目录复制到新的pdf文件,然后将其保存到另一个位置.但它抛出了:

Org.apache.pdfbox.cos.COSDocument Finalize 警告:警告:您未关闭PDF文档

但我确实关闭了PDF!

import org.apache.pdfbox.multipdf.Splitter;
import org.apache.pdfbox.pdmodel.PDDocument;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class Test {
    public static void main(String[] args) throws IOException{
        File srcFolder = new File(System.getProperty("user.dir") + "\\source");
        File[] srcFiles = srcFolder.listFiles();
        Arrays.sort(srcFiles);
        for (File srcFile : srcFiles) {
            PDDocument srcPDDocument = PDDocument.load(srcFile);
            PDDocument destPDDOcument = new PDDocument();
            
            Splitter splitting = new Splitter();
            
            List<PDDocument> pages = splitting.split(srcPDDocument);
            for (PDDocument page : pages) {
                destPDDOcument.addPage(page.getPage(0));
            }
            String dest = System.getProperty("user.dir") + "\\dest\\" + srcFile.getName();
            destPDDOcument.save(dest);
            destPDDOcument.close();
            srcPDDocument.close();
            System.out.println(srcFile.getName());
        }
    }
}

推荐答案

您需要关闭从拆分器获得的中间文档(它们的名称令人困惑地被命名为pages).在保存destPDDOcument后执行此操作.因此,添加如下代码:

for (PDDocument doc : pages)
{
    doc.close();
}

Java相关问答推荐

卡夫卡流列表Serdes:总是空的

Java -使用空比较或instanceof?

PostgreSQL货币兑换率查询

当耗时的代码完成时,Circular ProgressIndicator显示得太晚

最小拓Flutter 排序的时间复杂度是多少?

如何转换Tue Feb 27 2024 16:35:30 GMT +0800 String至ZonedDateTime类型""

Java模式匹配记录

在Java中,如何按一个属性升序,然后按另一个属性降序对对象列表进行排序?

Java LocalTime.parse在本地PC上的Spring Boot中工作,但在Docker容器中不工作

JavaFX如何在MeshView中修复多个立方体?

将带有js文件的 bootstrap 程序导入maven项目时出错

自定义批注的外推属性值

为什么Spring Boot项目无法为基于MySQL的CRUD应用程序找到从JPARepository接口扩展的ProductRepository?

迁移到Java 17后,日期显示不准确

如何仅使用键/ID的一部分(组合)高效地返回映射值?

没有使用Lombok生成的参数

为什么这种递归会有这样的行为?

如何在字节数组中反转UTF-8编码?

JXBrowser是否支持加载Chrome扩展?

Java返回生成器的实现