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

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


person Sam    schedule 07.05.2010    source источник


Ответы (3)


Шрифты хранятся в каталоге (полагаю, в подкаталоге типа шрифта). Если вы откроете PDF-файл как текстовый файл, вы сможете найти записи каталога (они начинаются и заканчиваются на «‹‹» и «>>» соответственно.

В простом файле PDF я нашел следующее:

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

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

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

С другой стороны, мы иногда используем identifont или какой шрифт, чтобы найти необычные шрифты, которые доставляют нам проблемы (шрифт логотипа).

с уважением Гийом

Изменить: следующий код найдет все шрифты на страницах. Короче говоря, вы ищете в словаре каждой страницы подсловарь «ресурс», а затем подсловарь «шрифт». Каждая запись в последнем представляет собой словарь шрифтов, описывающий шрифт.

 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());              
    }
 }

Имя (переменная «имя» в следующем коде) — это то, что используется в тексте для изменения шрифта. В PDF вам нужно будет найти его рядом с текстом. Следующая цифра - это размер. Вот, например, размер 12. (извините, до сих пор нет кода для этой части).

BT 
/F13  12  Tf 
288  720  Td 
the text to find  Tj 
ET
person PATRY Guillaume    schedule 10.05.2010
comment
Глядя на PDF-файл здесь, я всегда вижу /TT1 1 Tf для довольно простого текстового PDF-файла, но шрифт немного больше, чем размер 1. Я предполагаю, что вам также нужно комбинировать преобразования, ведущие к этому моменту , но я не нашел хорошего способа сделать это, если не считать реализации средства визуализации. - person Trejkaz; 29.08.2014

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

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

Удачи

person Xavi Esteve    schedule 10.05.2010

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

person mark stephens    schedule 10.05.2010