- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 Java 中使用 velocity 和 ITextRenderer 将所有字体嵌入到我的 pdf 中。
大多数字体都可以正常工作,例如
renderer.getFontResolver().addFont(
getClass().getResource("fonts/tahoma.ttf").toExternalForm(), true);
我有相同的代码用于 Times-Roman 和 Helvetica,但生成的 pdf 没有嵌入这两个。我确保字体名称与 PDF 文件属性中缺失字体的名称相匹配。
最佳答案
Flying Saucer 是一款基于 iText 构建的产品。尽管 iText 公司不认可使用 Flying Saucer,但我会破例回答这个问题(我是 iText Software 的 CEO)。
您指的是过去称为 Base 14 字体的字体。今天,这些字体被称为标准 Type 1 字体。
与 TrueType 和 OpenType 字体相反,Type 1 字体在一组两个文件中进行了描述。每种字体都有:
如 PDF 规范中所定义,每个查看者都应该能够呈现 14 种标准 Type 1 字体。这就是人们通常不嵌入它们的原因(除非有嵌入字体的特定原因。PDF/A 合规性是其中一个原因)。
至于 iText,iText 附带 14 个 AFM 文件。 iText 可以这样做,因为 AFM 文件的许可证允许这样做。 iText 不附带相应的 PFB 文件。如果这样做,那将是非法的,因为 PFB 文件不是免费提供的。因此,iText 永远不会嵌入 14 种标准 Type 1 字体,即使您将 embedded
参数设置为 true
。嵌入字体(如 Helvetica)的唯一方法是提供字体程序。也就是说:不仅是 iText 附带的 AFM 文件,还有知道如何绘制字形的 PFB 文件。
使用飞碟时要非常小心:如果将它与 iText 2 结合使用,则适用:https://stackoverflow.com/questions/25696851/can-itext-2-1-7-or-earlier-can-be-used-commercially如果您将它与 iText 5 结合使用,并且您没有根据 AGPL 分发自己的代码,则可能需要商业许可。
关于java - ITextRenderer 嵌入字体不适用于 base 14 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28101927/
我是一名优秀的程序员,十分优秀!