【发布时间】:2014-06-27 16:11:55
【问题描述】:
我有一个 Web 应用程序,它将从数据生成 PDF 并允许用户下载。我们有一个自定义字体,所以我要注册四个字体文件(常规、粗体、斜体和粗斜体 ttf 文件)。
这有必要吗?我可以只使用常规字体文件并通过字体类设置粗细/样式,还是需要所有文件?看起来它工作正常,但我仍在学习。
管理这些不同字体以放入我的文档中的好策略或模式是什么?从 Java 的角度来看,有人在这方面做了很多工作吗?
【问题讨论】:
我有一个 Web 应用程序,它将从数据生成 PDF 并允许用户下载。我们有一个自定义字体,所以我要注册四个字体文件(常规、粗体、斜体和粗斜体 ttf 文件)。
这有必要吗?我可以只使用常规字体文件并通过字体类设置粗细/样式,还是需要所有文件?看起来它工作正常,但我仍在学习。
管理这些不同字体以放入我的文档中的好策略或模式是什么?从 Java 的角度来看,有人在这方面做了很多工作吗?
【问题讨论】:
你没有告诉我们你是如何注册你的字体,也没有告诉我们你是如何使用它们的,所以让我告诉你我将如何工作(我是 iText 的原始开发者)。如果您使用这 4 种字体,最好的方法是像这样注册它们:
BaseFont bfRegular = BaseFont.createFont(regularTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
BaseFont bfBold = BaseFont.createFont(boldTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
BaseFont bfItalic = BaseFont.createFont(italicTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
BaseFont bfBoldItalic = BaseFont.createFont(boldItalicTTF, BaseFont.IDENTITY_H, BaseFont_EMBEDDED);
每当使用低级操作添加内容时,我都会使用这些 BaseFont 实例。
那么我会这样做:
Font fRegular = new Font(bfRegular, 12);
Font fBold = new Font(bfBold, 12);
Font fItalic = new Font(bfItalic, 12);
Font fBoldItalic = new Font(bfBoldItalic, 12);
每当我需要创建高级对象(例如Paragraph)时,我都会使用这些字体。
当然,我可能还需要这样的东西:
Font fRegularSmall = new Font(bfRegular, 9);
Font fBoldSmall = new Font(bfBold, 9);
Font fItalicSmall = new Font(bfItalic, 9);
Font fBoldItalicSmall = new Font(bfBoldItalic, 9);
Font fRegularBig = new Font(bfRegular, 20);
Font fBoldBig = new Font(bfBold, 20);
Font fItalicBig = new Font(bfItalic, 20);
Font fBoldItalicBig = new Font(bfBoldItalic, 20);
通常,我创建一个辅助类,在其中我只创建一次 BaseFont 对象(它们需要被重用),并为 Font 对象创建 getter。
【讨论】: