我想制作一份包含英文和阿拉伯文的pdf报告。我在页面上有很多表/短语。我想显示阿拉伯文字以及英文。我也使用ColumnText在iText doxument中看到了阿拉伯语示例。我无法帮助自己。我的疑问是如何设置canvas.setSimpleColumn(36,750,559,780),这个方法中的参数用于不同位置的表/短语。我也提到了以下问题。我还有问题。
Writing Arabic in pdf using itext,
http://developers.itextpdf.com/examples/font-examples/language-specific-exampleshe
以下是我的代码..
private static final String ARABIC = "\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0627\u062c\u0645\u0627\u0644\u064a";
private static final String FONT = "resources/fonts/ARIALUNI.TTF";
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));
document.open();
Font f = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
PdfPTable table = new PdfPTable(3);
Phrase phrase = new Phrase();
Chunk chunk = new Chunk("test value", inlineFont);
phrase.add(chunk);
// I want to add Arabic text also here..but direction is not //correct.also coming as single alphabets
p.add(new Chunk(ARABIC, f));
PdfPCell cell1 = new PdfPCell(phrase);
cell1.setFixedHeight(50f);
table.addCell(cell1);
document.add(table);
document.close();
答案 0 :(得分:1)
你的代码有点草率。
例如:
PdfPTable
,但您只添加了一个单元格。该表永远不会呈现。Phrase
的{{1}},但稍后在您的代码中使用phrase
。您的代码中没有名称为p.add(...)
的变量。缺乏对StackOverflow阅读器的尊重可能导致无法得到答案,因为您期望读者不仅能够解决实际问题 - 无法在单个p
中使用英语和阿拉伯语文本 - ,还要修复代码中的所有其他(可避免的)错误。
这是一个有效的例子:
PdfPCell
结果如下:
如您所见,英语和阿拉伯语文本都可以正常阅读。您可能会对文本的对齐和顺序感到惊讶。当我们在从右到左书写系统中工作时,左右切换。默认情况下,文本保持对齐,但只要我们引入RTL运行方向,就会更改为右对齐。
在您的代码中,首先添加英文文本,然后添加阿拉伯文本。阿拉伯语文本从右到左阅读。这就是为什么你看到右边的英文文本,以及为什么阿拉伯文字被添加到英文文本的左边。
所有这些都在iText 7中得到了改进.iText 7有一个额外的pdfCalligraph模块,以透明的方式处理其他书写系统。