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

使用iText向现有PDF添加只读多行文本域时丢失多行属性问题

解决iText中文本域同时设置MULTILINE和READ_ONLY选项失效的问题

这个问题的核心原因很明确:你调用setOptions()方法时,每次都会完全覆盖之前设置的选项,而不是将新选项叠加进去。比如先设置MULTILINE,之后再调用setOptions(READ_ONLY),就会把之前的MULTILINE替换掉,自然多行功能就失效了。

解决方案:合并选项位掩码

iText的文本域选项是通过位掩码控制的,多个选项可以用位或运算符(|)合并成一个整数,一次性传递给setOptions(),这样就能同时启用多个选项而不互相覆盖。

修正后的完整代码如下:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfReader reader = new PdfReader("PDF PATH");
PdfStamper stamper;
stamper = new PdfStamper(reader, baos);
AcroFields fields = stamper.getAcroFields();

TextField textField = new TextField(stamper.getWriter(), new Rectangle(18, 200, 380, 278), "newTextField");
// 合并MULTILINE和READ_ONLY两个选项
textField.setOptions(TextField.MULTILINE | TextField.READ_ONLY);
textField.setFontSize(0f);
textField.setText("VERY LONG TEXT");

stamper.addAnnotation(textField.getTextField(), 1);
stamper.close();

分步添加选项的替代方式

如果你的业务需要动态分步添加选项(比如某些选项是根据条件决定的),可以先获取当前已设置的选项,再合并新选项后重新设置:

// 先设置基础多行选项
textField.setOptions(TextField.MULTILINE);
// 后续动态添加只读选项
int currentOptions = textField.getOptions();
textField.setOptions(currentOptions | TextField.READ_ONLY);

这样修改后,文本域就能同时保持多行显示和只读状态,字体大小的设置也会正常生效。

内容的提问来源于stack exchange,提问作者crimson589

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:24:29