在itext 7中,如果我在windows中使用unicode(新罗马时代)字体,则PdfTextFormField会显示所有正确的字符。甚至űőöüé等 但是当我尝试使用选项值创建一个ComboBox字段时: 第一 第二 第三, 然后在pdf中选项将是: IRS e 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());
}
}
}
我的问题是为什么?
答案 0 :(得分:0)
似乎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大小会更大,但至少可读。
感谢。