当我添加一个PdfFontby itext7库并且该字体未嵌入添加actual font到我创建的字体中的pdf阅读器时,以及在默认情况下我在此pdf中的可填充字段中写入一些文本时,我遇到了问题,actual font该问题与我的有所不同。如何解决此问题?
那是我创建字体的代码:
PdfFont pdfFont = PdfFontFactory.createFont(fileName, embed); PdfTextFormField pdfField = PdfFormField.createText(pdf, rect, "MyTextField", "", pdfFont, 16f); 那就是关于字体的信息截图: 在此处输入图片说明 而actual font在这种情况下是Adobe Sans MM。如何删除或替换此属性?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用iText 7创建PDF表单并指定字体时,遇到实际显示的字体与预期不符的问题,通常是因为目标PDF阅读器无法找到或正确渲染你嵌入或指定的字体。Adobe Sans MM作为默认字体出现,表明PDF阅读器在处理表单字段时回退到了一个基本的、兼容的字体。
要解决这个问题,请尝试以下步骤:
确保字体嵌入: 确保你在创建PdfFont
对象时成功嵌入了字体。在你的代码中,embed
参数应该是决定是否嵌入字体的关键。请确认这个参数为true
,以强制嵌入字体到PDF文档中。
PdfFont pdfFont = PdfFontFactory.createFont(fileName, PdfEncodings.IDENTITY_H, true);
注意:我添加了PdfEncodings.IDENTITY_H
来支持多字节字符编码,这在处理非ASCII字符时特别重要。
检查字体许可和格式: 确保你使用的字体允许嵌入,并且其格式(如TrueType, OpenType等)被iText支持且适合嵌入。不是所有字体都允许在PDF中嵌入,特别是某些商业字体可能有此限制。
字体子集化: 在创建字体时,考虑使用子集化(subsetting)来仅包含文档中实际使用的字符,这可以减少文件大小并避免潜在的许可问题。iText通常在嵌入字体时自动进行子集化,但确认这一点总是好的。
清理和重建PDF表单字段: 如果之前已经保存过未正确嵌入字体的PDF版本,即使后来修正了字体嵌入设置,旧的表单字段可能仍然引用错误的字体。尝试删除原有表单字段并重新创建它们。
更新PDF阅读器: 虽然不太常见,但有时问题也可能出在PDF阅读器端。确保你的PDF阅读器是最新版本,因为老版本可能不完全支持某些字体特性或处理嵌入字体的方式有误。
如果以上步骤都无法解决问题,建议详细检查生成的PDF文档的字体信息(例如,使用Adobe Acrobat的预览和字体检查工具),以确定字体是否确实被正确嵌入以及是否有其他隐藏的配置问题。