2016-05-04 6 views
0

У меня возникла следующая проблема. Я получаю файл PDF, который содержит набор шрифтов. Эти шрифты не встроены в файл. Вот простой пример:Вставить не встроенные шрифты в PDF с помощью IText

non embedded font

Я хотел бы встроить эти шрифты внутри PDF, так что они самодостаточны и всегда доступны. Но все не так просто. Я использую IText для выполнения моей обработки PDF.

Я прочитал и попытался следующие вопросы/ответы:

Но то, что получило меня ближе, было следующим примером: EmbedFontPostFacto.java (что вытекает из книги). Я смог встроить шрифт Arial при предоставлении файла Arial.ttf.

embedded font

Но с этим, как и с другими примерами, мне нужен исходный файл шрифта, чтобы вставить ее. В моем случае у меня нет исходного файла. Но я мог бы использовать их в системе. Поэтому я хотел бы запросить доступные шрифты в системе и посмотреть, соответствует ли данный шрифт данному шрифту.

Что-то любит, как

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
java.awt.Font[] fonts = e.getAllFonts(); 
for(java.awt.Font f : fonts){ 
    System.out.println(f.getFontName()); 
} 

Но я не могу преобразовать данный java.awt.Font в RandomAccessFile или byte[], которые будут использоваться для того, чтобы вставлять сам файл шрифта. Есть ли другой способ для встраивания шрифтов в PDF без исходного файла самого шрифта?

ответ

1

Для Windows C:\Windows\Fonts или такие файлы содержат все файлы шрифтов, а в проводнике также отображаются имена шрифтов. Таким образом, поиск вручную возможен.

В java у вас есть GraphicsEnvironment.getAvailableFontFamilyNames() и Font.getFamilyName(), чтобы проверить имя из PDF как «Arial MT».

Однако в шрифте отсутствует геттер для файла.

Итак, перечислите все файлы каталога шрифтов и загрузите каждый файл последовательно в качестве шрифта.

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
Font font = Font.createFont(Font.TRUETYPE_FONT, ttfFile); 
ge.registerFont(font); // If you want to load the font. 

if (pdfFontName.startsWith(font.getFamilyName()) { 
    System.out.printf("%s - %s/%s%n", ttfFile.getName(), font.getFamilyName(), 
      font.getName()); 
} 
Смежные вопросы