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

问题描述 投票:1回答:1

我使用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 acrofields
1个回答
1
投票

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

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

可能的解决方法是在您自己的代码中明确创建所有外观。

© www.soinside.com 2019 - 2024. All rights reserved.