使用 iText 将字体嵌入 PDF 文件

Posted

技术标签:

【中文标题】使用 iText 将字体嵌入 PDF 文件【英文标题】:Embed font into PDF file by using iText 【发布时间】:2010-12-19 00:02:29 【问题描述】:

我定义了一个标签映射,并得到了一个 XML 数据文件。我想使用 iText 将 XML 数据文件转换为 PDF。问题是XML转PDF时如何在目标PDF中嵌入字体(如波兰字体、中文字体)?

【问题讨论】:

【参考方案1】:

如果您正在使用 iText 做更多的工作,您可能想要投资iText book - 它包含 iText 所有功能的示例。

您在创建字体时指定了一个参数来定义字体嵌入:

BaseFont helvetica = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.EMBEDDED);
Font font = new Font(helvetica, 12, Font.NORMAL);

您可以在此处找到更多与 iText 字体相关的示例:http://1t3xt.info/examples/browse/?page=toc&id=14

【讨论】:

我在 iText 书中研究了一些例子,似乎没有一个提示我的问题。在您的示例中,有一个标志“BaseFont.EMBEDDED”可用于指示字体文件的嵌入。但我要做的是将 XML 文件转换为带有定义的 tagmap 的 PDF 目录,整个过程只需一个调用。没有地方可以放置一些代码来嵌入字体。在您的示例中,我们可以将字体设置为某个段落,以便将字体嵌入到该段落中。但是对于使用 tagmap 的自动 PDF 生成,我们如何设置字体,我们可以使用哪个类/接口来嵌入字体?谢谢。 问题已解决。我们可以在 TagMap 中嵌入带有配置的字体。将“embedded”属性设置为“true”表示字体嵌入。还是谢谢。 我必须将 PATH 添加到我想要嵌入的字体中。 BaseFont.CreateFont(@"D:\fonts\HELR45W.ttf", BaseFont.CP1250, true)【参考方案2】:

但是,如果您没有与您使用的任何字符匹配的单一字体并且您需要多种字体,则会遇到问题。

在这种情况下,FontSelector 类适合您。

我为此写了一篇短文:http://lechlukasz.wordpress.com/2010/01/06/using-dynamic-fonts-for-international-texts-in-itext/

【讨论】:

【参考方案3】:

这是指示 iText 嵌入所有字体的一种非常简单的方法。在你的代码之前插入这个来加载字体:

FontFactory.defaultEmbedding = true;

【讨论】:

请注意,在 iTextSharp 中,FontFactory.DefaultEmbedding 是只读属性。【参考方案4】:

您可以尝试将其转换为嵌入了所有字体的 PDF/A。

    PdfReader reader = new PdfReader(GetTemplateBytes());
    pst = new PdfStamper(reader, Response.OutputStream);

    pst.Writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_4);
    pst.Writer.PDFXConformance = PdfWriter.PDFA1A;

【讨论】:

这个建议不起作用,itext 编写器在这里和那里设置了一些标志,但是实际的字体引用和字体数据没有正确添加到文件中。在具有未嵌入字体的文件上运行它仍然会创建一个缺少相同字体的文件。我用 iText4.1.6 和 iText 5.5.10 对此进行了测试我一直在寻找一种简单的方法来用 iText 4 或 5 嵌入字体很长一段时间,没有成功 这是一个已有 9 年历史的解决方案。我记得当时很难做到。我不会打赌它今天工作。也许尝试一些新的东西。 不幸的是,iText 并没有让它变得更容易。在现有文件中嵌入现有字体在 9 年前不起作用,据我所知,在撰写本文时它仍然不起作用。据我所知,iText 没有简单的方法。我还在寻找。

以上是关于使用 iText 将字体嵌入 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何替换或修改嵌入在 PDF 文件中的字体或字形?

如何从 PDF 中提取嵌入字体作为有效字体文件?

如何摆脱 iText XMLWorker 中的 Helvetica?

iText7高级教程之html2pdf——6.在pdfHTML中使用字体

iText7高级教程之html2pdf——6.在pdfHTML中使用字体

如何使用 iText 获取使用多种字体呈现的 pdf