13

これは、調査に費やした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

私はさらに多くのフォントを試してきましたが、私の問題は間違ったフォントを使用することとは何の関係もないと思います. どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

11

私はチェコ共和国から来ました、そして私たちの国のシンボルで同じ問題を抱えていました!いくつか検索した後、私はこのソリューションでそれを解決することができました。

特に(あなたがすでに持っている)と:

renderer
    .getFontResolver()
    .addFont(fonts.get(i).getFile().getPath(), 
             BaseFont.IDENTITY_H, 
             BaseFont.NOT_EMBEDDED);

そしてCSSの重要な部分:

* {
  font-family: Verdana;
/*  font-family: Times New Roman; - alternative. Without ""! */
}

そのcssがないと、フォントは使用されないように思えます。これらの行をCSSから削除すると、エンコードが再び壊れます。

これがお役に立てば幸いです。

于 2012-07-09T16:20:17.657 に答える
9

Add to your HTML something like this:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
        <style type='text/css'> 
            * { font-family: 'Arial Unicode MS'; }
        </style>
    </head>
    <body>
        <span>Some text with šđčćž characters</span>
    </body>
</html>

and then add FontResolver to ITextRenderer in java code:

ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("fonts/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

works great for Croatian characters

jars used for generating PDF are:

core-renderer.jar
iText-2.0.8.jar
于 2013-12-02T10:01:55.917 に答える
0

iTextコンテンツが含まれている html コンテンツからヘッダー情報を読み取らせますutf-8。エンコードを使用して HTML コードにタグを
追加し、実行して PDF を生成し、結果を確認します。 metacontent-typeutf-8 charsetiText

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 </head>
 <body>
  Some greek characters: Καλημέρα Some greek characters
 </body>
</html>

更新:
上記が機能しない場合は、http://www.manning.com/lowagie2/iText2E_MEAP_CH02.pdfENCODING VERSUS THE DEFAULT CHARSET USED BY THE JVMで公開されているドキュメントを参照してください。

于 2012-04-20T19:29:50.453 に答える