当我以 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 设置编码?的主要内容,如果未能解决你的问题,请参考以下文章

你如何为自己做一个segue?

php 使用占位符时隐藏重力表单字段标签

如何为搜索输入制作 select2 占位符

如何为“选择”框制作占位符?

使用 PHP 将值插入到可编辑的 PDF 中,并使其保持可编辑状态

如何为select2添加占位符?