如何在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的列印基礎設施無縫整合。 您也可以與其他PDF任務一起使用,如數位簽署PDF將影像轉換成PDF,作為更廣泛的文件處理流程的一部分。

IronPDF for Java列印工作流程顯示PDF文件被程式化地發送到印表機

快速開始:在Java中列印PDF文件

  1. 將IronPDF相依性新增到您的專案
  2. 使用License.setLicenseKey()設定您的授權金鑰
  3. 使用PdfDocument載入或建立PDF
  4. 呼叫pdf.printWithoutDialog()以進行直接列印
  5. PDF將被發送到您所選或預設的印表機
 :title=Quickstart
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/quickstart.java
import com.ironsoftware.ironpdf.*;

public class PrintPDFQuickstart {
    public static void main(String[] args) {
        // Apply your license key
        License.setLicenseKey("YOUR-LICENSE-KEY");

        // Create a PDF from HTML
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Invoice #12345</h1><p>Total: $100.00</p>");

        // Print with dialog (interactive)
        pdf.print();

        // Or print without dialog (automated)
        // pdf.printWithoutDialog();
    }
}
 :title=Quickstart
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/quickstart.java
import com.ironsoftware.ironpdf.*;

public class PrintPDFQuickstart {
    public static void main(String[] args) {
        // Apply your license key
        License.setLicenseKey("YOUR-LICENSE-KEY");

        // Create a PDF from HTML
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Invoice #12345</h1><p>Total: $100.00</p>");

        // Print with dialog (interactive)
        pdf.print();

        // Or print without dialog (automated)
        // pdf.printWithoutDialog();
    }
}
JAVA

如何以使用者互動方式列印PDF?

載入您想列印的PDF文件,然後呼叫pdf.print()。 該方法會開啟標準列印對話框,允許使用者選擇印表機、頁面範圍以及其他選項後再發送工作。 這與操作系統的原生列印功能整合,因此每個安裝在機器上的印表機(包括網路和虛擬印表機)都會自動出現在對話框中。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/interactive-printing.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();

            System.out.println("Print job sent to selected printer");

        } catch (IOException e) {
            System.err.println("Error printing PDF: " + e.getMessage());
        }
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/interactive-printing.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();

            System.out.println("Print job sent to selected printer");

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

列印對話框在將工作發送到印表機之前接受使用者選擇的設定。

列印對話框顯示IronPDF Java與系統列印對話框的整合,顯示印表機選擇、頁面範圍和複印數量選項

何時應使用對話框基礎的列印?

對話框基礎的列印讓使用者能夠控制列印選項,如印表機選擇、頁面範圍、份數和紙張方向。 這種方法適合桌面應用,文件管理系統,或需要使用者在發送工作前檢查和調整設定的任何場景。

常見情境需要print()

  • 具有列印預覽功能的桌面應用
  • 使用者選擇特定頁面範圍的文件工作流系統
  • 不同印表機用於不同目的的辦公環境
  • 列印敏感文件前需要使用者確認的應用

對於需要在列印前合併多個PDF的應用,請先合併文件,然後將合併結果傳遞給列印對話框。 查看IronPDF的HTML轉PDF教程(Java),以獲得從網頁內容生成列印準備好的PDF的指南。

列印對話框能曝光哪些配置?

標準的Java列印對話框顯示OS層級的完整列印屬性集,包括頁面方向、媒介大小、列印品質和整理順序。 IronPDF依頼於底層javax.print API進行屬性交涉,因此可用選項取決於每個印表機報告的功能。 在Windows上,原生Win32列印對話框將顯示; 在Linux 和 macOS上,使用GTK或Cocoa對話框。 您的Java應用不需要自訂UI程式碼,因為OS會自動處理呈現。


如何無使用者提示列印PDF?

printWithoutDialog()方法繞過列印對話框,將文件直接發送到預設印表機。 在流程中的任何時間點都不需要使用者互動。 這使其成為伺服器端應用、批量處理系統和計劃排程工作流程的正確選擇, 因為一致且無人值守的輸出是目標。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/automated-printing.java
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();

                System.out.println("Printed invoice #" + i);

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

        } catch (IOException e) {
            System.err.println("Printing error: " + e.getMessage());
        }
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/automated-printing.java
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();

                System.out.println("Printed invoice #" + i);

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

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

上面的迴圈從HTML模板渲染每個發票,並立刻發送到預設印表機。 因為沒有對話框阻塞迴圈,整個批次在沒有中斷的情況下完成。

在將自動化列印部署到伺服器之前,確認在目標機器上已配置預設印表機。在無頭的Linux伺服器上,如CUPS或PDF列印到文件這類虛擬印表機能很好的工作。

無提示列印的好處是什麼?

無提示列印消除了使用者提示,可實現完全自動化的工作流程。 主要優勢是:

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

在處理大型文件時,先應用IronPDF的Java PDF壓縮來降低文件大小,在發送到印表機之前,這能減少列印時間和資源使用。

何時直接列印最有效?

對於需要自動化文件工作流程、計劃排程列印工作或後端服務,自動且無需人工介入的情況,使用printWithoutDialog()。 常見的使用案例包括:

  • 銷售點系統:交易後自動列印收據
  • 報告生成:計劃列印每日或每週報告
  • 標籤列印:在倉庫管理系統中列印運輸標籤
  • 文件處理:批量列印合約或法律文件

對於需要在Java中新增浮水印或蓋章內容的應用,先處理PDF,然後直接將其發送到印表機。


Icon Quote related to 何時直接列印最有效?

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic related to 何時直接列印最有效?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to 何時直接列印最有效?

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle related to 何時直接列印最有效?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to 何時直接列印最有效?

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones related to 何時直接列印最有效?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何處理自動化工作流程中的列印錯誤?

在無對話框列印時,適當的錯誤處理是不可或缺的。 印表機可用性問題、卡紙和連接問題都會中斷批次。 將列印呼叫包裹在try-catch塊中並實施重試策略,可在發生短暫錯誤時保持工作流程運行。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/retry-print-handler.java
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 retrying
                        Thread.sleep(2000);
                    } catch (InterruptedException ie) {
                        Thread.currentThread().interrupt();
                    }
                } else {
                    // Max retries reached
                    logger.severe("Print failed after " + maxRetries + " attempts");
                }
            }
        }
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/print-pdf/retry-print-handler.java
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 retrying
                        Thread.sleep(2000);
                    } catch (InterruptedException ie) {
                        Thread.currentThread().interrupt();
                    }
                } else {
                    // Max retries reached
                    logger.severe("Print failed after " + maxRetries + " attempts");
                }
            }
        }
    }
}
JAVA

maxRetries次,每次重試間隙為兩秒。每次嘗試都會記錄,以便您能將故障追溯到特定任務。 一旦達到重試限制,該方法會記錄一條嚴重消息。 從那裡,您的應用程式可以將文件保存到磁碟、列入佇列等待以後處理,或通知管理員。

重要Java標準程式庫中的javax.print API, 支持IronPDF的列印整合。 對於低階的印表機發現和屬性配置,請查閱Oracle網站上的Java SE javax.print文件。

應遵循哪些記錄和監控實踐?

當實施生產列印工作流程時,考慮以下實踐:

  1. 印表機監控:發送工作前檢查印表機狀態,以避免在離線裝置上排隊工作
  2. 佇列管理:監控列印佇列,以防止對單一印表機造成負擔
  3. 審計記錄:記錄每個列印工作(時間戳,文件名稱,印表機以及結果),以供合規用途
  4. 備援選項:在主要印表機不可用時,設定其他印表機或保存到文件的備援方案

對於複雜的列印需求,探索IronPDF的功能以在Java中建立PDF表單或從HTML模板生成文件Apache PDFBox專案也是理解Java如何與底層PDF規範互動的有用參考。

應如何結構化列印工作佇列?

對於高吞吐量系統,分離列印工作提交與執行保護印表機不被飽和。 生產者-消費者模式,應用程式將PdfDocument物件放入佇列,專用列印執行緒從其中取出並發送,這使主應用即使在負荷下也保持快速回應。 Java的queue.take(),接收到文件後列印並記錄結果。 該模式還使新增優先順序級別、速率限制或耗盡重試預算的死信佇列變得簡單。


Java列印PDF的下一步是什麼?

本指南涵蓋了兩種方法:使用printWithoutDialog()進行靜默列印,適合自動批次工作流程。 兩種方法都與Java的標準列印基礎設施整合,可以與任何安裝在操作系統上的印表機一起使用。

要將IronPDF新增到您的專案並開始列印,請啟動您的免費試用。 不需要信用卡。 當您準備部署時,請查看您的團隊或組織的授權選項

準備好看看IronPDF還能做什麼嗎? 在此處查看完整教程頁面:Java列印PDF教程

常見問題

如何使用IronPDF在Java中使用列印對話框列印PDF檔案?

使用PdfDocument.fromFile()載入您的PDF,或使用renderHtmlAsPdf()建立一個,然後調用pdf.print()。這將打開標準系統列印對話框,使用者可以選擇列印機、頁面範圍、份數和其他設置,然後再派送工作。

如何在Java中不顯示對話框列印PDF?

使用IronPDF的printWithoutDialog()方法。它將PDF直接發送到預設列印機,無需使用者介入,適合批次處理、伺服器端服務和定時列印任務。

使用IronPDF在Java中列印PDF檔案的前提條件是什麼?

通過Maven或Gradle將IronPDF新增為Java專案的依賴項,然後在列印前呼叫License.setLicenseKey()。程式庫與Java的javax.print基礎架構整合,並與安裝在您的作業系統上的所有列印機協作。

如何在列印之前從HTML生成PDF?

使用HTML字元串或URL呼叫PdfDocument.renderHtmlAsPdf()。該方法返回一個PdfDocument,您可以立即傳遞給print()printWithoutDialog(),無需事先儲存到磁碟。

在IronPDF for Java中,print()和printWithoutDialog()有什麼區別?

print()打開一個互動系統對話框,讓使用者可以在執行工作前選擇列印機並配置設置。printWithoutDialog()跳過所有對話框,並將工作直接發送到預設列印機。在桌面應用程式中使用print(),在自動化或伺服器端工作流程中使用printWithoutDialog()

我能否載入現有的PDF檔案並使用IronPDF列印?

可以。使用PdfDocument.fromFile(Paths.get("yourfile.pdf"))載入任何標準PDF,然後呼叫任何一種列印方法。IronPDF支援從檔案路徑、位元組陣列和輸入流載入PDF。

如何在Java批次工作流程中處理列印錯誤和重試?

printWithoutDialog()包裹在try-catch區塊中。在失敗時,記錄錯誤,並在短暫的暫停後使用Thread.sleep()重試。追踪嘗試計數器,當達到最大重試次數時,記錄一條嚴重級別訊息,以便監控系統可以提示持續失敗的情況。

IronPDF for Java能否在無頭Linux伺服器上運作?

是的。在無頭伺服器上,配置如CUPS的虛擬列印機,具有PDF或列印到檔案的目的地。IronPDF的printWithoutDialog()將作業發送到作業系統定義的預設列印機,因此任何由CUPS管理的列印機目標都被支援。

Darrius Serrant
全端軟體工程師(WebOps)

Darrius Serrant擁有邁阿密大學的電腦科學學士學位,並在Iron Software擔任全端WebOps行銷工程師。從小就對程式設計有興趣,他認為計算既神秘又易於理解,成為創意和問題解決的完美媒介。

在Iron Software,Darrius喜歡創造新事物並簡化複雜的概念,使其更易於理解。作為我們的常駐開發人員之一,他還志願教學,將他的專業知識傳授給下一代。

對Darrius來說,他的工作是有意義的,因為它有價值且對社會有真正的影響。

準備好開始了嗎?
版本: 2026.6 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想要快速證明嗎?
運行範例 觀看您的HTML變成PDF。