PDFBOX打印问题:打印的PDF意外旋转90度且尺寸不正确

时间:2014-05-13 06:33:30

标签: java pdfbox

我使用PDFBox 2.0.0-SNAPSHOT在打印机上打印PDF(硬件和虚拟),打印工作但打印的PDF意外旋转了90度,尺寸不正确。

example PDF download link

printed result PDF download link

以下是我的代码段:

PrinterJob printJob = PrinterJob.getPrinterJob();
PrintService prsvc = getPrinterServiceByName(PrinterName);
printJob.setPrintService(prsvc);

PDDocument pdfdoc = PDDocument.load(PdfFile);
printJob.setPageable(new PDPageable(pdfdoc, printJob));

printJob.print();
pdfdoc.close();

现在我已经更新了最新的PDFBox 2.0.0-SNAPSHOT版本, 并使用PDFPrinter构造函数打印PDF。并添加ImageableArea以使用自定义格式定义纸张可成像区域。但问题仍然存在。见下文:

PrinterJob printJob = PrinterJob.getPrinterJob();
PrintService prsvc = getPrinterServiceByName(PrinterName);
printJob.setPrintService(prsvc);

PDDocument  document = PDDocument.load(PdfFile);

Paper paper  = new Paper();
paper.setSize(1005.0,396.0);  //354.5 x 139.7 mm
paper.setImageableArea(0, 0, 1005.0, 396.0); //354.5 x 139.7 mm


//result 139.7 mm x 354.5 mm. Rotated 90 degrees
PDFPrinter printer = new PDFPrinter(document,printJob,Scaling.ACTUAL_SIZE,Orientation.PORTRAIT,paper,false,0);

//result 139.7 mm x 354.5 mm. Rotated 90 degrees and context inverted.
//PDFPrinter printer = new PDFPrinter(document,printJob,Scaling.ACTUAL_SIZE,Orientation.LANDSCAPE,paper,false,0); 

//same result with setting Orientation.LANDSCAPE
//PDFPrinter printer = new PDFPrinter(document,printJob,Scaling.ACTUAL_SIZE,Orientation.AUTO,paper,false,0); 

PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(printer.getPageable());

printer.silentPrint();

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDFPageable(document));
job.print();

请参阅PDFBox 2.0.0: https://issues.apache.org/jira/browse/PDFBOX-2844