FlyingSaucer LTR/RTL/BiDi 阿拉伯语文本问题

发布于 2024-11-14 08:28:43 字数 615 浏览 4 评论 0原文

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

I'm using flying saucer xhtmlrenderer for building pdf documents. Everything worked fine until now - now we should generate arabic text inside pdf.
Xhtmlrenderer is rendering Arabic text in reverse order.

I've read somewhere on internet (maybe on their own site) that xhtmlrenderer does not support bidi/rtl.
But IText itself contains examples to work with arabic and hebrew via ColumnText and PdfPTable (sources can be found here: http://sourceforge.net/projects/itextpdf/files/Examples/examples-155/examples-155.zip/download - arabic_hebrew.java), and those work fine.

I tried to use itext api in xhtmlrenderer's ReplacedElementFactory/ITextReplacedElement, but could not find good examples for positioning elements.
Does anyone tried to do this? Or maybe there is a simplier (or at least working) solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷你仙 2024-11-21 08:28:43

最后我可以使用飞碟在 rtl/ltr 中打印阿拉伯文本。
在我的代码中,我为每个阿拉伯文本块提供了宽度和对齐方式,但总的来说它工作得很好。
已编辑)代码较大,无法在此处打印,请在 Google 群组中找到代码,链接在评论中。

Finally I'm able to print arabic text in rtl/ltr using flying saucer.
In my code I'm giving width and alignment for every arabic text block, but in general it works fine.
(Edited) Code is large to print it down here, please find the code on Google groups, the links are in the comments.

半岛未凉 2024-11-21 08:28:43

我遇到了同样的问题,我能找到的唯一解决方案是使用 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;
}

Same issue I was facing, only solution i can find out was using arial fonts
import/add arial.ttf and arialbold.ttf files in resources folder of your project.

            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();

in your css use

html, body {
 margin: 0;
 padding: 0;
 font-family: Arial, Arial Bold;
 font-size: 10px;
 line-height: 14px;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文