Java iText-在页面的不同位置附加pdf表格单元格短语中的阿拉伯文文本
我想做一份英文和阿拉伯文的pdf报告。我在这一页上有许多表格/短语。我想显示阿拉伯语文本也随着英语。我在iText doxument中也看到了使用ColumnText的阿拉伯语示例。我无法控制自己。我的疑问是如何设置canvas.setSimpleColumn(36750559780),这个方法中的参数用于不同位置的表/短语。我也提到了下面的问题。我仍然有问题 ,Java iText-在页面的不同位置附加pdf表格单元格短语中的阿拉伯文文本,java,pdf,itext,Java,Pdf,Itext,我想做一份英文和阿拉伯文的pdf报告。我在这一页上有许多表格/短语。我想显示阿拉伯语文本也随着英语。我在iText doxument中也看到了使用ColumnText的阿拉伯语示例。我无法控制自己。我的疑问是如何设置canvas.setSimpleColumn(36750559780),这个方法中的参数用于不同位置的表/短语。我也提到了下面的问题。我仍然有问题 , 下面是我的代码 private static final String ARABIC = "\u0627\u0644\u0633\
下面是我的代码
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();
你的代码有点马虎 例如:
- 您定义了一个包含3列的
,但只添加了一个单元格。那张桌子永远不会被渲染PdfPTable
- 您可以使用名称
短语
定义
短语,但稍后在代码中使用
。代码中没有名为p.add(…)
的变量p
PdfPCell
-中使用英语和阿拉伯语文本,而且能够修复代码中的所有其他(可避免的)错误
这是一个工作示例:
public static final String FONT = "resources/fonts/NotoNaskhArabic-Regular.ttf";
public static final String ARABIC = "\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0627\u062c\u0645\u0627\u0644\u064a";
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Font f = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
PdfPTable table = new PdfPTable(1);
Phrase phrase = new Phrase();
Chunk chunk = new Chunk("test value");
phrase.add(chunk);
phrase.add(new Chunk(ARABIC, f));
PdfPCell cell = new PdfPCell(phrase);
cell.setUseDescender(true);
cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
table.addCell(cell);
document.add(table);
document.close();
}
结果如下所示:
正如你所看到的,英文和阿拉伯文都可以很好地阅读。您可能会对文本的对齐方式和顺序感到惊讶。当我们在从右向左的书写系统中工作时,左和右是切换的。默认情况下,文本是左对齐的,但一旦我们引入RTL运行方向,就会更改为右对齐
在代码中,首先添加英文文本,然后添加阿拉伯文文本。阿拉伯文文本从右向左阅读。这就是为什么你会看到英语文本在右边,为什么阿拉伯语文本会被添加到英语文本的左边
所有这些都在iText 7中得到了改进。iText 7有一个额外的pdfCalligraph模块,以透明的方式处理其他书写系统。感谢Bruno的快速响应,并为我的代码共享中的问题道歉。我在iText页面中将代码与示例混合。在使用ColumnText的示例中,给出的方向是canvas.setRunDirection(PdfWriter.RUN\u direction\u LTR);有没有一种方法可以在这种情况下使用类似的方法。我需要左边的英语和右边的阿拉伯语。pdfCalligraph也是付费版本吗?无法使用Maven下载iText 7。正在检查。如果没有任何帮助,我计划对英语和阿拉伯语使用单独的单元格。如果您希望在iText 5中左侧显示英语,右侧显示阿拉伯语,则需要切换添加内容的顺序。pdfCalligraph是封闭源代码;你可以得到30天的试用版。我从Maven下载了iText 7,没有任何问题:。安装pdfCalligraph:在上搜索pdfCalligraph。