为啥我创建 PDF 文档时没有应用我的字体?
Posted
技术标签:
【中文标题】为啥我创建 PDF 文档时没有应用我的字体?【英文标题】:Why is my font not applied when I create a PDF document?为什么我创建 PDF 文档时没有应用我的字体? 【发布时间】:2015-12-13 14:19:57 【问题描述】:我正在使用 iText 生成 PDF 文档。当我尝试包含“Agenda Tabular Light”字体时,iText 会忽略我选择的字体。 我确认没有使用 Adobe Reader 的 File > Properties > Fonts 设置字体。 PDF显示使用了Helvetica,但我没有选择Helvetica。 颜色可见,但字体不可见。
我的代码如下所示:
public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLOR);
我什至尝试了一个示例程序。
// step 1
Document document = new Document();
// step 2
PdfWriter.getInstance(document, new FileOutputStream(filename));
// step 3
document.open();
// step 4:
Font font = FontFactory.getFont("Agenda Tabular Light");
System.out.println(font.toString());
document.add(new Phrase("Agenda Tabular Light J j", font));
Font fontbold = FontFactory.getFont("Times-Roman", 12, Font.BOLD);
document.add(new Phrase("Times-Roman, Bold", fontbold));
document.add(Chunk.NEWLINE);
document.close();
它像 Times-Roman 一样显示,并使用不同的字体来表示议程。 但是每当我在 Adobe Reader 的属性上看到字体选项卡时,它就会显示 Helvetica。
【问题讨论】:
很难相信您的企业需要您使用过时的、不受支持的 iText 版本(从 2009 年 7 月开始)。请升级到较新的版本以避免 iText 2.1.7 中存在的法律和技术问题,我们将重新审视您的问题。 它正在生产中,将其升级到最新版本不是我的决定。但我需要设置字体,一切都设置好了,比如大小、颜色,但不是特别是字体。有没有可以提供的解决方案? 是的,正如文档明确指出的那样,如果您没有先使用该别名注册字体,则不能使用诸如"Agenda Tabular Light"
之类的字体别名。谁决定升级过程?请告知我们,以免客户使用有问题的 iText 版本。
谢谢布鲁诺,那我先注册一下。关于升级,我应该先和我的经理谈谈。之后我可以告诉你。
【参考方案1】:
如 cmets 中所述,这通常不起作用:
Font font = FontFactory.getFont("garamond bold");
默认情况下,FontFactory
只知道 标准 Type 1 字体,而 "garamond bold"
不是这些字体之一,因此将使用 Helvetica 代替(Helvetica 是iText)。
您可以通过注册“教”FontFactory
在哪里找到其他字体。
你可以试试:
FontFactory.registerDirectories();
但这是一项非常昂贵的操作,因为您要求 iText 在您的操作系统中搜索不同字体目录中的字体文件(例如 C:/Windows/Fonts
)。这可能需要几秒钟,您最终会得到比您需要的字体多得多的字体(而且您需要的字体可能无论如何都不会被注册)。
最好的方法是像这样注册你需要的字体:
FontFactory.register("c:/windows/fonts/garabd.ttf", "garamond bold");
我们告诉 iText 在哪里可以找到 ttf 文件 ("c:/windows/fonts/garabd.ttf"
),并为该字体定义一个别名 ("garamond bold"
)。现在字体名称已经注册好了,我们可以开始使用它了:
Font myBoldFont = FontFactory.getFont("garamond bold");
【讨论】:
谢谢,它成功了,我也得到了 PDF 的属性。以上是关于为啥我创建 PDF 文档时没有应用我的字体?的主要内容,如果未能解决你的问题,请参考以下文章