.net 如何在iText中设置PdfFormField的字体?

x759pob2  于 2023-11-20  发布在  .NET
关注(0)|答案(3)|浏览(223)

如何在创建时使用iText设置字段的字体,如下所示:

  1. PdfReader pdf = new PdfReader("C:\\foo.pdf");
  2. FileStream outs = new FileStream("C:\\bar.pdf", FileMode.Create,
  3. FileAccess.Write);
  4. PdfStamper stamps = new PdfStamper(pdf, outs);
  5. PdfFormField field = PdfFormField.CreateTextField(stamps.Writer,
  6. false, false, 50);
  7. field.SetWidget(new iTextSharp.text.Rectangle(50, 400, 500, 600),
  8. PdfAnnotation.HIGHLIGHT_INVERT);
  9. field.SetFieldFlags(PdfAnnotation.FLAGS_PRINT);
  10. field.FieldName = "my_field";
  11. stamps.AddAnnotation(field, 1);
  12. stamps.Close();

字符串
我已经有了一个BaseFont的引用,并希望设置字段字体,以便当我打开MySQL并检查表单字段时,外观属性将显示此字体。

cyej8jka

cyej8jka1#

请看一下TextField类的代码,更具体地说,在getTextField()方法中。你会看到字体是在默认外观(DA)中定义的。在该方法中进行了许多操作。外观被创建,BaseFont被添加。
要么您必须编写自己的实现来实现在TextField类中执行的操作,要么您必须切换到使用TextField类。
有没有一个具体的原因,你避免文本字段?

zzwlnbp8

zzwlnbp82#

您还有一个问题:
我没有得到的字体设置在该领域时,我在谷歌浏览器,但我希望它说Arial而不是SEBJIU+ArialMT
这是我使用的代码:BaseFont arial = BaseFont. NETFont(“c:\windows\fonts\arial.ttf”,BaseFont.CP1252,BaseFont.NOT_EMBEDDED);
我有两句话要对你说:

  1. ArialMT是存储在文件arial. ttf中的字体的名称。如果你想让字体以不同的名称出现,你需要在BaseFont类中使用方法setPostscriptFontName()。这是可能的,但我建议不要这样做,因为它会引起误解。
  2. SEBJIU+前缀表示只使用字体的一个子集。如果使用setSubset(false),前缀将消失。
    我看到你没有嵌入字体,但是前缀告诉我你嵌入了一个子集。也许还有其他的东西在起作用。在某些情况下,嵌入的参数被忽略了。这是有文档记录的。例如,标准类型1字体从不嵌入(即使你使用BaseFont.EMBEDDED);使用编码IDENTITY-H或IDENTITY-V的字体总是嵌入的。
syqv5f0l

syqv5f0l3#

BaseFont micrBaseFont = BaseFont. NETFont(“c:/windows/fonts/MicrEncoding-ZEDJ.ttf”,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
stamper.AcroFields.SetFieldProperty(fieldName,“textfont”,micrBaseFont,null);

相关问题