3

我的代码:

        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 页面获取所有字体吗?

感谢您的回答。

4

1 回答 1

0

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

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

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

希望这可以帮助。祝你好运!

于 2015-08-19T16:07:23.270 回答