PDFBOX打印:打印的PDF包含PDF中阿拉伯文本的垃圾字符

PDFBOX打印:打印的PDF包含PDF中阿拉伯文本的垃圾字符,pdf,pdfbox,Pdf,Pdfbox,我有一个包含阿拉伯文本和水印的PDF文件。我正在使用PDFBox从Java打印PDF。我的问题是PDF打印质量很高,但是所有带有阿拉伯字符的行都有垃圾字符。有人能帮忙吗 代码: String pdfFile=“C:/AresEPOS_Home/Receipts/1391326264281.pdf”; PDDocument文件=null; 试一试{ document=PDDocument.load(pdfFile); //PDFont font=PDTrueTypeFont.loadTTF(文档

我有一个包含阿拉伯文本和水印的PDF文件。我正在使用PDFBox从Java打印PDF。我的问题是PDF打印质量很高,但是所有带有阿拉伯字符的行都有垃圾字符。有人能帮忙吗

代码:

String pdfFile=“C:/AresEPOS_Home/Receipts/1391326264281.pdf”;
PDDocument文件=null;
试一试{
document=PDDocument.load(pdfFile);
//PDFont font=PDTrueTypeFont.loadTTF(文档,“C:/Windows/Fonts/Arial.ttf”);
PrinterJob printJob=PrinterJob.getPrinterJob();
setJobName(新文件(pdfFile.getName());
PrintService[]PrintService=PrinterJob.lookupPrintServices();
布尔printerFound=false;
对于(int i=0;!printerFound&&i
本质上 您的PDF可以使用PDFBox 2.0.0-SNAPSHOT正确打印,但不能使用PDFBox 1.8.4。因此,问题中的阿拉伯语字体需要PDFBox版本1.8.4之前不支持的功能,或者1.8.4中存在一个bug,该bug已被修复

细节 使用PDFBox 1.8.4打印OP的文档会导致一些像这样的混乱输出

但是使用当前的PDFBox 2.0.0-SNAPSHOT打印它会得到这样一个正确的输出

在2.0.0-SNAPSHOT中,
PDDocument
方法
print
silentPrint
已被删除,因此原始

document.silentPrint(printJob);
必须被类似的东西所取代

printJob.setPageable(new PDPageable(document, printJob));
printJob.print();

哪个pdfbox版本,你的代码是什么,你有pdf示例吗?谢谢你的评论:pdfbox版本:pdfbox-1.8.4以下是我的代码:你能提供pdf示例来重现这个问题吗?谢谢mkl!。我很高兴提供示例PDF,但我相信,我不能附加在这里。我可以发送到您的电子邮件或您可以提供一些链接,我可以张贴。感谢大多数人经常在这里使用他们的Google或drop box帐户共享这些示例。如果您不可能这样做,您可以在我的个人资料中找到一个电子邮件地址。Osome,谢谢mkl,我将获得PDFBox 2.0.0-SNAPSHOT,并尝试在我的应用程序中进行测试。再次感谢。如果您对某个问题的答案感到满意,请接受它(单击答案左侧的标记)。您好,mkl,PDFBox2.0.0-SNAPSHOT的最低要求是java1.6,我的应用程序是1.5。如果你能对此发表评论,有没有办法让我用1.5.Gr8编译这个。谢谢,恐怕我不知道(在工作中,我们很长一段时间都被限制在1.4,并从那里直接切换到1.6。因此,我对1.5的具体内容没有真正的第一手经验)。您可能希望将此作为一个问题。@mkl嘿,很抱歉劫持此评论线程。。。但是,想不想确切地解释一下如何使用无声打印?在2.0快照中没有类似于
PDPageable
的类。我尝试创建一个
PDFPrinter
,在构造函数中使用文档,然后对其调用
silentprint()
。。。导致堆栈溢出,因为我不在Mac OSX的主cocoa线程(wat?)上。silentPrint的想法不是不引起任何GUI交互等。请告知帮助。当做
printJob.setPageable(new PDPageable(document, printJob));
printJob.print();