如何替换 PDF 中的文本

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF for Java通过replaceText方法为开发者提供了对现有PDF内容的直接控制。 无论您需要纠正生成报告中的拼写错误,还是在模板文档中替换版本号,或用客户特定的数据个性化合同,该方法接受页面选择、搜索字符串和替换字符串,并完成其余操作。本指南涵盖了单页替换、多页定位、每个可用的PageSelection选项以及模板驱动的工作流程的实际模式。

快速入门:在PDF中替换文本

添加IronPDF依赖项,加载或渲染PDF,调用replaceText,并保存结果:

 :title=Quickstart Replace Text
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/quickstart.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;

public class App {
    public static void main(String[] args) throws IOException {
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>.NET6</h1>");
        pdf.replaceText(PageSelection.firstPage(), ".NET6", ".NET7");
        pdf.saveAs("replaceText.pdf");
    }
}
 :title=Quickstart Replace Text
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/quickstart.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;

public class App {
    public static void main(String[] args) throws IOException {
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>.NET6</h1>");
        pdf.replaceText(PageSelection.firstPage(), ".NET6", ".NET7");
        pdf.saveAs("replaceText.pdf");
    }
}
JAVA

如何替换单个页面上的文本?

PageSelection、要查找的确切文本和替换字符串。 要定位第一页,请传递PageSelection.firstPage()。 在该页面上所有找到的搜索字符串实例会在一次调用中被替换。 如果无法在目标页上找到文本,该方法会抛出运行时异常。 下方的截图显示了在控制台中该异常的样子。

IronPDF 控制台输出显示当替换文本时找不到目标文本 '.NET7' 时出现的 Exception_RemoteException

replaceText接受哪些参数?

方法签名为replaceText(PageSelection pageSelection, String oldText, String newText)。 匹配默认是区分大小写的:"NET6"被视为不同的字符串。 在调用该方法之前,验证渲染的PDF中的确切大小写。 您可以通过提取PDF的文本内容来确认确切的文本。IronPDF Java依赖项发布在Maven Central上,需要Java 8或更高版本。

 :title=Replace Text on First Page
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/replace-text-single-page.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;

public class App {

    public static void main(String[] args) throws IOException {

        // Set the IronPDF license key (required for production use)
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Render HTML content into a PDF document
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>.NET6</h1>");

        // Define the search and replacement strings
        String oldText = ".NET6";
        String newText = ".NET7";

        // Replace all instances of oldText on the first page only
        // PageSelection.firstPage() targets page index 0
        pdf.replaceText(PageSelection.firstPage(), oldText, newText);

        // Save the modified PDF
        pdf.saveAs("replaceText.pdf");
    }
}
 :title=Replace Text on First Page
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/replace-text-single-page.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;

public class App {

    public static void main(String[] args) throws IOException {

        // Set the IronPDF license key (required for production use)
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Render HTML content into a PDF document
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>.NET6</h1>");

        // Define the search and replacement strings
        String oldText = ".NET6";
        String newText = ".NET7";

        // Replace all instances of oldText on the first page only
        // PageSelection.firstPage() targets page index 0
        pdf.replaceText(PageSelection.firstPage(), oldText, newText);

        // Save the modified PDF
        pdf.saveAs("replaceText.pdf");
    }
}
JAVA

提示在应用程序启动时加载许可证密钥,而不是在每个独立操作之前加载。 这样可以避免在相同的JVM会话中处理多个文档时反复初始化的开销。

replaceText方法自然集成了IronPDF的HTML到PDF转换工作流。 首先渲染HTML模板,然后应用文本替换以注入动态值。 这样可以保持您的HTML简单,并仍然生成个性化的输出。 对于从磁盘加载的文档,请将文件路径传递给renderHtmlAsPdf

输出结果是什么样的?


我如何在多页中替换文本?

要定位特定页面而不仅仅是第一页,请传递一个零索引页码的列表给PageSelection.pageRange(List<Integer>)。 该方法在列表的每一页上替换搜索文本,并保持其他所有页面不变。 此模式适用于在已知页面上具有一致的页眉或页脚的文档,或批量生成的报告,其中版本字符串仅出现在某些页面上。

使用页面列表时修改了哪些页面?

在下面的示例中,从HTML创建一个三页的PDF。 替换在页面2(即第一页和第三页)上运行。 页面1(即第二页)保持原文不变。 页面索引始终从0开始,以便与Java的零基数组约定一致。

 :title=Replace Text on Multiple Specific Pages
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/replace-text-multiple-pages.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class App {

    public static void main(String[] args) throws IOException {

        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Build a 3-page PDF from HTML using CSS page breaks
        String html = "<p> .NET6 </p>" +
                      "<p> This is 1st Page </p>" +
                      "<div style='page-break-after: always;'></div>" +
                      "<p> This is 2nd Page</p>" +
                      "<div style='page-break-after: always;'></div>" +
                      "<p> .NET6 </p>" +
                      "<p> This is 3rd Page</p>";

        PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);

        String oldText = ".NET6";
        String newText = ".NET7";

        // Pages are zero-indexed: 0 = first page, 2 = third page
        // Page index 1 (second page) is intentionally excluded
        List<Integer> pages = Arrays.asList(0, 2);

        pdf.replaceText(PageSelection.pageRange(pages), oldText, newText);

        pdf.saveAs("replaceTextOnMultiplePages.pdf");
    }
}
 :title=Replace Text on Multiple Specific Pages
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/replace-text-multiple-pages.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class App {

    public static void main(String[] args) throws IOException {

        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Build a 3-page PDF from HTML using CSS page breaks
        String html = "<p> .NET6 </p>" +
                      "<p> This is 1st Page </p>" +
                      "<div style='page-break-after: always;'></div>" +
                      "<p> This is 2nd Page</p>" +
                      "<div style='page-break-after: always;'></div>" +
                      "<p> .NET6 </p>" +
                      "<p> This is 3rd Page</p>";

        PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);

        String oldText = ".NET6";
        String newText = ".NET7";

        // Pages are zero-indexed: 0 = first page, 2 = third page
        // Page index 1 (second page) is intentionally excluded
        List<Integer> pages = Arrays.asList(0, 2);

        pdf.replaceText(PageSelection.pageRange(pages), oldText, newText);

        pdf.saveAs("replaceTextOnMultiplePages.pdf");
    }
}
JAVA

请注意IronPDF中的所有页面索引都遵循基于零的索引。 页面1是第二页,依此类推。

从HTML创建多页PDF时,请使用CSS page-break-after属性来控制页面边界的位置。 在渲染之前设置正确的自定义纸张尺寸页面方向,以确保当文本替换运行时,内容位置符合您的预期。 保存后,通过打开PDF并确认只有目标页面发生了变化来验证输出。

输出结果是什么样的?


Icon Quote related to 输出结果是什么样的?

我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。

Milan Jovanovic related to 输出结果是什么样的?

Milan Jovanovic

微软MVP

查看案例研究
Icon Quote related to 输出结果是什么样的?

IronOCR 意味着我们每年可以节省 $40,000 的人工处理成本,同时提高生产力,并释放资源用于高影响任务。我强烈推荐它。

Brent Matzelle related to 输出结果是什么样的?

Brent Matzelle

首席技术官,OPYN

查看案例研究
Icon Quote related to 输出结果是什么样的?

Iron Suite 在我们的运营中起着至关重要的作用。这些工具提高了业务各方面的效率,包括创建平面图和改善库存管理。

David Jones related to 输出结果是什么样的?

David Jones

首席软件工程师,Agorus Build

查看案例研究

有哪些页面选择选项?

PageSelection类提供的静态工厂方法涵盖了每种常见的定位模式。 无需创建实例; 直接在类上调用方法。 所有索引都是基于零的。

哪些方法针对单页或多页?

|翻译方法|说明| |---|---| | `PageSelection.allPages()` |选择文档中的每一页| | `PageSelection.firstPage()` |选择索引`0`对应的页面| | `PageSelection.lastPage()` |无论文档长度如何,选择最后一页| | `PageSelection.singlePage(int pageIndex)` |通过基于零的索引选择一个特定页面| | `PageSelection.pageRange(int startIndex, int endIndex)` |选择任意集合的页码(例如,`[0, 2]`选择页面1和3)| | `PageSelection.pageRange(List pageList)` |选择从`startIndex`到`endIndex`的连续范围(含)|
replaceText API 的PageSelection工厂方法

何时应使用每种 PageSelection 方法?

allPages()是全局查找和替换的最简单选择:该方法可在一次调用中替换整个文档中目标文本的每个实例。 使用lastPage()快速编辑封面或尾页脚注,而不触及正文。 选择pageRange(int, int),当文本出现在如章节或部分这样的连续页面组上。 当目标页面是不连贯的时,使用pageRange(List<Integer>); 例如,当替换仅出现在页面1、3和7上的版本字符串时。

处理合并的PDF或包含书签和大纲的文档时,首先识别每个逻辑部分的页面范围,然后应用目标替换,以避免意外修改共享的页眉或页脚。 IronPDF for Java API参考列出了所有PageSelection重载及完整参数文档。

重要replaceText调用包装在一个try-catch块中。 当指定的搜索文本未在任何目标页面上找到时,该方法会抛出运行时异常。 验证步骤(提取文本并确认字符串存在)可防止在生产中出现意外失败。

如何一次性替换所有页面的文本?

PageSelection.allPages()在一次调用中执行文档范围内的替换,这是全局替换令牌的最有效方法。 下面的示例从磁盘加载PDF,并替换整个文档中占位符标记的每一个出现:

 :title=Replace Text on All Pages
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/replace-text-all-pages.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;
import java.nio.file.Paths;

public class App {

    public static void main(String[] args) throws IOException {

        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF from disk
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("contract-template.pdf"));

        // Replace the placeholder token on every page simultaneously
        // This is equivalent to calling replaceText for each page individually
        pdf.replaceText(PageSelection.allPages(), "{{VERSION}}", "2.0");

        // Save the updated document
        pdf.saveAs("contract-v2.pdf");
    }
}
 :title=Replace Text on All Pages
//:path=/static-assets/pdf/content-code-examples/how-to/find-replace-text/replace-text-all-pages.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.edit.PageSelection;
import java.io.IOException;
import java.nio.file.Paths;

public class App {

    public static void main(String[] args) throws IOException {

        // Set the IronPDF license key
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        // Load an existing PDF from disk
        PdfDocument pdf = PdfDocument.fromFile(Paths.get("contract-template.pdf"));

        // Replace the placeholder token on every page simultaneously
        // This is equivalent to calling replaceText for each page individually
        pdf.replaceText(PageSelection.allPages(), "{{VERSION}}", "2.0");

        // Save the updated document
        pdf.saveAs("contract-v2.pdf");
    }
}
JAVA

此模式自然地与模板驱动的工作流程配对,其中相同的占位符出现在许多页面的页眉、页脚或正文文本中。 对于单页文档,firstPage()产生相同的结果。 当页面数可能会在运行时有所变化时,优选allPages()


如何处理常见的文本替换场景?

Java应用程序中的文本替换包括几个超出简单搜索和替换的模式。 了解该方法在每种情况下的行为可以防止错误在生产中出现。

区分大小写的匹配如何影响结果?

replaceText执行精确、区分大小写的匹配。 字符串"version 1.0""VERSION 1.0"被视为三种不同的值。 在对从磁盘加载的文档运行替换之前,通过查看原始来源或通过从PDF中提取文本并以编程方式检查来确认确切的大小写。

如何替换PDF表单中的文本?

包含交互表单字段的PDF将其文本值存储在文档的内容流之外,正如在PDF规范中定义。 replaceText方法在内容流上操作,不修改表单字段值。 要更新表单字段内的文本,请使用IronPDF的专用表单创建和编辑API。 在同一文档中混合使用这两种方法是安全的:表单字段更新和内容流替换不会相互干扰。

如何更新基于模板的工作流中的文本?

一种常见的模式是维护一个具有占位符令牌的PDF模板(例如[INVOICE_DATE]),并在运行时用实际值替换它们。 针对每个占位符调用一次PageSelection.allPages()以便替换覆盖令牌出现的每个位置。 对于从HTML生成的文档,此工作流同样适用于renderHtmlAsPdf,然后进行一系列替换调用。 将此与PDF水印背景和前景结合起来,以在最终输出中添加品牌或保密标记。

Java中PDF文本替换的下一步是什么?

本指南涵盖了使用PageSelection工厂方法集。 同一个replaceTextAPI无论文件是从HTML渲染、从磁盘加载,还是通过合并多个来源组装的都可用。

开始IronPDF for Java的免费试用并将上述代码示例应用于您自己的文档。 准备好部署到生产环境时,查看许可选项。 许可证是按开发人员计算的,包括一年期的产品更新。

准备好看看IronPDF for Java还可以做些什么? 浏览完整的IronPDF for Java 使用指南,了解PDF生成、注释、数字签名压缩等教程。

常见问题解答

如何使用 Java 替换 PDF 中的文本?

使用IronPDF的replaceText方法。 调用pdf.replaceText(PageSelection.firstPage(), "oldText", "newText")可替换指定页面上旧文本的所有实例。 IronPDF在保留原始格式的同时找到并替换每个出现的例子。

replaceText方法接受哪些参数?

该方法接受三个参数:一个用于指定要修改哪些页面的PageSelection、一个用于查找的String和一个用于替换的String。 例如,pdf.replaceText(PageSelection.firstPage(), ".NET6", ".NET7")会替换第一页上的所有实例。

我能否只替换特定页面上的文本?

是的。 使用PageSelection.firstPage()为页面0、PageSelection.lastPage()为最后一页、PageSelection.singlePage(n)为任意页,按从零开始的索引,或PageSelection.pageRange()与不连续页面的整数列表一起使用。

如果找不到要替换的文本会怎样?

当在目标页面找不到目标文本时,IronPDF会抛出运行时异常(Exception_RemoteException)。 将调用包裹在try-catch块中,并可选择先提取PDF文本以验证字符串是否存在,然后再调用replaceText

文本匹配是否区分大小写?

是的。 replaceText方法执行精确的区分大小写匹配。 字符串"Version 1.0""version 1.0""VERSION 1.0"被视为三个不同的值。 在调用方法之前,请验证确切的大小写。

replaceText是否修改表单字段值?

不会。 replaceText方法在PDF内容流上操作,不修改交互式表单字段值。 要更新表单字段,请使用IronPDF的专用表单编辑API,通过PdfDocument表单方法。

如何一次性替换每页上的令牌?

使用PageSelection.allPages()作为replaceText的第一个参数。 这样可以在一次调用中替换整个文档中所有页面的目标文本实例,这是模板驱动工作流中整个文档占位符的首选方法。

Darrius Serrant
全栈软件工程师(WebOps)

Darrius Serrant 拥有迈阿密大学的计算机科学学士学位,目前在 Iron Software 担任全栈 WebOps 市场工程师。从小就被编码吸引,他认为计算机既神秘又易于接触,使其成为创意和问题解决的理想媒介。

在 Iron Software,Darrius 喜欢创造新事物,并简化复杂概念以使其更易理解。作为我们常驻的开发者之一,他还自愿教授学生,与下一代分享他的专业知识。

对于 Darrius 来说,他的工作令人满意,因为它被重视并产生真正的影响。

准备开始了吗?
版本: 2026.6 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。