1

iText ライブラリを使用してヘブライ文字 (UTF-8) を含む *.xhtml を PDF に変換しようとしていますが、すべての文字が逆順になります。この質問から私が理解している限り、RTLColumnTextPdfCellオブジェクトに対してのみ設定できます。

アラビア語 (およびヘブライ語) は、ColumnText および PdfPCell のコンテキストでのみ正しくレンダリングできます。

*.xhtml ページ全体を PDF に変換することは可能でしょうか?

これは、インポートしようとする *.xhtml ファイルです

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>Title of document</title>
</head>

<body style="font-size:12.0pt; font-family:Arial">
  שלום עולם
</body>

</html>

そして、これは私が使用するJavaコードです:

public static void convert() throws Exception{
            Document document = new Document();
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("import.pdf"));
            writer.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
            document.open();

            String str = null;
            BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("import.xhtml"), "UTF8"));
            StringBuilder sb = new StringBuilder();

            while ((str = in.readLine()) != null) {
               System.out.println(str);
                sb.append(str);
            }
            in.close();


            XMLWorkerHelper worker = XMLWorkerHelper.getInstance();

            InputStream is = new ByteArrayInputStream(sb.toString().getBytes(StandardCharsets.UTF_8));
            worker.parseXHtml(writer, document, is, Charset.forName("UTF-8"));

            document.close();
        }
    }

これは私が今まで得たものです:

そして、これは私が得た結果です


助けてくれてありがとう。

4

1 に答える 1

1

ParseHtml10の例を見てください。この例では、ファイルhebrew.htmlを使用しています。

<html>

<head>
  <title>Hebrew text</title>
</head>

<body style="font-size:12.0pt; font-family:Arial">
<div dir="rtl" style="font-family: Noto Sans Hebrew">שלום עולם</div>
</body>

</html>

そして、次のコードを使用して PDF に変換します。

public void createPdf(String file) throws IOException, DocumentException {
    // step 1
    Document document = new Document();
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
    // step 3
    document.open();
    // step 4
    // Styles
    CSSResolver cssResolver = new StyleAttrCSSResolver();
    XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
    fontProvider.register("resources/fonts/NotoSansHebrew-Regular.ttf");
    CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
    HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
    htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());

    // Pipelines
    PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
    HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
    CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);

    // XML Worker
    XMLWorker worker = new XMLWorker(css, true);
    XMLParser p = new XMLParser(worker);
    p.parse(new FileInputStream(HTML), Charset.forName("UTF-8"));;
    // step 5
    document.close();
}

結果はhebrew.pdfのようになります。

ここに画像の説明を入力

あなたが取る必要があるハードルは何ですか?

  • <div>aや aなどの要素でテキストをラップする必要があります<td>
  • dir="rtl"方向を定義するには、属性を追加する必要があります。
  • ヘブライ語の表示方法を認識しているフォントを使用していることを確認する必要があります。ヘブライ語には NOTO フォントを使用しました。これは、可能なすべての言語のフォントを提供するために Google がプログラムで配布しているフォントの 1 つです。

ヘブライ語は読めませんが、結果の PDF が正しく、問題が解決することを願っています。

重要:dir属性のサポートは5.5.4で導入され、 5.5.5で改善されたため、このソリューションには少なくとも iText および XML Worker 5.5.5 が必要です。

于 2015-06-15T15:26:54.963 に答える