Java 如何在使用PDFBox生成的pdf文件中显示阿拉伯字符
我试图在使用PDFBox生成的pdf文件中显示阿拉伯字符串,实际上我可以使用ICU4J和特定字体显示RTL中的阿拉伯字符串,但问题是: 即使字符串从RTL中正确显示,字符仍然是分开的,即使我尝试了一些字体,问题仍然没有解决。 以下是用于测试的代码片段:Java 如何在使用PDFBox生成的pdf文件中显示阿拉伯字符,java,pdf,pdfbox,arabic,icu4j,Java,Pdf,Pdfbox,Arabic,Icu4j,我试图在使用PDFBox生成的pdf文件中显示阿拉伯字符串,实际上我可以使用ICU4J和特定字体显示RTL中的阿拉伯字符串,但问题是: 即使字符串从RTL中正确显示,字符仍然是分开的,即使我尝试了一些字体,问题仍然没有解决。 以下是用于测试的代码片段: PDDocument document = new PDDocument(); PDPage page = new PDPage(PDRectangle.A4); document.addPage(page);
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
String dir = "resources/fonts/";
//I've used several fonts
PDType0Font farialUni = PDType0Font.load(document, new File(dir + "ARIALUNI.ttf"));
PDFont fArabType = PDType0Font.load(document, new File(dir + "arabtype.ttf"));
PDFont fMuka = PDType0Font.load(document, new File(dir + "Mukadimah.ttf"));
PDFont fFreeSans = PDType0Font.load(document, new File(dir + "FreeSans.ttf"));
PDFont fNoto = PDType0Font.load(document, new File(dir + "NotoNaskhArabic-Regular.ttf"));
PDPageContentStream stream = new PDPageContentStream(document, page);
stream.beginText();
stream.setFont(fNoto, 12);
stream.setLeading(12 * 1.2);
stream.newLineAtOffset(100, 800);
//Switch text order from to RTL
BiDiClass bidiClass = new BiDiClass();
String arabicText = "\u0627\u0644\u0633\u0644\u0627\u0645 \u0639\u0644\u064A\u0643\u0645 ";
//Use icu to inverse the order
String out = bidiClass.makeLineLogicalOrder(arabicText, true);
System.out.println(out);
stream.showText(out);
stream.newLine();
// ligature
stream.showText(out);
stream.endText();
stream.close();
document.save("example.pdf");
document.close();
此代码给出的结果字符串如下所示:
ال س ل ام ع ل ي ك م
注意:我在结果字符串中添加空格字符只是为了清楚起见。不支持。它在ApacheFop中受支持。谢谢,如果您有关于FOP的任何好资源,请从开始。关于PDFBox,实现这个的问题是没有一个开发人员懂阿拉伯语,因此我们无法确定结果是否是正确的阿拉伯语。它不受支持。它在ApacheFop中受支持。谢谢,如果您有关于FOP的任何好资源,请从开始。关于PDFBox,实现这一点的问题是没有一个开发人员懂阿拉伯语,因此我们无法确定结果是否正确。