PDFBox的。 Java:如何只打印一页PDF而不是完整文档?

时间:2015-12-16 06:44:03

标签: java pdf printing pdfbox

我想打印pdf文件的特定页面。在示例中我有4页的pdf,我想要打印第三页。我正在使用Apache PDFBox lib。我试图删除我想要打印的其他页面,但它现在打印除了我想要打印的所有其他页面...有什么帮助吗?

我写的函数代码是:

void printPDFS(String fileName, int i) throws PrinterException, IOException{
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.getPrintService();          
   // String test = "\\\\192.168.5.232\\failai\\BENDRAS\\DHL\\test2.pdf";
    PrinterJob job = PrinterJob.getPrinterJob();
    job.setPrintService(printJob.getPrintService());
    PDDocument doc = PDDocument.load(fileName);

    for(int j=1;j<=doc.getNumberOfPages();j++){
        if(i!=j)
        {
            doc.removePage(j);                
        }
     }
   doc.silentPrint(job);
}

我已将此行添加到代码中:System.out.println(doc.getPageMap());

控制台告诉我:{13,0=4, 1,0=2, 7,0=3, 27,0=1}  这是什么意思?

1 个答案:

答案 0 :(得分:2)

您的代码不起作用,因为您没有考虑删除页面也会更改较高索引处的页面索引并减少页面数量。页面索引也是从0开始的。删除这样的页面,它应该工作:

+------+------------+
| Team | FinalCount |
+------+------------+
| A    |          2 |
| B    |          2 |
| MUM  |          1 |
| RR   |          1 |
+------+------------+

或者更接近您的实施:

i = Math.max(-1, Math.min(i, doc.getNumberOfPages()));

// remove all pages with indices higher than i
for (int j = doc.getNumberOfPages()-1; j > i; j--) {
    doc.removePage(j);
}

// remove all pages with indices lower than i
for (int j = i-1; j >= 0; j--) {
    doc.removePage(j);
}