我有这部分代码:
//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();
输出为空。
即使我试图添加简单的pdfpcell
,我得到了相同的结果,这是方法:
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);
答案 0 :(得分:2)
可能会遇到不同的问题。
"\u0644\u0648\u0631\u0627\u0646\u0633 \u0627\u0644\u0639\u0631\u0628"
以避免这样的问题。PdfPCell
和ColumnText
的上下文中支持从右到左书写和阿拉伯语连字。我发现您使用的是PdfPCell
,但我没有看到您在任何地方使用cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
。那是错的。fontNormal
,但您没有告诉我们您实际使用的是哪种字体。例如:如果您使用标准的Type1字体Helvetica,则不会显示任何文本,因为Helvetica不知道如何呈现阿拉伯文本。 修正案:您现在已更新了问题,表明您正在使用"arialuni.ttf"
。但是,您使用的编码错误:CP1252是Latin Alphabet的编码。您应该使用BaseFont.IDENTITY_H
。
更新:查看问题的更新以及额外的评论,我发现了两个主要错误。
"arialuni.ttf"
。这是字体文件,但不是字体名称。另外:你问FontFactory
这个字体,但是你告诉FontFactory
在哪里寻找字体吗?您确定FontFactory
可以找到c:/windows/fonts/
或文件arialuni.ttf
存储的任何目录。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);
结果如下(放大):