2012-04-19 18 views
3

非ラテン文字を含むITextRendererを使用してPDF文書を生成しようとしています。私の場合、ここはブルガリア人です。ITextRendererを使用してHTMLからpdfファイルを生成する際にエンコードの問題が発生する

ITextRendererを呼び出す前に、私は(きちんとして解析するように)いくつかのプロセスの後にそのようになっていることを文字列の内容(私はデバッグしてこの値を見ることができています)

スティングコンテンツを持っています

td class="description">Вид на потока</td> 
td class="description">Статус на потока</td> 

上記は私のStringの一部です。このコンテンツには有効なHTML構文が含まれています。私は、ブルガリアの文字を読むことができるので、この部分まで、私のエンコーディングが正しいことを明確にするために、ここに小さな部分を入れました。その後

、次のコードは、 itextrenderer に入れて、文書を作成する場所を取り、PDFファイルを生成します。このコードはすでにであり、内容は文字のです。私は英語のpdfファイルを正常に生成することができました。

以外の言語(ブルガリア語)で非ラテン文字と切り替えると表示されます。生成されたPDFはすべてのブルガリア文字を無視し、最終結果は空の行が多いpdfです。これは、PDF

 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

     dbf.setValidating(false); 
     dbf.setNamespaceAware(false); 
     dbf.setFeature("http://xml.org/sax/features/namespaces", false); 
     dbf.setFeature("http://xml.org/sax/features/validation", false); 
     dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false); 
     dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 

     DocumentBuilder builder = dbf.newDocumentBuilder(); 

     Document doc = builder.parse(new ByteArrayInputStream(content.getBytes("UTF-8"))); 

     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     InputStream is = null; 

     ITextRenderer renderer = new ITextRenderer(); 

     renderer.getFontResolver().addFont("fonts/TIMES.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
     renderer.getFontResolver().addFont("fonts/TIMESBD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
     renderer.getFontResolver().addFont("fonts/TIMESBI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
     renderer.getFontResolver().addFont("fonts/TIMESI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 


     renderer.setDocument(doc, null); 
     renderer.layout(); 
     renderer.createPDF(outputStream); 
     outputStream.close(); 


     byte[] outputBytes = outputStream.toByteArray(); 
     is = new ByteArrayInputStream(outputBytes); 
     response.setContentType("application"); 
     response.addHeader("Content-Disposition", "attachment; filename=\"" + "exported.pdf" + "\""); 
     response.setContentLength(outputBytes.length); 
     response.getOutputStream().write(inputStreamToBytes(is)); 

を生成するコードの一部であり、Iは、(符号化に主に関連する)いくつかを試してみましたが、残念ながら、私はまだ解決策を見つけていません。おそらく、私はここで明らかに何か:)

私は、これは任意の値を追加するかどうかわからないのですが行方不明ですが、私は、スプリングを使用していますが、このコードは、任意の助けが理解されるであろうコントローラー

内で実行されます。

ありがとう

答えて

1

はUTF-8エンコーディングを指定して、あなたのHTMLですか?あなたのフォントファイルはそのパスにありますか?

Linuxの中国語文字で動作すると言われるthis gistを見てください。これは、システムのフォントのデフォルトの場所へのパスを提供することで実現します。

+0

返信用のThanx。それはフォントの問題だと思いますか?ラテン文字以外の文字を表示するには特定のフォントが必要ですか?私のフォントは正しい場所にあると確信していますが、私はそれを試してみましょう。私はあなたに知らせるでしょう – alexandros

+0

こんにちは。私はそれを二重にチェックした。フォントが正しく読み込まれます。あなたが提案したFontTestも実行します。私はそこで同じ問題に直面しています。キリル文字をサポートするフォントを読み込みます。しかし、pdfはそれらを無視して空行を表示します。助言がありますか? – alexandros

+1

私はちょうど私の問題をより詳細に説明する新しい投稿を追加しましたhttp://stackoverflow.com/questions/10250606/generation-of-pdf-from-html-with-non-latin-characters-using-itext-does-not -作業 – alexandros

関連する問題