我刚刚开始了一个个性化簿记软件项目,我将结果填写在预制的 PDF 表格中。我的一切工作正常,但在其中一种形式中,使用 iText7 输入的文本具有不同的字体,然后是自动计算或手动输入的字段。当我单击生成的 pdf 的表单字段时,字体会从显示字体变为真实字体。
有没有办法设置 iText7 使用的默认字体来填写字段?这在其他表单上不是问题,所以我不确定如何处理。我使用 SetValue(string value, string display) 方法来设置文本,因为我需要货币格式。
编辑:我有其他没有这个问题的表格。我检查了这些表单字段上的字体并得到以下结果:
{PdfFont{fontProgram=Times-Roman}}
embedded: false
fontEncoding: {iText.Kernel.Font.DocFontEncoding}
fontProgram: {Times-Roman}
forceWidthsOutput: false
newFont: false
notdefGlyphs: Count = 0
shortTag: {byte[256]}
subset: false
subsetRanges: null
toUnicode: null
有问题的表单在字段上具有以下字体属性:
{PdfFont{fontProgram=Helvetica}}
embedded: false
fontEncoding: {iText.IO.Font.FontEncoding}
fontProgram: {Helvetica}
forceWidthsOutput: false
newFont: true
notdefGlyphs: Count = 0
shortTag: {byte[256]}
subset: true
subsetRanges: null
toUnicode: null
坏的形式使用新字体,而好的形式使用它应该使用的字体。我尝试了以下方法(field = fieldname, value = text for the field):
PdfAcroForm form = PdfAcroForm.GetAcroForm(PdfDocument, true);
PdfFont font = PdfFontFactory.CreateFont(StandardFonts.TIMES_ROMAN);
PdfFormField formField = form.GetField(field.ToString());
formField.SetFont(font);
formField.SetValue(value);
可悲的是,这无济于事,我仍然得到呈现为 Helvetica 的字段。当我点击一个字段时,它会变成 Times Roman,但情况总是如此。
我用 RUPS 检查了这两种表格,它们看起来确实不同: 1 = 坏 pdf,2 = 好 pdf
在糟糕的 PDF 上,Acroform 是间接的,而在良好的 PDF 上,acroform 是正确的字典。此外,坏 pdf 上的 acroform 不包含包含字体字典的默认资源。我对字典等的了解并不快,所以如果有人能指出我如何解决这个问题,我将不胜感激。