该示例非常有用,除了文本是倒排的.例如,稍微更改示例:

String txt = "\u0623\u0628\u062c\u062f\u064a\u0629 \u0639\u0631\u0628\u064a\u0629";

System.out.println(txt);

g2.drawString(txt, 100, 30);

与PDF相比,屏幕上打印的内容是相同的字符,但方向相反.控制台输出正确,而PDF输出不正确.

我不想简单地反转字符,因为否则我将失去双向支持…

解决方法:

IIRC,iText在比drawString更高的级别上支持阿拉伯语成形.让我们看看这里…

啊! ColumnText.showTextAligned(PdfContentByte画布,int对齐,短语短语,float x,float y,float旋转,int runDirection,int arabicOptions)

对齐是Element.ALIGN_ *之一.运行方向是PdfWriter.RUN_DIRECTION_ *之一.阿拉伯语选项是位标志ColumnText.AR_ *

请注意,这应该可以解决问题:我不确定它会在同一短语中处理多个方向.您的测试字符串包含CJKV,阿拉伯和拉丁字符,因此应该有两个方向变化.

标签:unicode,pdf-generation,arabic,java

来源: https://codeday.me/bug/20191208/2093091.html

该示例非常有用,除了文本是倒排的.例如,稍微更改示例:String txt = "\u0623\u0628\u062c\u062f\u064a\u0629 \u0639\u0631\u0628\u064a\u0629";System.out.println(txt);g2.drawString(txt, 100, 30);与PDF相比,屏幕上打印的内容是相同的字符,但方向相反.控制台输出正确,而P... <button id="cLink"> pdf 查看</button> <a target='_blank' href="#" id="jumpUrl"><span id="jumpClick" ></span></a> js代码:
背景:同事在苹果电脑的 PDF 阅读器中打开 PDF 文件,说里面的超链接无法跳 ,但在浏览器中打开就是可以跳 的 问题:超链接中包含了中文,在苹果那个 PDF 阅读器中显示的中文的编码和浏览器地址栏中显示的中文编码不一致 思考:苹果的 PDF 阅读器对中文编码是不是跟浏览器不一样,所以是不是只要统一了编码就可以 解决方案:在生成 PDF 前将url中的中文用js中的encodeURIComponent()进行编码,这样生成的 PDF 中就不包含中文,点击超链接就可以直接使用编码后的地址了 PS: 浏览器地址栏对中文.
最近公司工资条 打印 不了了,而且好几个月了,只因为人事小姐姐换了新电脑, 打印 机无法正确配置。 症状: 打印 打印 和预览不同,有 候横竖相 ,有 候缩成一坨...... 如果你也是这问题,感谢我吧,给你终极解决方案。 我可是研究了好几天啊。 新建纸张类型,大家肯定都已经试了N次了, 这里没有任何问题,问题在于我们太自信了。 我们太相信微软,感觉这个太简单了,设置一下完全没问题,但是结果让...
最近要搞前端html pdf 的功能。折腾了两天,略有所收,踩了一些坑,所以做些记录,为后来的兄弟做些提示,也算是回馈社区。 经过一番调(sou)研(suo)发现html导出 pdf 一般有这几种方式,各有各有优缺,下面简单介绍。 这篇文章说了啥 前端实现(着重) 通过 打印 预览实现 通过插件js Pdf 实现 后端实现(凑数) iText、wkhtmlto pdf 、prince 通过 打印 预览实现 通过 打印 预览来实现导出 pdf 并不是什么稀奇事,一般浏览器(Chrome)
1. 创建一个 StringBuffer 对象,将字符串作为参数传入构造函数。 2. 使用 reverse() 方法将整个字符串 。 3. 将字符串以空格为分隔符分割为单词。 4. 遍历分前的单词,并对每个单词使用 StringBuffer 的 reverse() 方法进行 。 5. 将 后的单词重新拼接为一个字符串。 代码示例: public static String reverseWords(String str) { String[] words = str.split(" "); StringBuffer sb = new StringBuffer(); for (String word : words) { sb.append(new StringBuffer(word).reverse().toString()); sb.append(" "); return sb.toString().trim();