gpt4 book ai didi

java - PdfPcell 阿拉伯字符串的空输出

转载 作者:行者123 更新时间:2023-12-02 05:54:04 25 4
gpt4 key购买 nike

我有这部分代码:

//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);

最佳答案

可能存在不同的问题。

  1. 编码:您将阿拉伯文本放入源代码中。如果您使用错误的编码保存 Java 文件,该文本将被损坏。如果使用错误的编码编译 Java 文件,该文本将被损坏。等等。我希望你能明白。像这样存储文字文本:“\u0644\u0648\u0631\u0627\u0646\u0633\u0627\u0644\u0639\u0631\u0628”以避免此类问题。
  2. Chapter 11 of my book 中所述、从右到左书写和阿拉伯连字仅在 PdfPCellColumnText 上下文中受支持。我发现您正在使用 PdfPCell,但我没有看到您在任何地方使用 cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);。这是错误的。
  3. 您正在使用对象 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);

结果如下所示(放大): enter image description here

关于java - PdfPcell 阿拉伯字符串的空输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23268045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com