iTextSharp - acroform字段编码

时间:2012-04-22 20:10:31

标签: encoding itextsharp

我正在尝试使用iTextSharp填写AcroForm的文本字段。 Acroform文本字段也是由iTextSharp通过这段代码创建的:

TextField Field = new TextField(OutputWriter, FieldPos, "MyField");
OutputWriter.AddAnnotation(Field.GetTextField()); // OutputWriter is writing to form.pdf

我使用以下代码填写表单:

PdfReader reader = new PdfReader("form.pdf");
PdfStamper filledOutForm = new PdfStamper(reader, new FileStream("filled_form.pdf", FileMode.Create));

AcroFields form = filledOutForm.AcroFields;
form.SetField("MyField", "some unicode data");

但是,当我在Acrobat Reader中打开filled_form.pdf时,除非我手动编辑字段(例如,我手工将字符附加到字段),否则unicode字符不可见。

我还尝试通过以下方式设置字段的字体:

BaseFont fieldFontRoman = BaseFont.CreateFont(@"C:\Windows\Fonts\times.ttf",
                                BaseFont.IDENTITY_H,
                                BaseFont.EMBEDDED);
form.SetFieldProperty("MyField", "textfont", fieldFontRoman, null);

然后,当我在Acrobat Reader中打开filled_form.pdf时,除非我手动编辑该字段,否则一切看起来都很好。之后,非unicode字符消失(它们变为空格)。他们在这里是因为如果我通过CTRL + C复制字段的整个内容并将其粘贴到记事本,我可以看到所有字符。

请指教。我希望看到该字段中的所有字符,而无需手动编辑字段,当然,在手动编辑后,我希望没有字符消失。

谢谢

1 个答案:

答案 0 :(得分:6)

创建PdfStamper后设置SubstitutionFont:

stamper.AcroFields.AddSubstitutionFont(myFont.BaseFont);