Java itext 7.0.1 PdfChoiceFormField缺少字符

Java itext 7.0.1 PdfChoiceFormField缺少字符,java,itext,Java,Itext,在itext 7中,如果我在windows中使用unicode(times new roman)字体,PdfTextFormField将显示所有正确的字符。即使是űőőőőő等。 但当我尝试创建一个组合框字段时,带有选项值: 弗斯特 第二 第三 然后在pdf中,选项将是: 国税局 继续 hir 如果我使用默认字体,dispay选项是可以的,但是很明显,űőöüé字符是垃圾。 示例代码: import com.itextpdf.io.font.PdfEncodings; import com.it

在itext 7中,如果我在windows中使用unicode(times new roman)字体,PdfTextFormField将显示所有正确的字符。即使是űőőőőő等。 但当我尝试创建一个组合框字段时,带有选项值: 弗斯特 第二 第三 然后在pdf中,选项将是: 国税局 继续 hir 如果我使用默认字体,dispay选项是可以的,但是很明显,űőöüé字符是垃圾。 示例代码:

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());
        }
    }
}

我的问题是为什么?看来mkl和GAlexMES找到了答案。

如果我选择CP1252并嵌入所有字体,它就会工作

PdfFont font = PdfFontFactory.createFont(FONT, PdfEncodings.CP1252);
font.setSubset(false);
对于unicode字体,这一点不起作用。 此外,如果我使用afm字体而不是ttf,pdf大小会更大,但至少可读


谢谢。

那真是太奇怪了。我自己试过了。如果您将默认选项从“选择毒药”更改为“秒”,则“秒”将正确显示。您使用哪个IText版本?@GAlexMES 7.0.1,根据OP的问题标题。@AmedeeVanGasse谢谢…:我所看到的唯一区别是,您创建的字体是a,而PdfChoiceFormField的默认字体是a,看起来像是字体子设置的问题。只有字符串
“选择你的毒药”
所需的标志符号被嵌入,因此
第一秒第三个
成为hir上的
irs e。