Spire.PDF is a professional PDF library applied to creating, writing, editing, handling and reading PDF files without any external dependencies. Get free and professional technical support for Spire.PDF for .NET, Java, Android, C++, Python.

Fri Jul 25, 2025 4:08 am

我在每个线程下都使用:
Code: Select all
        PdfDocument pdfDocument = new PdfDocument(absolutePdfPath);
        PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();

        textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.IgnoreCase, ReplaceActionType.WholeWord));

        PdfPageCollection pages = pdfDocument.getPages();
        replaceMap.forEach((key, value) -> {
            for (int i = 0; i < pages.getCount(); i++) {
                PdfPageBase page = pages.get(i);

                PdfTextReplacer textReplacer = new PdfTextReplacer(page);

                textReplacer.setOptions(textReplaceOptions);

                textReplacer.replaceAllText(key, value);

                textReplacer.dispose();
            }
        });
        pdfDocument.saveToFile(pressPdfPath, FileFormat.PDF);
        pdfDocument.dispose();

但是发现堆内存一直增加,直到出现OOM错误,pdfDocument.dispose();没有起作用吗?还是要所有线程都处理完毕才进行回收?

同时还有一个疑问,为什么没有deep clone方法?

PiZhai09
 
Posts: 13
Joined: Mon Jul 14, 2025 7:14 pm

Fri Jul 25, 2025 4:12 am

同时发现不使用多线程,多个PDF依次进行处理也有一摸一样的问题!

PiZhai09
 
Posts: 13
Joined: Mon Jul 14, 2025 7:14 pm

Fri Jul 25, 2025 7:34 am

您好,

感谢您的询问。
关于文本替换功能内存消耗过高的问题,我们开发团队正在进行优化,预计将于下月完成。优化版本发布后,我会第一时间通知您。
另外,想向您进一步了解:关于deepclone()您想具体需要实现怎样的功能呢?能否详细说明您的使用场景和需求?
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 341
Joined: Mon Apr 14, 2025 3:33 am

Mon Jul 06, 2026 7:23 am

您好,

感谢您的耐心等待。
我们最新发布的Spire.PDF for Java版本: 12.7.0(https://www.e-iceblue.cn/Downloads/Spire-PDF-JAVA.html)优化了pdf替换关键字内存占用问题。请升级到最新版本并在使用textReplacer替换关键字后,调用textReplacer.dispose()方法进行内存释放。欢迎更新测试,期待您的测试反馈!
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 341
Joined: Mon Apr 14, 2025 3:33 am

Return to Spire.PDF

cron