これは、調査に費やした2日目で、結果はありません。少なくとも今は、非常に具体的なことを尋ねることができます。
iTextを使用して、より具体的にはFlying Saucerの ITextRendererを使用して、ラテン文字以外の文字を含む有効な HTML コードを PDF ファイルに記述しようとしています。
私の短い例/コードは、文字列変数 doc を次の値で初期化することから始まります。
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.flyingsaucer.core-renderer-8Pre2.jar
私はさらに多くのフォントを試してきましたが、私の問題は間違ったフォントを使用することとは何の関係もないと思います. どんな助けでも大歓迎です。
ありがとう