2016-05-04 33 views
0

で埋め込むので、以下の問題があります。フォントのセットを含むPDFファイルを受け取ります。これらのフォントはファイルに埋め込まれていません。ここでは簡単な例です:非埋め込みフォントをPDFにIText

non embedded font

私はPDF内でこれらのフォントを埋め込むしたいと思いますので、彼らは自己完結型で、常に利用可能です。しかし、物事はそれほど単純ではないようです。私はPDFの処理にITextを使用しています。

私は、次の質問/回答を読み、試してみました:書籍の

しかし、私が一番近かったのは次の例でした:EmbedFontPostFacto.java(本から来ています)。 Arial.ttfファイルを提供するときに私はArialフォントを埋め込むことができました。

embedded font

しかし、これで、他の例と同じように、私はそれを埋め込むためのフォントのソースファイルを必要とします。私の場合、私はソースファイルを持っていません。しかし、私はシステム上にそれらを持っているかもしれません。だから私はシステム上の私の利用可能なフォントを照会し、それが与えられたフォントに対応するかどうかを調べたいと思います。

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

として同類の何かしかし、私は、フォントファイル自体を埋め込むために使用されるRandomAccessFileまたはbyte[]に与えられたjava.awt.Fontを変換することはできません。 PDFにフォントを埋め込む別の方法がありますか?フォント自体のソースファイルはありませんか?

答えて

1

Windowsの場合C:\Windows\Fontsなどにはすべてのフォントファイルが含まれ、エクスプローラにはフォント名も表示されます。手動での検索が可能です。

javaでは、「Arial MT」のようなPDFから名前を確認するにはGraphicsEnvironment.getAvailableFontFamilyNames()Font.getFamilyName()があります。

ただし、ファイルのゲッターがFontにありません。

フォントディレクトリのすべてのファイルをリストし、各ファイルを連続してフォントとして読み込みます。

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()); 
} 
関連する問題