【发布时间】: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。