0

I have that part of code:

//Staff
// Title font
BaseFont titleBf = null;
try {
titleBf = BaseFont.createFont(BaseFont.TIMES_ROMAN,BaseFont.CP1252, BaseFont.EMBEDDED);
} catch (IOException e) {
System.out.println(e.getMessage());
}
com.itextpdf.text.Font titleFont = new com.itextpdf.text.Font(titleBf,24);
titleFont.setColor(new BaseColor(0, 0, 204));
/*
 * Pdf creation
*/
Document document = new Document();
PdfWriter.getInstance(document,new FileOutputStream(fc.getSelectedFile() + ".pdf"));
document.open();

/*
* Title
*/
Paragraph p = new Paragraph("مرحبا بكم",titleFont);
p.setSpacingAfter(20);
p.setAlignment(1); // Center
document.add(p);
//Staff
document.close();

The output was empty. Even when I tried to add simple pdfpcell, I got same result, here is the way:

com.itextpdf.text.Font fontNormal = FontFactory.getFont(
                ("arialuni.ttf"), BaseFont.CP1252, BaseFont.EMBEDDED,
                8, com.itextpdf.text.Font.NORMAL);

Chunk chunkArabic = new Chunk("مرحبا العالم", fontNormal);
infoTab.addCell(new PdfPCell(new Phrase(chunkArabic)));
document.add(infoTab);
4

1 回答 1

2

不同的问题可能在起作用。

  1. 编码:您将阿拉伯语文本放入源代码中。如果您使用错误的编码保存 Java 文件,则该文本将损坏。如果您使用错误的编码编译 Java 文件,该文本将会损坏。等等。我希望你能明白。像这样存储文字文本:"\u0644\u0648\u0631\u0627\u0646\u0633 \u0627\u0644\u0639\u0631\u0628"以避免这样的问题。
  2. 正如我的书第 11 章所述,从右到左书写和阿拉伯语连字仅在 和 的上下文中受PdfPCell支持ColumnText。我看到您正在使用PdfPCell,但我没有看到您cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);在任何地方使用。那是错误的。
  3. 您正在使用 object fontNormal,但您没有告诉我们您实际使用的是哪种字体。例如:如果您使用标准 Type1 字体 Helvetica,则不会显示任何文本,因为 Helvetica 不知道如何呈现阿拉伯文本。

修正:您现在已经更新了您的问题,表明您正在使用"arialuni.ttf". 但是,您使用了错误的编码: CP1252 是Latin Alphabet的编码。你应该使用BaseFont.IDENTITY_H.

更新:查看您的问题的更新以及额外的评论,我看到两个主要错误。

  1. 您假设字体的名称是"arialuni.ttf". 那是字体文件,但不是字体名称。另外:你在问FontFactory这个字体,但你有没有告诉在FontFactory哪里寻找字体?您确定FontFactory可以找到文件存储c:/windows/fonts/的任何目录吗?arialuni.ttf
  2. 您正在声明一种字体,但您没有使用它:使用默认字体Paragraph p = new Paragraph("\u062D\u064A\u0633\u0648");创建一个。Paragraph

这是有效的代码:

BaseFont bf = BaseFont.createFont(
    "c://windows/fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bf, 8);
PdfPTable table = new PdfPTable(1);
PdfPCell  cell = new PdfPCell(new Phrase("\u062D\u064A\u0633\u0648", font));
cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
table.addCell(cell);
document.add(table);

结果看起来像这样(放大): 在此处输入图像描述

于 2014-04-24T11:56:14.000 回答