如何在创建时使用iText设置字段的字体如下:
PdfReader pdf = new PdfReader("C:\\foo.pdf");
FileStream outs = new FileStream("C:\\bar.pdf", FileMode.Create,
FileAccess.Write);
PdfStamper stamps = new PdfStamper(pdf, outs);
PdfFormField field = PdfFormField.CreateTextField(stamps.Writer,
false, false, 50);
field.SetWidget(new iTextSharp.text.Rectangle(50, 400, 500, 600),
PdfAnnotation.HIGHLIGHT_INVERT);
field.SetFieldFlags(PdfAnnotation.FLAGS_PRINT);
field.FieldName = "my_field";
stamps.AddAnnotation(field, 1);
stamps.Close();
我已经有一个BaseFont的引用,并且想要设置字段字体,这样当我打开Acrobat并检查表单字段时,外观属性将显示该字体。
答案 0 :(得分:0)
请查看TextField类的代码,更具体地说,请参阅getTextField()方法。您将看到字体是在默认外观(DA)中定义的。这种方法正在发生很多事情。创建外观,添加BaseFont。
要么你必须编写你自己的TextField类所做的实现,要么你必须切换到使用TextField类。
您是否有避免使用TextField的具体原因?
答案 1 :(得分:0)
您还有一个问题:
当我查看Acrobat时,我确实在字段中设置了字体,但是我希望它说Arial而不是SEBJIU + ArialMT
这是我使用的代码:BaseFont arial = BaseFont.CreateFont(“c:\ windows \ fonts \ arial.ttf”,BaseFont.CP1252,BaseFont.NOT_EMBEDDED);
我有两个评论:
ArialMT是存储在文件arial.ttf中的字体名称。如果希望字体以不同的名称显示,则需要在BaseFont类中使用方法setPostscriptFontName()。这是可能的,但我会反对它,因为它会产生误导。
SEBJIU +前缀表示仅使用字体的子集。如果使用setSubset(false),前缀将消失。
我看到你没有嵌入字体,但前缀告诉我你正在嵌入一个子集。也许还有别的东西在起作用。在某些情况下,嵌入的参数将被忽略。这是记录在案的。例如,从不嵌入标准类型1字体(即使您使用BaseFont.EMBEDDED);使用编码IDENTITY-H或IDENTITY-V的字体始终是嵌入的。