iText阿拉伯语翻转并用RTL重新排列

iText阿拉伯语翻转并用RTL重新排列,itext,arabic,bidirectional,bidi,Itext,Arabic,Bidirectional,Bidi,我对某些阿拉伯语/英语混合数据有疑问。 以下是我使用的代码: ColumnText column = new ColumnText(writer.getDirectContent()); column.setSimpleColumn(36, 770, 569, 36); column .setRunDirection(PdfWriter.RUN_DIRECTION_RTL); column.setArabicOptions(column.AR_NOVOWEL |

我对某些阿拉伯语/英语混合数据有疑问。 以下是我使用的代码:

ColumnText column = new ColumnText(writer.getDirectContent()); 
column.setSimpleColumn(36, 770, 569, 36); 
column .setRunDirection(PdfWriter.RUN_DIRECTION_RTL);      
column.setArabicOptions(column.AR_NOVOWEL |                  
                      column.AR_LIG |                      
                      column.AR_COMPOSEDTASHKEEL);   
这是原始数据

二,‏ ‏ ‎تغــيير ‎3010 E02‎

pdf生成后的数据

E02 3010ييغت‎二,

如果我更改为column.setRunDirection(PdfWriter.RUN\u DIRECTION\u NO\u BIDI)
该行输出正确,但阿拉伯语未定形。

结果正确。这些数字是中性的,将遵循当前方向。在本例中,我们先用R表示数字2,然后用R表示阿拉伯语,然后用R表示数字3010,然后用L表示E02。

IBM bidi布局和iText bidi处理似乎相互干扰。我在这里使用了RUN_DIRECTION\u NO_bidi和JAVABIDI标志:
现在,iText PDF阿拉伯语在所有情况下都是完美的


然而,我现在对PDF元数据有一个问题,当我在那里混合了阿拉伯语/拉丁语数据时,它现在显示了相同的翻转问题,有没有办法在元数据级别关闭bidi?

如果我指定column.setRunDirection(PdfWriter.RUN\u DIRECTION\u NO\u bidi),则该行与原始行一样排列,但阿拉伯语是不定形的。在这种情况下,有没有办法使字符成形?也许您需要
PdfWriter.RUN\u DIRECTION\u LTR
。它将塑造阿拉伯语,但保持拉丁语的顺序。或者我也可以使用带RUN\u DIRECTION\u NO\u BIDI的Arabicligaturiser()吗?带“RUN\u DIRECTION\u NO\u BIDI”的阿拉伯语不会被塑造。问题是你是想要“带一些阿拉伯语的拉丁语文本”还是“带一些拉丁语文本的阿拉伯语文本”。在第一种情况下使用LTR,在第二种情况下使用RTL。正如@PauloSoares所说,Nou_BIDI将创建不正确的、未连字的阿拉伯语文本。本文可能会帮助您