pdfStamper.AcroFields.SetField不保留外观设置

时间:2019-02-18 14:33:50

标签: itext acrofields

我使用iTextSharp 5.5.13创建带有文本AcroFields的pdf文件,然后在第二步中编辑pdf,以一些值填充AcroFields。

对于某些字段,我必须设置字符间距,因此我使用CreateAppearance方法。这是代码:

var appearance = writer.DirectContent.CreateAppearance(box.Width, box.Height);
appearance.SetFontAndSize(baseFont, obj.FontSize);
appearance.SetColorFill(new iTextSharp.text.BaseColor(obj.Color));
appearance.SetCharacterSpacing(obj.CharSpacing);
formField.DefaultAppearanceString = appearance;
formField.SetAppearance(iTextSharp.text.pdf.PdfAnnotation.APPEARANCE_NORMAL, appearance);

writer.AddAnnotation(formField);

此代码可产生预期的pdf结果,并在可编辑字段中具有良好的字符间距。

问题是当我编辑pdf文件以填充AcroFields时:

pdfStamper.FormFlattening = true;
pdfStamper.AcroFields.GenerateAppearances = true;
pdfStamper.AcroFields.SetField(fieldName, fieldValue);

生成的拼合pdf不能保持外观字符间距...

我的代码怎么了?

谢谢

1 个答案:

答案 0 :(得分:1)

对于生成文本字段外观,iText 5.x仅使用 DA 默认外观字符串中的字体,字体大小和颜色信息(仅当使用 g设置时才使用颜色信息)。 rg k 说明),请参见。 AcroFields方法SplitDAelements,该方法用于从 DA 字符串中提取信息。

因此,iText 5.x外观的生成非常有限,特别是不支持字符间距。

一种可能的解决方法是让您在自己的代码中显式创建所有外观。