1

我使用 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 不保持外观字符间距...

我的代码有什么问题?

谢谢

4

1 回答 1

1

对于生成文本字段外观,iText 5.x 仅使用来自DA默认外观字符串的字体、字体大小和颜色信息(以及仅在使用grgk指令设置时的颜色信息),参见。用于从DA字符串中提取信息的AcroFields方法。SplitDAelements

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

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

于 2019-02-20T10:46:34.993 回答