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

时间:2014-02-02 13:15:11

标签: pdf pdfbox

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

代码:

    String pdfFile = "C:/AresEPOS_Home/Receipts/1391326264281.pdf";
    PDDocument document = null;
    try {
    document = PDDocument.load(pdfFile);
    //PDFont font = PDTrueTypeFont.loadTTF(document, "C:/Windows/Fonts/Arial.ttf");
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setJobName(new File(pdfFile).getName());
    PrintService[] printService = PrinterJob.lookupPrintServices();
    boolean printerFound = false;
    for (int i = 0; !printerFound && i < printService.length; i++) {
        if (printService[i].getName().indexOf("EPSON") != -1) {
            printJob.setPrintService(printService[i]);
            printerFound = true;
        }
    }
    document.silentPrint(printJob);
    } 
    finally {

      if (document != null) {
     document.close();
      }
}

1 个答案:

答案 0 :(得分:1)

本质上

您可以使用PDFBox 2.0.0-SNAPSHOT正确打印PDF,但不能使用PDFBox 1.8.4。因此,有问题的阿拉伯字体需要一个在PDFBox版本1.8.4之前尚不支持的功能,或者1.8.4中存在一个同时修复过的错误。

详情

使用PDFBox 1.8.4打印OP的文档会产生一些像这样的混乱输出

section from scan of 1.8.4 print-out

但是使用当前的PDFBox 2.0.0-SNAPSHOT打印它会产生这样的正确输出

section from scan of 2.0.0-SNAPSHOT print-out

在2.0.0-SNAPSHOT中,PDDocument方法printsilentPrint已被删除,所以原来的

document.silentPrint(printJob);

必须替换为

之类的东西
printJob.setPageable(new PDPageable(document, printJob));
printJob.print();