Как определить семейство шрифтов и размер шрифта слов в документе PDF? - PullRequest
6 голосов
/ 07 мая 2010

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

Ответы [ 3 ]

6 голосов
/ 10 мая 2010

Шрифты хранятся в каталоге (я полагаю, в подкаталоге шрифта типа). Если вы откроете 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
2 голосов
/ 10 мая 2010

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

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

Удачи

1 голос
/ 10 мая 2010

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

...