如何在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依賴項新增至您的專案中
  2. 使用 License.setLicenseKey() 設定您的許可證金鑰
  3. 使用 PdfDocument 載入或建立 PDF
  4. 撥打 pdf.print() 進行基於對話框的列印,或撥打 pdf.printWithoutDialog() 進行直接列印
  5. PDF 檔案將傳送到您選擇的或預設的印表機。

```java :title=快速入門 import IronPDF.*;

public class PrintPDFQuickstart { public static void main(String[] args) { // 套用您的許可證金鑰 License.setLicenseKey("您的授權金鑰");

    // 從 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 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 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 的建立 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。