我有一个Java应用程序,必须在itextPdf中使用FontFactory使用“ Bodoni MT Black”字体,我应该如何修改代码? 这是我的代码,
Font base = FontFactory.getFont(FontFactory.TIMES_ROMAN, 6);
如何将字体更改为“ Bodoni MT Black”(FontFactory不支持)而不是TIMES_ROMAN?请帮忙。
答案 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教程章节: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之外您别无选择,您应该阅读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”