【问题标题】:itext 7.0.1 PdfChoiceFormField missing charactersitext 7.0.1 PdfChoiceFormField 缺少字符
【发布时间】:2017-03-16 09:53:07
【问题描述】:

在 itext 7 中,如果我在 windows 中使用 unicode(times new roman) 字体,PdfTextFormField 会正确显示所有字符。甚至 űőöüé 等。 但是当我尝试使用选项值创建一个 ComboBox 字段时: 第一的 第二 第三, 然后在 pdf 中,选项将是: 税务局 开 希尔 如果我使用默认字体,选项显示是可以的,但显然 űőöüé 字符是垃圾。 示例代码:

import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfChoiceFormField;
import com.itextpdf.forms.fields.PdfTextFormField;
import com.itextpdf.forms.fields.PdfFormField;

public class ComboTest {
    public static final String FONT = "c:/windows/fonts/times.ttf";    
    public static void main(String args[]) {
        try {
            PdfDocument pdfDoc = new PdfDocument(new PdfWriter("combobox.pdf"));
            PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H);
            String[] values = {"First","Second","Third"};
            PdfTextFormField text = PdfFormField.createText(
               pdfDoc,
               new Rectangle(72,200,108,26),
               "text", 
               "Árvíztűrő tükörfúrógép",
               font,
               12.0f
            );
            PdfChoiceFormField combo = PdfFormField.createComboBox(
                pdfDoc,
                new Rectangle(36, 780, 108, 26),
                "combo",
                "Choose your poison",
                values
            );
            combo.setFontAndSize(font,12); 
            PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);
            form.addField(combo); 
            form.addField(text);
            pdfDoc.close();
        } catch( Exception ex) {
            System.out.println(ex.toString());
        }
    }
}

我的问题是为什么?

【问题讨论】:

  • 这真的很好奇。我自己试过了。如果您将默认选项从“选择毒药”更改为“第二”,则“第二”将正确显示。您使用哪个 IText 版本?
  • @GAlexMES 7.0.1,根据 OP 的问题标题。
  • @AmedeeVanGasse 谢谢... :D
  • 我看到的唯一区别是,您创建的字体是 TrueTypeFont,而 PdfChoiceFormField 的默认字体是 Type1Font
  • 看起来像是字体子设置的问题。只有字符串"Choose your poison" 所需的字形被嵌入,所以First Second Third 变为irs e on hir

标签: java itext


【解决方案1】:

似乎 mkl 和 GAlexMES 找到了答案。 http://developers.itextpdf.com/content/best-itext-questions-stackoverview/font-examples/itext7-can-i-embed-font-only-partially

如果我选择 CP1252 并嵌入所有字体,它可以工作。

PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.CP1252);
font.setSubset(false);

同样不适用于 unicode 字体。 此外,如果我使用 afm 字体而不是 ttf,pdf 的大小会更大,但至少可读。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2017-04-15
    • 2016-10-01
    • 2011-08-26
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多