我使用iTextSharp 5.5.13创建带有文本AcroFields的pdf文件,然后在第二步中编辑用一些值填充AcroFields的pdf。
对于某些字段,我必须设置字符间距,所以我使用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不保持外观字符间距...
我的代码出了什么问题?
谢谢
为了生成文本字段外观,iText 5.x仅使用DA默认外观字符串中的字体,字体大小和颜色信息(仅当使用g,rg或k指令设置时才使用颜色信息),参见AcroFields
方法SplitDAelements
,用于从DA字符串中提取信息。
因此iText 5.x外观生成非常有限,特别是不支持字符间距。
可能的解决方法是在您自己的代码中明确创建所有外观。