Как получить встроенные шрифты pdf с помощью PDFBOX0.8.0

#embedded-fonts #pdfbox

#встроенные шрифты #pdfbox

Вопрос:

Мой код:

         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 amp;amp; 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, чтобы получить все шрифты?

Спасибо за ваш ответ.

Ответ №1:

Похоже, что в загруженный вами PDF-файл загружено несколько шрифтов. Я не смог придумать никакого способа извлечения шрифтов из документа (который, я думаю, должен быть доступен для нас, поскольку мы загружаем шрифты в определенный документ).

Я предполагаю, что когда вы загружаете шрифт в документ, он использует «F0», «F1» и т.д. В качестве ключей Для сопоставления с типом PDFont. Когда вы печатаете объект fonts, он печатает ячейку памяти объекта.

Чтобы получить все встроенные шрифты, вы можете создать новый объект HashMap(), затем выполнить итерацию по всем страницам и добавить каждый шрифт в вашу HashMap(). Затем вы можете выполнить итерацию по ключам, получить объект PDFont font и использовать font.getSubType(), чтобы получить какое-то описание шрифта.

Надеюсь, это поможет. Удачи!