これは結果がなくても調査した2日目です。少なくとも今、私は何かを非常に具体的に尋ねることができます。ITextRendererを使用した非ラテン文字のHTMLからのPDFの生成は機能しません
私はiTextを使用してPDFファイルにいくつかの非ラテン文字が含まれており、より具体的にFlying SaucerからITextRendererを使用して、有効なHTMLコードを記述しようとしています。
私の短い例/コードは、この値を文字列変数ドキュメントを初期化することによって開始します。
String doc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\">"
+ "<body>Some greek characters: Καλημέρα Some greek characters"
+ "</body></html>";
ここで私はデバッグの目的のために使用するコードです。私は、HTMLファイルにこの文字列を保存し、その後、私はちょうどHTMLコンテンツが有効であることを確認し、私はまだギリシャ文字を読むことができます倍増するブラウザを介してそれを開く:
//write for debugging purposes in an html file
File newTextFile = new File("C:/work/test.html");
FileWriter fw = new FileWriter(newTextFile);
fw.write(doc);
fw.close();
次のステップは、この値を書き込むしようとすることですPDFファイル。これは私のコードです:
ITextRenderer renderer = new ITextRenderer();
//add some fonts - if paths are not right, an exception will be thrown
renderer.getFontResolver().addFont("c:/work/fonts/TIMES.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESBD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESBI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.getFontResolver().addFont("c:/work/fonts/TIMESI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
documentBuilderFactory.setValidating(false);
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
builder.setEntityResolver(FSEntityResolver.instance());
org.w3c.dom.Document document = builder.parse(new ByteArrayInputStream(
doc.toString().getBytes("UTF-8")));
renderer.setDocument(document, null);
renderer.layout();
renderer.createPDF(os);
私のコードの最終的な結果は次のとおりです。HTMLファイルで
私が手:いくつかのギリシャ文字:Καλημέραいくつかのギリシャ文字(予想される)
をPDFファイルで取得します:一部のギリシャ文字:いくつかのギリシャ文字(予期しない - ギリシャ文字無視されます!!)
依存性:
Javaのバージョン "1.6.0_27"
iTextの-2.0.8.jar
de.huxhorn.lilith.3rdpartyを。フライイングレンダラー8プレビュー2.jar
私はまた、私の問題は間違ったフォントを使うこととは関係がないと思います。どんな援助も大歓迎です。
ありがとう
ちょうどいいニュースでそれを試しました:(私は同じ結果を得ています @Ravinder私はあなたの例でを逃したと思う:P – alexandros
@alexandros:私の答えの更新をチェックしてください。 –
私はこれをテストに追加しました:System.out.println( "file.encoding =" + System.getProperty( "file.encoding"));その結果、file.encoding = UTF-8が出力されます。これが正しいエンコードを確実にするためには十分であるか? – alexandros