我有一个java应用程序,我必须在itextPdf中使用FontFactory使用“Bodoni MT Black”字体,我应该如何修改我的代码? 这是我的代码,
Font base = FontFactory.getFont(FontFactory.TIMES_ROMAN, 6);
如何将字体更改为“Bodoni MT Black”(FontFactory 不支持)而不是 TIMES_ROMAN?请帮忙。
您问题中的代码是使用 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 关于字体的教程章节: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 之外别无选择,那么您应该阅读 在 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官方网站,在那里您可以找到我上面总结的信息。人们已经付出了很大的努力来编写教程来回答与您类似的问题。如果忽略了这些精彩的内容,您就无法欣赏所做的艰苦工作。今后请考虑到这一点。
关于布鲁诺上述回答的一个重要说明。 (我的代表<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”