8

我正在使用飞碟 xhtmlrenderer 来构建 pdf 文档。到目前为止一切正常 - 现在我们应该在 pdf 中生成阿拉伯文本。Xhtmlrenderer 以相反的顺序呈现阿拉伯文本。

我在互联网上的某个地方(可能在他们自己的网站上)读到 xhtmlrenderer 不支持 bidi/rtl。但 IText 本身包含通过 ColumnText 和 PdfPTable 处理阿拉伯语和希伯来语的示例(来源可以在这里找到:http: //sourceforge.net/projects/itextpdf/files/Examples/examples-155/examples-155.zip/download - arabic_hebrew.java),这些工作正常。

我尝试在 xhtmlrenderer 的 ReplacedElementFactory/ITextReplacedElement 中使用 itext api,但找不到定位元素的好例子。有没有人试图这样做?或者也许有一个更简单(或至少有效)的解决方案?

4

2 回答 2

3

最后,我可以使用飞碟在 rtl/ltr 中打印阿拉伯语文本。在我的代码中,我为每个阿拉伯文本块提供了宽度和对齐方式,但总的来说它工作正常。(已编辑)代码很大,在这里打印下来,请在谷歌群组中找到代码,链接在评论中。

于 2011-06-15T14:01:40.163 回答
2

我面临同样的问题,我能找到的唯一解决方案是在项目的资源文件夹中使用 arial 字体导入/添加 arial.ttf 和 arialbold.ttf 文件。

            OutputStream outputStream = response.getOutputStream();
        ITextRenderer renderer = new ITextRenderer();
        // renderer.getFontResolver().addFont("/fonts/arialbold.ttf",
        // BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
        renderer.getFontResolver().addFont("/fonts/arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        renderer.getFontResolver().addFont("/fonts/arialbold.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

        // SharedContext sharedContext = renderer.getSharedContext();
        // sharedContext.setPrint(true);
        // sharedContext.setInteractive(false);
        // sharedContext.setReplacedElementFactory(new B64ImgReplacedElementFactory());
        // sharedContext.getTextRenderer().setSmoothingThreshold(0);

        renderer.setDocumentFromString(content);
        renderer.layout();
        renderer.createPDF(outputStream);
        renderer.finishPDF();
        outputStream.close();

在你的 CSS 使用中

html, body {
 margin: 0;
 padding: 0;
 font-family: Arial, Arial Bold;
 font-size: 10px;
 line-height: 14px;
}
于 2017-12-13T20:26:02.073 回答