如何在 iText PDF 中使用字体

问题描述 投票:0回答:2

我有一个java应用程序,我必须在itextPdf中使用FontFactory使用“Bodoni MT Black”字体,我应该如何修改我的代码? 这是我的代码,

Font base = FontFactory.getFont(FontFactory.TIMES_ROMAN, 6);

如何将字体更改为“Bodoni MT Black”(FontFactory 不支持)而不是 TIMES_ROMAN?请帮忙。

java pdf itext
2个回答
9
投票

您问题中的代码是使用 iText 5 的代码。但是,不再支持 iText 5。 iText 当前版本是 iText 7.1.2:

如果您正在开发一个新项目,您应该放弃 iText 5 并升级到 iText 7,因为所有新开发都将在 iText 7 上完成,而不是在 iText 5 上完成。假设在某个时候您需要 PDF 2.0 的支持,那么您需要丢弃您的 iText 5 代码,因为 iText 5 永远不会支持对 PDF 2.0 的支持。假设在某个时候您需要在 HTML 到 PDF 转换的上下文中支持 SVG,您将需要丢弃所有您的 iText 代码并使用 iText 7 重新开始。

iText 7 解决方案

如果您遵循我的建议并升级,那么您应该阅读 iText 7 关于字体的教程章节:https://developers.itextpdf.com/content/itext-7-building-blocks/chapter-1

本教程说明,如果您不想使用标准 Type 1 字体(例如 times roman)之一,则需要一个字体程序。具体来说,如果您想使用“Bodoni MT Black”,则需要文件BodoniMTBlack.ttf位于计算机上的某个位置,例如:

public static final String BODONIBLACK = "src/main/resources/fonts/BodoniMTBlack.ttf";

接下来,您可以使用此路径创建从

FontProgram
获得的
FontProgramFactory
对象:

FontProgram fontProgram = FontProgramFactory.createFont(BODONIBLACK);

使用

FontProgram
实例,您可以创建一个
PdfFont
对象。

PdfFont font = PdfFontFactory.createFont(fontProgram, PdfEncodings.WINANSI, true);

font
实例可以用作
setFont()
方法的参数:

Paragraph bodoni = new Paragraph().setFont(font).add("Bodoni");

iText 5 解决方案

万一您除了使用 iText 5 之外别无选择,那么您应该阅读 在 PDF 和 iText 中使用字体

就像 iText 7 一样,您需要一个字体程序:

public static final String BODONIBLACK = "src/main/resources/fonts/BodoniMTBlack.ttf";

现在你可以像这样创建一个

Font
对象:

BaseFont baseFont = BaseFont.createFont(BODONIBLACK, BaseFont.WINANSI, BaseFont.EMBEDDED);
Font bodoni = new Font(baseFont, 12);

补充说明:

Stack Overflow 引入了新的行为准则,旨在在网站上营造更健康的氛围(副标题中强调了友善、贡献、表示尊重等一些方面)。

根据该行为准则,我想通知您,在提问之前,您可以使用 iText 官方网站上提供的信息,为将来营造更好的氛围做出贡献。

当您使用iText并遇到与iText相关的问题时,您的第一反应应该是访问iText官方网站,在那里您可以找到我上面总结的信息。人们已经付出了很大的努力来编写教程来回答与您类似的问题。如果忽略了这些精彩的内容,您就无法欣赏所做的艰苦工作。今后请考虑到这一点。


1
投票

关于布鲁诺上述回答的一个重要说明。 (我的代表<50, so cannot comment on his answer).

FontProgramFactory(至少在 C# 中)位于“iText.IO.Font.FontProgramFactory”中。 我最初在寻找不同的“字体”命名空间:“iText.Kernel.Font”。 正如布鲁诺所说,所有这些都可以在他们的网站上找到。 这个特别的花絮位于:

https://api.itextpdf.com/iText7/7.0.1/com/itextpdf/io/font/FontProgramFactory.html

所以也许我的笔记应该根据行为准则删除。 其他人可以决定。 但正如我发现布鲁诺的信息在这里很有帮助,也许这篇笔记会节省某人几分钟的时间。

另外,事实证明(至少对于 C# 中的我来说).createFont 中的“C”需要大写。 所以... “PdfFontFactory.CreateFont”而不是“PdfFontFactory.createFont”

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