Как я выясняю семейство шрифтов и размер шрифта слов в документе PDF? Мы на самом деле пытаемся генерировать документ PDF программно с помощью iText, но мы не уверены, как узнать семейство шрифтов и размер шрифта оригинала документа, который должен быть сгенерирован. свойства документа, кажется, не содержат эту информацию
Шрифты хранятся в каталоге (я полагаю, в подкаталоге типа 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
Если у вас есть Adobe Acrobat, вы можете увидеть шрифты внутри и изучить объекты и текстовые потоки. Я написал об этом статью в блоге http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects
В зависимости от PDF-файла, если он не обведен, вы можете открыть его в Adobe Illustrator, дважды щелкнуть по тексту и выделить часть текста, чтобы узнать семейство шрифтов, размер и т.д.
Если текст обведен, используйте один из тех онлайн-инструментов, которые предлагает PATRY, чтобы узнать шрифт.
Удачи