iText-在页面中不同位置的pdf表单元格短语中附加阿拉伯语文本

时间:2016-08-04 04:23:31

标签: java pdf itext

我想制作一份包含英文和阿拉伯文的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();

1 个答案:

答案 0 :(得分:1)

你的代码有点草率。

例如:

  • 您定义了一个包含3列的PdfPTable,但您只添加了一个单元格。该表永远不会呈现。
  • 您定义名为Phrase的{​​{1}},但稍后在您的代码中使用phrase。您的代码中没有名称为p.add(...)的变量。
  • ...

缺乏对StackOverflow阅读器的尊重可能导致无法得到答案,因为您期望读者不仅能够解决实际问题 - 无法在单个p中使用英语和阿拉伯语文本 - ,还要修复代码中的所有其他(可避免的)错误。

这是一个有效的例子:

PdfPCell

结果如下:

enter image description here

如您所见,英语和阿拉伯语文本都可以正常阅读。您可能会对文本的对齐和顺序感到惊讶。当我们在从右到左书写系统中工作时,左右切换。默认情况下,文本保持对齐,但只要我们引入RTL运行方向,就会更改为右对齐。

在您的代码中,首先添加英文文本,然后添加阿拉伯文本。阿拉伯语文本从右到左阅读。这就是为什么你看到右边的英文文本,以及为什么阿拉伯文字被添加到英文文本的左边。

所有这些都在iText 7中得到了改进.iText 7有一个额外的pdfCalligraph模块,以透明的方式处理其他书写系统。