如何使用 Java iText 检查所有使用的字体是否都嵌入到 PDF 中?
如何使用 Java 和 iText 检查 PDF 文件中使用的所有字体是否都嵌入到文件中?我有一些现有的 PDF 文档,我想验证它们是否仅使用嵌入字体。
这需要检查是否未使用 PDF 标准字体以及文件中是否嵌入了其他使用的字体。
How to check that all fonts that are used in a PDF file are embedded in the file with Java and iText? I have some existing PDF documents, and I'd like to validate that they use only embedded fonts.
This would require checking that no PDF standard fonts are used and other used fonts are embedded in the file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
查看 iText in Action 中的 ListUsedFonts 示例。
http://itextpdf.com/examples/iia.php?id=287
看起来这将打印出 pdf 中使用的字体以及它们是否嵌入。
Look at the ListUsedFonts example from iText in Action.
http://itextpdf.com/examples/iia.php?id=287
Looks like this will print out the fonts used in a pdf and if they are embedded.
上面的代码可用于检索未嵌入给定 PDF 文件中的字体。我改进了 iText in Action 中的代码,以便它也可以处理 Font 的 后代字体 节点。
The code above could be used to retrieve the fonts that are not embedded in the given PDF file. I've improved the code from iText in Action so that it can handle Font's DescendantFont node, too.
当您创建 chunk 时,您声明您使用的字体。
从您要使用的字体创建 BaseFont 并将其声明为 BaseFont.EMBEDDED。
请注意,当您未将选项 subset 设置为 true 时,将嵌入整个字体。
请注意,嵌入字体可能会侵犯作者权。
When you create Chunk, you declare what font you use.
Create BaseFont from the font you want to use and declare is as BaseFont.EMBEDDED.
Note that when you not set option subset to true, the whole font will be embedded.
Be aware that embedding font might violate authorship rights.
我不认为这是一个“iText”用例。使用 PDFBox 或 jPod。它们实现了 PDF 模型,因此使您能够:
检查是否仅使用嵌入字体< /strong> 到目前为止要复杂得多(即,未嵌入但未使用的字体很好)。
I don't think this is an "iText" use case. Use either PDFBox or jPod. These implement the PDF model and as such enable you to:
A check if only embedded fonts are used is by far more complex (this is , fonts that are not embedded but not used are fine).
最简单的答案是使用 Adobe Acrobat 打开 PDF 文件,然后:
这将显示文档中所有字体的列表。任何嵌入的字体都会在字体名称旁边显示“(嵌入)”。
例如:
ACaslonPro-Bold(嵌入)
,其中 ACaslonPro-Bold 源自嵌入它的文件名(例如
FontFactory.register("/path/to/ACaslonPro-Bold.otf",...< /代码>
The simplest answer, is to open the PDF file with Adobe Acrobat then:
This will show you a list of all fonts in the document. Any font that is embedded will display "(Embedded)" next to the font name.
For example:
ACaslonPro-Bold (Embedded)
where ACaslonPro-Bold is derived from the file name that you embedded it with (e.g.
FontFactory.register("/path/to/ACaslonPro-Bold.otf",...