当我以 pdf 形式将值插入占位符时,如何为 iText 设置编码?
Posted
技术标签:
【中文标题】当我以 pdf 形式将值插入占位符时,如何为 iText 设置编码?【英文标题】:How can I set encoding for iText when I insert value to placeholder in pdf form? 【发布时间】:2016-09-15 07:23:30 【问题描述】:我尝试填写 pdf 表格。我有模板并填写我的数据。
PdfReader reader = new PdfReader(src);
FontFactory.register(BaseFont.IDENTITY_H);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
AcroFields form = stamper.getAcroFields();
String[] split = reportDTO.note.split("\\n");
form.setField("field1", "Значение");//value is some text in UTF-8
但我的值没有插入到field1
占位符。它是空的。但是如果以英语为例
form.setField("field1", "some text");
此文本插入成功。
如何在普通视图中设置插入文本的编码?
【问题讨论】:
我认为 pdf 文件字体有问题。也许您应该通过在 form 变量上使用方法 addSubstitutionFont 添加正确的字体:form.addSubstitutionFont(/*Here is your font for utf-8 or Cp1251 encoding*/)
FontFactory.register(BaseFont.IDENTITY_H)
的意图是什么?注册方法被记录为注册一个 ttf 或一个 ttc 文件,但 BaseFont.IDENTITY_H
是一个编码名称。
【参考方案1】:
解决方案之一:
1) 下载包含所有 unicode 符号的字体(你使用)
2) 使用编码创建字体(Cp1251、Cp1250、utf8 等)
3) 你应该使用 AcroFields 的 addSubstitutionFont 方法在表单变量上添加字体。
public static final String **FONT = "resources/fonts/ARIALUNI.TTF";**
somemethod()
**Font font = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);**
BaseFont baseFont = font.getBaseFont();
PdfStamper stamper = null;
try
stamper = new PdfStamper(reader, new FileOutputStream(fileDestination));
AcroFields form = stamper.getAcroFields();
form.addSubstitutionFont(baseFont);
form.setField("field1", "Значение");
... // other fields, catch etc
【讨论】:
以上是关于当我以 pdf 形式将值插入占位符时,如何为 iText 设置编码?的主要内容,如果未能解决你的问题,请参考以下文章