当前位置: 首页 > 知识库问答 >
问题:

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

祁彬
2023-03-14

我想打印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);
}

我已经在代码中添加了这一行:系统。出来println(doc.getPageMap())

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


共有1个答案

相威
2023-03-14

您的代码不起作用,因为您没有考虑到删除页面也会更改索引较高的页面的索引,并减少页面数量。页面索引也是基于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);                
    }
}
 类似资料:
  • 问题内容: 我想使用PDFBox打印 由iText创建的 PDF文件 。我已经使用PDDocument类及其方法print()成功尝试了此操作。您可以在此处找到文档: http //pdfbox.apache.org/apidocs/。 (我正在使用此代码:) 方法print()很好用,但是 有一个问题:当我需要打印多个文件时,该方法要求我为每个文档选择打印机。 有什么办法只能设置一次打印机吗?

  • 问题内容: 我想读取捕获的异常的完整堆栈跟踪。 例如: 我想阅读“ … 23更多”,以了解异常的来源。 问题答案: 答案很简单,这些行已经在stacktrace中了:) 基本上,以下情况正在发生:

  • 我正在尝试加载PDF文档并打印它。整个过程都正常,但我收到了以下警告“警告:您没有关闭PDF文档”,我不明白为什么在我关闭文档后会出现这种情况。它出现在第11行(job.print();)。因为它是在打印时发生的,所以我无法调试它。

  • 我有一个PDF文件,我必须使用Java的Apache PDFBox库在PDF的每一页上打印页码。Pdf有一个包含动态内容的表格,我不知道我的内容需要在PDF上打印多少页,因为它包含一个包含动态数据的表格。 例如:-创建PDF时,文件可能有4或5页,在这种情况下,我必须在PDF页脚的每页上打印页码no。如下所示 假设内容将以PDF格式打印在4页上 第1页第1页,共4页 第2页第2页,共4页 在第3页

  • APIService: 在活动调用API中: