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

Rok*_*kas 5 java printing pdf 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

fab*_*ian 2

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

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);
}
Run Code Online (Sandbox Code Playgroud)

或者更接近您的实现:

for(int j=doc.getNumberOfPages()-1; j >= 0; j--){
    if(i!=j)
    {
        doc.removePage(j);                
    }
}
Run Code Online (Sandbox Code Playgroud)