如何使用PDFBOX0.8.0获取pdf嵌入字体

发布于 2024-12-15 13:33:29 字数 952 浏览 1 评论 0原文

我的代码:

        FileInputStream pdfFile = new FileInputStream("C:/work/pdf2tiff/test.PDF");
        PDDocument pdDocument = PDDocument.load(pdfFile, true);

        PDDocumentCatalog catalog = pdDocument.getDocumentCatalog();
        List pages = catalog.getAllPages();

        if (pages != null && pages.size() > 0) {

            for (int i = 0; i < pages.size(); i++) {
                PDPage page = (PDPage) pages.get(i);
                Map fonts = page.getResources().getFonts();
                System.out.println("fonts=" + fonts);

我得到输出:

字体={F0=org.apache.pdfbox.pdmodel.font.PDType1Font@8aaed5,
F4=org.apache.pdfbox.pdmodel.font.PDType0Font@dc4414, F2=org.apache.pdfbox.pdmodel.font.PDType0Font@f98ce0, F6=org.apache.pdfbox.pdmodel.font.PDTrueTypeFont@18fcdce}

为什么字体映射的键是 F0/F1/F2/F6?这些是什么意思? 我应该迭代所有 pdf 页面以获得所有字体吗?

感谢您的回答。

My code:

        FileInputStream pdfFile = new FileInputStream("C:/work/pdf2tiff/test.PDF");
        PDDocument pdDocument = PDDocument.load(pdfFile, true);

        PDDocumentCatalog catalog = pdDocument.getDocumentCatalog();
        List pages = catalog.getAllPages();

        if (pages != null && pages.size() > 0) {

            for (int i = 0; i < pages.size(); i++) {
                PDPage page = (PDPage) pages.get(i);
                Map fonts = page.getResources().getFonts();
                System.out.println("fonts=" + fonts);

I got output:

fonts={F0=org.apache.pdfbox.pdmodel.font.PDType1Font@8aaed5,
F4=org.apache.pdfbox.pdmodel.font.PDType0Font@dc4414,
F2=org.apache.pdfbox.pdmodel.font.PDType0Font@f98ce0,
F6=org.apache.pdfbox.pdmodel.font.PDTrueTypeFont@18fcdce}

Why the fonts map's key is F0/F1/F2/F6? What these mean?
Should I iterate all pdf pages get all fonts?

Thanks for your answer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尝蛊 2024-12-22 13:33:29

您加载的 pdf 似乎加载了多种字体。我想不出任何从文档中检索字体的方法(我认为我们应该可以检索字体,因为我们将字体加载到特定文档中)。

我猜当您将字体加载到文档中时,它会使用“F0”、“F1”等作为映射到 PDFont 类型的键。当您打印字体对象时,它会打印该对象的内存位置。

要获取所有嵌入的字体,您可以创建一个新的 HashMap() 对象,然后迭代所有页面并将每种字体添加到 HashMap() 中。然后您可以迭代这些键,获取 PDFont 字体对象,并使用 font.getSubType() 获取某种字体描述。

希望这有帮助。祝你好运!

It seems like the pdf you loaded has multiple fonts loaded. I couldn't figure out any way to retrieve fonts from a document (which I think should be available for us to retrieve since we load fonts to a particular document).

I'm guessing when you load a font into the document it uses "F0", "F1", etc as keys to map to PDFont type. When you print fonts object, it's printing the memory location of the object.

To get all the embedded fonts, you can create a new HashMap() object, then iterate over all the pages and add each font to your HashMap(). Then you can iterate over the keys, get the PDFont font object and, use font.getSubType() to get some sort of description of the font.

Hope this helps. Good luck!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文