You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iText 7.1.0:如何替换PDF表单域中的富文本占位符

如何在iText 7中替换富文本PDF表单域的占位符并保留格式?

要解决这个问题,核心是直接操作富文本表单域的XML内容——因为富文本表单的格式和文本是存储在结构化XML中的,只要在XML字符串里替换占位符,再把修改后的XML设置回去,就能完美保留原有格式。

完整实现代码

结合你提供的原有代码,修改后的实现如下:

PdfReader reader = new PdfReader(pdf_template);
PdfDocument pdf = new PdfDocument(reader, new PdfWriter(pdf_output));
PdfAcroForm form = PdfAcroForm.GetAcroForm(pdf, true);

// 处理普通表单域(你的原有逻辑)
form.GetField("Vertragsnummer").SetValue("12345");
PdfFormField kdnr = form.GetField("Kundennummer");
kdnr.SetValue(kdnr.GetValueAsString().Replace("7777777777", "1111111111"));

// 处理富文本表单域
PdfFormField richTextField = form.GetField("maintext");
if (richTextField != null && !string.IsNullOrEmpty(richTextField.GetRichText()))
{
    // 获取富文本的XML结构内容
    string richTextXml = richTextField.GetRichText();
    
    // 替换XML中的占位符,比如把{{CustomerName}}换成实际值
    string updatedRichText = richTextXml
        .Replace("{{CustomerName}}", "张三")
        .Replace("{{OrderDate}}", "2024-05-20")
        .Replace("{{TotalAmount}}", "<b>¥999.00</b>"); // 甚至可以在替换时新增格式
    
    // 将修改后的XML设置回表单域
    richTextField.SetRichText(updatedRichText);
}

// 扁平化表单(如果需要固化内容)
form.FlattenFields();

// 关闭资源
pdf.Close();
reader.Close();

关键逻辑说明

  1. 获取富文本的XML内容:通过GetRichText()方法拿到表单域的富文本XML字符串,这个字符串包含了所有格式标签(比如<b>、<i>、<font>)和文本内容。
  2. 安全替换占位符:直接对XML字符串执行Replace()操作,只要你的占位符是在文本内容区域(而非XML标签属性里),就不会破坏原有格式结构。甚至可以在替换值里新增富文本标签,实现动态格式调整。
  3. 设置修改后的XML:用SetRichText()把修改后的XML字符串写回表单域,iText会自动解析XML并保留格式。

注意事项

  • 确保目标表单域确实被设置为允许富文本:如果表单域是普通文本域,GetRichText()会返回null,此时你需要回退到普通的SetValue()方法。
  • 避免破坏XML结构:不要替换XML标签里的内容(比如<font size="12">中的12),只替换纯文本部分的占位符。
  • 特殊字符处理:如果替换的内容包含XML特殊字符(如&、<、>),需要手动转义(比如&转成&amp;),否则可能导致XML解析错误。

内容的提问来源于stack exchange,提问作者André T.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:00:08