2017-10-17 11 views
0

iText7を使用してJavaでPDFを作成しています。私はいくつかのカスタムフォントを使用し、それらのファイルはresourcesフォルダにあります。iTextPdf7 - リソースからフォントを取得

私は、これは完璧に動作し、NetBeansの上でアプリをテストし、実行していますが:

PdfFontFactory.register("./src/main/resources/GOTHAM-BOLD.otf", "gotham-bold"); 
PdfFont gBold = PdfFontFactory.createRegisteredFont("gotham-bold", PdfEncodings.IDENTITY_H); 

しかし、私が構築し、アプリケーションを実行してPDFファイルを生成しようとすると、iTextのは、フォントファイルを見つけることができませんそれは直接pathが必要なためです。 どのような選択肢がありますか?私は本当にこれを他のリソースのように任意のPCで動作させるために必要とします。

答えて

2

エイリアスを使用している理由がわかりません。 配列とClass.getResourceAsStream(String)を組み合わせて受け入れる他のファクトリメソッドを使用して、FontProgramインスタンスを作成してPdfFontを作成するために使用できるフォントリソースの内容を取得することができます。次のように

あなたのコードを変更することができます。

// Apache Commons IO is used, but any way of retrieving bytes from stream will suffice 
byte[] fontContents = IOUtils.toByteArray(getClass().getResourceAsStream("GOTHAM-BOLD.otf")); 

FontProgram fontProgram = FontProgramFactory.createFont(fontContents); 
document.setFont(PdfFontFactory.createFont(fontProgram, PdfEncodings.IDENTITY_H)); 

あなたは、静的コンテキストで作業する場合、あなたが(代わりにMainのクラス名を入れる)Main.class.getResourceAsStream()のようにそれを使用することができます。

フォントリソースが最終アセンブリに表示されていることを確認してください。このアプローチでは、どのURLにも依存しません。

+0

これはNetBeans上でのみ動作しますが、ビルド済みのものを実行してもフォントはロードできませんでした。 'nullポインタ例外 'を返します。私は確認し、フォントはすべての他のリソースを含む瓶に入っています(また、 "作業中" - PDFファイルを生成するときに問題を視覚化することができます) – Anonirato

+0

@Anoniratoこれは、jarが正しく構築されない限り不可能です。アレクセイは単に、手元にあるタスクのための標準的なアプローチを提案しました。 – mkl

+0

@Alexey私はこの質問に関連しないいくつかの他の問題を抱えていました!あなたの答えは完璧に働いた!ありがとうございました! – Anonirato

関連する問題