Java PdfPcell阿拉伯字符串的空输出
我有那部分代码:Java PdfPcell阿拉伯字符串的空输出,java,pdf,arabic,pdfptable,Java,Pdf,Arabic,Pdfptable,我有那部分代码: //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 = n
//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();
输出为空。
即使我尝试添加simplepdfpcell
,我也得到了相同的结果,方法如下:
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);
不同的问题可能在起作用
“\u0644\u0648\u0631\u0627\u0646\u0633\u0627\u0644\u0639\u0631\u0628”
,以避免类似问题PdfPCell
和ColumnText
的上下文中受支持。我看到您使用的是PdfPCell
,但我没有看到您使用的是cell.setRunDirection(PdfWriter.RUN\u DIRECTION\RTL)代码>任何地方。那是错误的
fontNormal
,但您没有告诉我们您实际使用的字体。例如:如果您使用的是标准的Type1字体Helvetica,则不会显示任何文本,因为Helvetica不知道如何呈现阿拉伯语文本“arialuni.ttf”
。但是,您使用了错误的编码:CP1252是的编码。您应该使用BaseFont.IDENTITY\u H
更新:查看您问题的更新以及额外的评论,我发现两个主要错误
“arialuni.ttf”
。这是字体文件,但不是字体名称。另外:您向FontFactory
询问此字体,但您是否告诉FontFactory
在哪里查找字体?您确定FontFactory
可以找到c:/windows/fonts/
或存储文件arialuni.ttf
的任何目录吗段落p=新段落(“\u062D\u064A\u0633\u0648”)代码>使用默认字体创建段落
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);
结果如下所示(放大):
谢谢,我改为
段落p=新段落(“\u062D\u064A\u0633\u0648”);p.第(20)段之后的设定值;p.setAlignment(1);//中心文件。添加(p)代码>但在vainI中,我将为您提供一个示例。给我一些时间。你仍然有两个主要错误,清楚地表明你忽略了文档(这是令人沮丧的)。我会更新我的答案。我看到一些让我感觉做了正确的事情的文档;我这样尝试:BaseFont bf0=null;尝试{bf0=BaseFont.createFont(“arialuni.ttf”,BaseFont.IDENTITY,BaseFont.EMBEDDED);}catch(IOException e){e.printStackTrace();}段落p=新段落(“\u062D\u064A\u0633\u0648”,new com.itextpdf.text.Font(bf0,10));p、 在(20)之后设置垫片;文件.添加(p)代码>