我们有一个应用程序,我们的客户使用Adobe Acrobat为完成证书创建pdf模板。当用户完成要求时,我们的应用程序将填入已定义的字段并允许他们打印证书。其中一个证书是在Arial(Helvetica)中打印而不是在某些(但不是全部)字段中请求的字体。
我已经检查了Stack Overflow和其他网站中的所有相关链接,但它们都没有解决模板显示字段中定义的字体的失败问题。
代码段:
var pdfStream = new MemoryStream();
var pdfReader = new PdfReader(pdfTemplate);
var pdfStamper = new PdfStamper(pdfReader, pdfStream);
var pdfFormFields = pdfStamper.AcroFields;
var baseFont = BaseFont.CreateFont(new HostConfig().GetConfigRoot().GetParent().FullName + "\\fonts\\ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
pdfFormFields.AddSubstitutionFont(baseFont);
foreach (DictionaryEntry de in pdfData) {
if (de.Key != null && de.Value != null) {
var foundField = pdfFormFields.SetField(de.Key.ToString(), de.Value.ToString());
if (foundField) {
pdfFormFields.SetFieldProperty(de.Key.ToString(), "setfflags", PdfFormField.FF_READ_ONLY, null);
pdfFormFields.SetFieldProperty(de.Key.ToString(), "flags", PdfAnnotation.FLAGS_PRINT, null);
pdfFormFields.RegenerateField(de.Key.ToString());
}
}
}
pdfStamper.FormFlattening = true;
pdfStamper.Close();
pdfStream.Close();
return pdfStream;
使用resharper调试器检查Acro字段显示它们在字段小部件的hashMap中都具有以下内容:
[{/ DA}] {/ MonotypeCorsiva 40 Tf 0 g} (字体大小因字段而异)
恢复为Arial的字段在hashMap中还包含以下内容:
[{/ DR}] {字典}
扩展时包含:
[{/ Helv}] {67 0 R}
即使删除pdfFormFields.AddSubstitutionFont,问题仍然存在。除了普通的拉丁字符集外,这些字段都不包含任何字形或字符。
另一个有趣的效果是,如果FormFlattening未设置为true,您可以单击Acrobat Reader中的字段,它们将显示为MonotypeCorsiva,直到您将焦点移动到其他位置。
其他信息:
我们正在考虑修复该文件。我未经许可自由发布模板,因为它属于我们的客户。