Как я выясняю семейство шрифтов и размер шрифта слов в документе PDF?

Как я выясняю семейство шрифтов и размер шрифта слов в документе PDF? Мы на самом деле пытаемся генерировать документ PDF программно с помощью iText, но мы не уверены, как узнать семейство шрифтов и размер шрифта оригинала документа, который должен быть сгенерирован. свойства документа, кажется, не содержат эту информацию

8
задан Sam 7 May 2010 в 04:09
поделиться

3 ответа

Шрифты хранятся в каталоге (я полагаю, в подкаталоге типа font). Если вы откроете pdf как текстовый файл, вы должны быть в состоянии найти записи каталога (они начинаются и заканчиваются "<<" и ">>" соответственно.

На простом pdf-файле я нашел следующее:

<</Type/Font/BaseFont/Helvetica-Bold/Subtype/Type1/Encoding/WinAnsiEncoding>>

таким образом, поиск по префиксу должен помочь вам (в некоторых pdf-файлах есть пробелы между компонентами, но '/TT' - это не просто префикс. но '/Type /Font' должно быть в порядке).

Конечно, это ручной процесс, в то время как вы, вероятно, предпочтете автоматический.

И еще одно замечание: мы иногда используем identifont или what the font, чтобы найти необычные шрифты, которые создают нам проблемы (шрифт логотипа).

с уважением Guillaume

Edit : следующий код найдет все шрифты на страницах. Короче говоря, вы ищете в словаре каждой страницы подсловарь "ressource", а затем подсловарь "font". Каждая последующая запись - это словарь шрифтов, описывающий шрифт.

 PdfReader reader = new PdfReader(
   new FileInputStream(new File("file.pdf")));
 int nbmax = reader.getNumberOfPages();
 System.out.println("nb pages " + nbmax);

 for (int i = 1; i <= nbmax; i++) {
    System.out.println("----------------------------------------");
    System.out.println("Page " + i);
    PdfDictionary dico = reader.getPageN(i);
    PdfDictionary ressource = dico.getAsDict(PdfName.RESOURCES);
    PdfDictionary font = ressource.getAsDict(PdfName.FONT);
    // we got the page fonts
    Set keys = font.getKeys();
    Iterator it = keys.iterator();
    while (it.hasNext()) {
       PdfName name = (PdfName) it.next();
       PdfDictionary fontdict = font.getAsDict(name);
       PdfObject typeFont = fontdict.getDirectObject(PdfName.SUBTYPE);
       PdfObject baseFont = fontdict.getDirectObject(PdfName.BASEFONT);               
       System.out.println(baseFont.toString());              
    }
 }

Имя (переменная "name" в следующем коде) - это то, что используется в тексте для изменения шрифта. В PDF вам придется найти его рядом с текстом. Следующее число - это размер. Здесь, например, размер 12. (извините, все еще нет кода для этой части).

BT 
/F13  12  Tf 
288  720  Td 
the text to find  Tj 
ET
7
ответ дан 5 December 2019 в 17:35
поделиться

Если у вас есть Adobe Acrobat, вы можете увидеть шрифты внутри и изучить объекты и текстовые потоки. Я написал об этом статью в блоге http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects

1
ответ дан 5 December 2019 в 17:35
поделиться

В зависимости от PDF-файла, если он не обведен, вы можете открыть его в Adobe Illustrator, дважды щелкнуть по тексту и выделить часть текста, чтобы узнать семейство шрифтов, размер и т.д.

Если текст обведен, используйте один из тех онлайн-инструментов, которые предлагает PATRY, чтобы узнать шрифт.

Удачи

2
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: