如何在 Java 中打印 PDF 文件

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF for Java 使您能够在有或没有用户交互的情况下以编程方式打印 PDF 文件。 您可以将 PDF 直接发送到物理打印机,控制打印设置(如副本和页面范围),并在 Java 应用程序中自动执行文档打印工作流。 无论您是要构建企业文档管理系统还是自动生成发票,IronPDF 都能提供 打印功能,与 Java 的打印基础架构相集成。

快速入门:在 Java 中打印 PDF 文件

1.在您的项目中添加 IronPdf 依赖关系

  1. 使用 License.setLicenseKey() 设置您的许可证密钥
  2. 使用 PdfDocument 加载或创建 PDF
  3. 拨打 pdf.print() 进行基于对话框的打印,或拨打 pdf.printWithoutDialog() 进行直接打印
    5.PDF 将发送到您选择或默认的打印机上

```java :title=快速入门 import com.ironsoftware.IronPdf.*;

公共类 PrintPDFQuickstart { public static void main(String[] args) { // 申请许可证密钥 License.setLicenseKey("YOUR-LICENSE-KEY");

    // 从 HTML 创建 PDF
    PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Invoice #12345</h1><p>Total: $100.00</p>");

    // 带对话框打印(交互式)
    pdf.print();

    // 或无对话框打印(自动)
    // pdf.printWithoutDialog();
}

}


## 如何通过用户交互打印 PDF?

首先,加载要打印的 PDF 文档。 `print` 方法会打开标准打印对话框,允许您在打印前选择打印机、页面范围和其他选项。 这种方法集成了操作系统的本地打印功能,确保与所有已安装的打印机兼容。 下面是一个完整的例子:

```java
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import java.io.IOException;

public class InteractivePrinting {
    public static void main(String[] args) {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        try {
            // Option 1: Create a new PDF from HTML
            PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Monthly Report</h1><p>Sales data...</p>");

            // Option 2: Load an existing PDF file
            // PdfDocument pdf = PdfDocument.fromFile(Paths.get("report.pdf"));

            // Print the PDF with a print dialog for user interaction
            pdf.print();

            // The print dialog handles printer selection, copies, page range, etc.
            System.out.println("Print job sent to selected printer");

        } catch (IOException e) {
            System.err.println("Error printing PDF: " + e.getMessage());
        }
    }
}

您将看到一个打印对话框来选择打印机和选项,如下图所示。

打印对话框,显示已选择 Adob​​e PDF 打印机,以及打印范围和复制选项

为什么使用基于对话框的打印?

基于对话框的打印可让用户控制打印设置,如打印机选择、页面范围、份数和纸张方向。 这种方法非常适合用户需要灵活打印选项的应用程序。 打印对话框还提供了对打印机特定功能的访问,如双面打印、颜色设置和纸盘选择。 对于更高级的打印场景,请结合 IronPDF 的 PDF 生成设置,以确保最佳输出质量。

何时选择交互式印刷?

在构建桌面应用程序、文档管理系统或任何用户需要在将文档发送到打印机之前查看和调整打印设置的场景时,请使用 print() 方法。 这种方法尤其适用于以下情况

  • 具有打印预览功能的桌面应用程序
  • 用户选择特定页面的文档工作流程系统
  • 不同打印机有不同用途的办公环境
  • 打印敏感文件前需要用户确认的应用程序

交互式打印还允许用户使用虚拟打印机保存为 PDF 格式,使其成为同时满足物理和数字输出需求的多功能工具。 对于需要在打印前合并多个 PDF 文件的应用程序,应先合并文档,然后通过打印对话框向用户展示统一的结果。


如何在没有用户提示的情况下打印 PDF?

printWithoutDialog 方法绕过打印对话框,直接将文档发送到默认打印机。 这种方法适用于不需要用户交互的自动化场景。 这种无声打印功能对于需要一致输出的服务器端应用程序、批处理系统和自动化工作流程至关重要。

import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.LocalDateTime;

public class AutomatedPrinting {
    public static void main(String[] args) {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        try {
            // Create a batch of invoices
            for (int i = 1; i <= 10; i++) {
                String html = String.format(
                    "<h1>Invoice #%d</h1>" +
                    "<p>Date: %s</p>" +
                    "<p>Amount: $%.2f</p>",
                    i, LocalDateTime.now(), i * 100.0
                );

                // Render HTML to PDF
                PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);

                // Print directly without showing dialog
                pdf.printWithoutDialog();

                // Log the action
                System.out.println("Printed invoice #" + i);

                // Optional: Save a copy for records
                pdf.saveAs(Paths.get("invoices/invoice_" + i + ".pdf"));
            }

        } catch (IOException e) {
            System.err.println("Printing error: " + e.getMessage());
        }
    }
}
import com.ironsoftware.ironpdf.License;
import com.ironsoftware.ironpdf.PdfDocument;
import java.io.IOException;
import java.nio.file.Paths;
import java.time.LocalDateTime;

public class AutomatedPrinting {
    public static void main(String[] args) {
        // Set the license key for IronPDF
        License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01");

        try {
            // Create a batch of invoices
            for (int i = 1; i <= 10; i++) {
                String html = String.format(
                    "<h1>Invoice #%d</h1>" +
                    "<p>Date: %s</p>" +
                    "<p>Amount: $%.2f</p>",
                    i, LocalDateTime.now(), i * 100.0
                );

                // Render HTML to PDF
                PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);

                // Print directly without showing dialog
                pdf.printWithoutDialog();

                // Log the action
                System.out.println("Printed invoice #" + i);

                // Optional: Save a copy for records
                pdf.saveAs(Paths.get("invoices/invoice_" + i + ".pdf"));
            }

        } catch (IOException e) {
            System.err.println("Printing error: " + e.getMessage());
        }
    }
}
JAVA

静音打印有哪些优点?

无声打印消除了用户提示,实现了完全自动化的工作流程。 这种方法适用于批处理、服务器端打印或需要向特定打印机进行一致输出的自助终端应用程序。 主要优势包括

  • 速度:无用户交互意味着大批量处理速度更快
  • 一致性:每次应用相同的打印设置
  • 自动化:适用于计划任务和后台服务
  • 集成:无缝集成到现有的自动化工作流程中

在实施静默打印时,请考虑使用 IronPDF 的压缩功能,在向打印机发送大型文档之前优化文件大小,从而减少打印时间和资源占用。

什么时候直接打印最有效?

对于自动化文档工作流程、计划打印作业或必须在无需人工干预的情况下进行打印的后端服务,请使用 printWithoutDialog()。 这种方法可确保始终如一的无人值守操作。 常见的用例包括:

  • 销售点系统:交易后自动打印收据
  • 报告生成:安排和打印每日/每周报告
  • 标签打印:在仓库管理系统中打印发货标签
  • 文档处理:批量打印法律文档或合同

对于需要在打印前添加水印数字签名的应用程序,请先处理 PDF,然后直接发送到打印机。

如何处理自动打印中的打印错误?

在没有对话框的情况下进行打印时,应执行适当的错误处理,以捕捉打印机可用性问题、卡纸或连接问题。 用 try-catch 块封装打印调用,优雅地处理异常。 下面是一个强大的错误处理示例:

import com.ironsoftware.IronPdf.*;
import java.io.IOException;
import java.util.logging.*;

public class RobustPrintHandler {
    private static final Logger logger = Logger.getLogger(RobustPrintHandler.class.getName());

    public static void safePrint(PdfDocument pdf, int maxRetries) {
        int attempts = 0;
        boolean success = false;

        while (attempts < maxRetries && !success) {
            try {
                attempts++;
                pdf.printWithoutDialog();
                success = true;
                logger.info("Print successful on attempt " + attempts);

            } catch (Exception e) {
                logger.warning("Print attempt " + attempts + " failed: " + e.getMessage());

                if (attempts < maxRetries) {
                    try {
                        // Wait before retry
                        Thread.sleep(2000);
                    } catch (InterruptedException ie) {
                        Thread.currentThread().interrupt();
                    }
                } else {
                    // Max retries reached, handle failure
                    logger.severe("Print failed after " + maxRetries + " attempts");
                    // Implement fallback strategy (save to file, notify admin, etc.)
                }
            }
        }
    }
}
import com.ironsoftware.IronPdf.*;
import java.io.IOException;
import java.util.logging.*;

public class RobustPrintHandler {
    private static final Logger logger = Logger.getLogger(RobustPrintHandler.class.getName());

    public static void safePrint(PdfDocument pdf, int maxRetries) {
        int attempts = 0;
        boolean success = false;

        while (attempts < maxRetries && !success) {
            try {
                attempts++;
                pdf.printWithoutDialog();
                success = true;
                logger.info("Print successful on attempt " + attempts);

            } catch (Exception e) {
                logger.warning("Print attempt " + attempts + " failed: " + e.getMessage());

                if (attempts < maxRetries) {
                    try {
                        // Wait before retry
                        Thread.sleep(2000);
                    } catch (InterruptedException ie) {
                        Thread.currentThread().interrupt();
                    }
                } else {
                    // Max retries reached, handle failure
                    logger.severe("Print failed after " + maxRetries + " attempts");
                    // Implement fallback strategy (save to file, notify admin, etc.)
                }
            }
        }
    }
}
JAVA

高级打印注意事项

在实施自动打印解决方案时,请考虑以下最佳实践:

1.打印机监控:发送作业前检查打印机状态 2.队列管理:监控打印队列以避免过载 3.记录:出于审计目的跟踪所有打印作业 4.回退选项:具有替代打印机或保存到文件选项

对于复杂的打印需求,请探索 IronPDF for Java 的创建 PDF 表单在打印前提取特定页面的功能,让您只打印必要的内容并节省资源。

常见问题解答

如何在 Java 中使用打印对话框打印 PDF 文件?

要在 Java 中打印带有对话框的 PDF,请使用 IronPDF for Java 的 print() 方法。首先使用 PdfDocument.fromFile() 加载 PDF 或使用 renderHtmlAsPdf() 创建 PDF,然后调用 pdf.print()。这会打开标准打印对话框,用户可以在打印前选择打印机、页面范围和其他设置。

我能否在没有用户交互的情况下自动打印 PDF?

是的,IronPDF 为自动打印提供了 printWithoutDialog() 方法。该方法可直接将 PDF 文件发送到默认打印机,而不会显示任何对话框,非常适合批处理或服务器端应用程序,因为在这些应用中不可能进行用户交互。

在 Java 中打印 PDF 的前提条件是什么?

您需要将 IronPDF 作为依赖项添加到 Java 项目中,并使用 License.setLicenseKey() 设置有效的许可证密钥。该库与 Java 的打印基础架构集成,可与操作系统上安装的所有打印机配合使用。

如何在打印前从 HTML 创建 PDF?

使用 IronPDF 的 PdfDocument.renderHtmlAsPdf() 方法将 HTML 内容转换为 PDF 文档。您可以直接传递 HTML 字符串,如 renderHtmlAsPdf("

Invoice

Total: $100

") ,然后立即打印生成的 PDF。

print() 和 printWithoutDialog() 方法有什么区别?

print() 方法会打开一个交互式打印对话框,允许用户配置设置,而 printWithoutDialog() 则直接将 PDF 文件发送到默认打印机,无需任何用户界面。在桌面应用程序中选择 print() 方法,在自动工作流中选择 printWithoutDialog() 方法。

我可以加载现有的 PDF 文件进行打印吗?

是的,使用 PdfDocument.fromFile(Paths.get("yourfile.pdf")) 加载现有的 PDF 文档。IronPDF 可以打开任何标准的 PDF 文件,并使用交互式或自动打印方法将其发送到您的打印机。

Darrius Serrant
全栈软件工程师(WebOps)

Darrius Serrant 拥有迈阿密大学的计算机科学学士学位,目前在 Iron Software 担任全栈 WebOps 市场工程师。从小就被编码吸引,他认为计算机既神秘又易于接触,使其成为创意和问题解决的理想媒介。

在 Iron Software,Darrius 喜欢创造新事物,并简化复杂概念以使其更易理解。作为我们常驻的开发者之一,他还自愿教授学生,与下一代分享他的专业知识。

对于 Darrius 来说,他的工作令人满意,因为它被重视并产生真正的影响。

准备开始了吗?
版本: 2026.3 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。