PDF框。 Java: 如何只打印一页 PDF 而不是完整文档?
PDFBox. Java: How to print only one page of PDF instead of full document?
我想打印pdf文件的特定页面。例如,我有 4 页的 pdf,我想打印第三页。我正在使用 Apache PDFBox 库。我尝试删除除我要打印的页面之外的其他页面,但它现在打印除我想要打印的页面之外的所有其他页面...有帮助吗?
这是我写的函数代码:
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}
这是什么意思?
您的代码不起作用,因为您没有考虑到删除页面还会更改索引较高的页面的索引并减少页面数量。页面索引也是从 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);
}
或者更接近您的实现:
for(int j=doc.getNumberOfPages()-1; j >= 0; j--){
if(i!=j)
{
doc.removePage(j);
}
}
我想打印pdf文件的特定页面。例如,我有 4 页的 pdf,我想打印第三页。我正在使用 Apache PDFBox 库。我尝试删除除我要打印的页面之外的其他页面,但它现在打印除我想要打印的页面之外的所有其他页面...有帮助吗?
这是我写的函数代码:
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}
这是什么意思?
您的代码不起作用,因为您没有考虑到删除页面还会更改索引较高的页面的索引并减少页面数量。页面索引也是从 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);
}
或者更接近您的实现:
for(int j=doc.getNumberOfPages()-1; j >= 0; j--){
if(i!=j)
{
doc.removePage(j);
}
}