如何在iText PDF中使用字体

时间:2018-08-08 09:40:51

标签: java pdf itext

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

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

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

2 个答案:

答案 0 :(得分:1)

您问题中的代码是使用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

本教程说明,如果您不想使用诸如Times Roman的标准Type 1字体之一,则需要一个字体程序。特别是Mpre,如果要使用“ 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之外您别无选择,您应该阅读Using fonts in PDF and 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引入了一个新的Code of Conduct,旨在在网站上营造更健康的氛围(善意,贡献,表示尊重是其副标题中突出显示的某些方面)。

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

当您使用iText时,遇到与iText相关的问题时,您的第一个反应应该是访问iText官方网站,您将在其中找到我上面概述的信息。人们在编写教程方面做出了很大的努力,以回答与您相似的问题。通过忽略这些出色的内容,您将无法欣赏所做的辛苦工作。请将来考虑。

答案 1 :(得分:0)

关于布鲁诺答案的重要说明。 (我的代表<50,所以不能评论他的答案)。

FontProgramFactory(至少在C#中)在“ iText.IO.Font.FontProgramFactory”中找到。 最初,我在寻找另一个'Font'命名空间:'iText.Kernel.Font'。 正如Bruno所说,所有这些都可以在他们的网站上找到。该特殊提示位于:

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

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

此外,结果(至少对C#中的我而言).createFont中的'C'需要大写。所以... “ PdfFontFactory.CreateFont”而不是“ PdfFontFactory.createFont”