飞碟LTR/RTL/BiDi问题与阿拉伯文本

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,但找不到定位元素的好示例。 有人尝试过这样做吗?或者也许有一个更简单(或至少有效)的解决方案?

1
如果有人对这个话题感兴趣,这里是关于它的 Google 群组链接:http://groups.google.com/group/flying-saucer-users/browse_thread/thread/9f409fb987e943a2 - Askar Kalykov
2个回答

3

最终,我能够使用飞碟在rtl / ltr中打印阿拉伯文本。 在我的代码中,我为每个阿拉伯文本块提供宽度和对齐方式,但总体上效果很好。 (编辑)代码太长了,无法在此处打印,请在Google小组中查找代码,链接在评论中。


嗨,Askar。你能分享一下你的代码吗?提前感谢。 - Hamid
1
@Hamid,带有链接的答案因为违反无链接政策而被删除。它们在这里:https://groups.google.com/forum/#!msg/flying-saucer-users/n0CfuYfpQ6I/-PvsHoRI9jwJ - Askar Kalykov
@sala,请检查我在之前评论中提供的链接,它仍然有效。 - Askar Kalykov
自2011年以来,我一直在询问该库是否进行了重构以处理阿拉伯语,而不添加提供的解决方案。 - Zain Elabidine

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;
}

1
@ZainElabidine,你可以使用RTL方向来管理它,即使如此,仍然存在空间问题,所以我切换到Jasper,现在运行得非常好。 - LNT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接