【问题标题】:Fonts not being Embedded in ItextSharp字体未嵌入 ItextSharp
【发布时间】:2016-12-11 21:26:53
【问题描述】:

我有一个打印过程,我们不允许使用字体替换来保持文档的完整性。完成此操作的唯一方法是确保嵌入所有字体。当我调用 FontFactory.GetFont(string fontname,string encoding,bool embedded,float size) 重载时,我指定了嵌入选项。下面的代码是我一直用来尝试找出解决方案的测试代码。不幸的是,生成的 pdf 没有嵌入字体。

    public static void TestPDFEmbedd()
    {
        Document document = new Document();
        PdfWriter.GetInstance(document, new FileStream(SystemPaths.SystemPath + "\\Production\\Test.pdf", FileMode.Create));
        document.Open();
        FontFactory.Register("c:\\windows\\fonts\\tahomabd.ttf","address_font");
        Font font = FontFactory.GetFont("address_font",BaseFont.CP1252,true,10f);
        document.Add(new Paragraph("Testing 123", font));
        document.Close();

    }

【问题讨论】:

  • 如果您看到 Helvetica 而不是 Tahoma Bold,则您的字体路径是错误的。

标签: fonts itext


【解决方案1】:

这个问题无法重现。测试生成了以下 PDF:

我意识到这不是答案,但这是我能想到的分享屏幕截图的唯一方法。实际上,这个问题没有答案,因为所描述的问题无法使用共享的信息来重现。

如您所见,iTextSharp 已嵌入字体。更具体地说,字体的子集。如果要嵌入完整字体,则需要使用本问题答案中说明的方法:embed font into pdf using itextsharp

阅读该答案,您还会注意到过去字体存在一些错误;当人们抱怨某些东西不起作用时,我们总是假设他们使用的是最新版本。这个假设是合理的,因为人们抱怨多年前修复的错误是没有意义的。

【讨论】:

  • 我有 5.5.7 版,安装了 5.5.9 版并遇到了同样的问题。我将字体从 tahomabd.ttf 更改为 tahoma.ttf,结果生成了一个嵌入字体的 pdf。我切换回 tahomabd.ttf,它不会嵌入。尝试了 cour.ttf 等,它也不会嵌入。显示的字体名称相似但不同。例如,在 tahomabd.ttf 上,它显示为 tahoma-bold,并且它被 tahoma,bold 取代。 Windows 10 会不会有问题?
  • 我能够复制您的场景,文档属性和预检功能显示嵌入的字体。当我转到“工具->高级编辑->修饰文本工具”并突出显示文本并查看属性时,它说字体不可查看。 Acrobat Reader Pro 中似乎存在差异
  • 你看我的回答了吗?我解释说嵌入了字体的子集。这反映在文档属性中,当您检查字体是否嵌入时,PDF 通过预检。但是,您想使用字体来添加文本。那是行不通的。例如:文本“Testing 123”不包含字母a。因此,您不能使用该字母添加任何 Tahoma Bold 文本,因为它不在嵌入的子集中。
  • 谢谢,我确实阅读了您的回答并且完全理解。我确实理解子集。我们不打算在创建文档后进行编辑。我曾使用文本修饰工具包来验证它是否被嵌入,我猜这是验证的错误工具。我已经更新了我们的系统,并且正在打印测试以进行验证,但我们现在没有发现任何问题。再次感谢您的帮助
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多