如何在Java中列印PDF文件

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

IronPDF for Java 可讓您在有或沒有使用者互動的情況下,以程式化的方式列印 PDF 檔案。 您可以在 Java 應用程式中直接將 PDF 傳送至實體印表機、控制複本和頁面範圍等列印設定,以及自動化文件列印工作流程。 無論您是要建立企業文件管理系統或是自動化發票產生,IronPDF 都能提供 列印功能,並與 Java 的列印基礎架構整合。

快速入門:在 Java 中列印 PDF 檔案

1.在您的專案中加入 IronPdf 相依性 2.使用 License.setLicenseKey() 設定您的授權金鑰 3.使用 PdfDocument 載入或建立 PDF 4.呼叫 pdf.print() 以進行對話式列印,或呼叫 pdf.printWithoutDialog() 以進行直接列印。 5.PDF 將傳送至您所選擇或預設的印表機

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

public class 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());
        }
    }
}

您會看到一個列印對話框,可選擇印表機和選項,如下所示。

列印對話框,顯示已選取的 Adobe 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

無聲列印有哪些優點?

無聲列印可消除使用者提示,實現完全自動化的工作流程。 此方法適用於需要一致輸出至特定印表機的批次處理、伺服器端列印或 kiosk 應用程式。 主要優點包括

  • 速度:無需使用者互動,意味著大批量的處理速度更快
  • 一致性:每次應用相同的列印設定
  • 自動化:適用於排程任務和背景服務
  • 整合:無縫整合至現有的自動化工作流程中

實施無聲列印時,請考慮使用 IronPDF 的 compression 功能,在將大文件傳送至印表機之前優化檔案大小,減少列印時間和資源使用。

何時直接列印最有效?

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 檔案,並使用互動或自動列印的方式將其傳送至您的印表機。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。

準備好開始了嗎?
版本: 2026.2 剛剛發布