首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 實現 PDF 自動列印功能(基於 iText 與 JavaScript)

     編輯:Java 程式設計入門

方案概述

利用 iText 庫將 JavaScript 列印腳本嵌入 PDF 文件,當用戶開啟 PDF 時自動觸發列印對話框或靜默列印,適用於報表自動列印、單據批量輸出等場景。

核心實作程式碼

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.ByteArrayOutputStream;

public byte[] autoPrintPdf(byte[] pdfBytes) {
    ByteArrayOutputStream bos = null;
    try {
        // 讀取原始 PDF
        PdfReader reader = new PdfReader(pdfBytes);
        bos = new ByteArrayOutputStream();
        PdfStamper stamper = new PdfStamper(reader, bos);

        // 建構自動列印 JavaScript
        StringBuilder script = new StringBuilder();
        script.append("this.print({bUI: false, bSilent: true, bShrinkToFit: false});")
              .append("\r\nthis.closeDoc();");

        // 嵌入 JavaScript 並扁平化表單
        stamper.addJavaScript(script.toString());
        stamper.setFormFlattening(true);
        stamper.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return bos != null ? bos.toByteArray() : new byte[0];
}

關鍵參數解析

參數說明可選值
bUI是否顯示列印對話框false 靜默列印 / true 顯示對話框
bSilent是否靜默模式(不提示)true 完全背景列印
bShrinkToFit是否縮放適應頁面false 保持原始尺寸

進階應用場景

指定印表機列印

script.append("var pp = this.getPrintParams();");
script.append("pp.printerName = 'HP LaserJet Pro';");
script.append("this.print(pp);");

分頁範圍控制

script.append("this.print({bUI: false, nStart: 0, nEnd: 2});"); // 僅列印第 1-3 頁

依賴與環境需求

  • iText 版本:5.x 或 7.x (需注意授權模式)
  • PDF 檢視器:需支援 JavaScript API (Adobe Reader/Acrobat 完美支援,瀏覽器內建檢視器支援度不一)
  • 安全性考量:部分企業環境禁用 PDF JavaScript,需提供手動列印備案

常見問題排查

  1. 不列印:確認 PDF 檢視器啟用 JavaScript、印表機驅動正常
  2. 列印兩份:避免重複呼叫 addJavaScript、檢查 setFormFlattening 設定
  3. 中文亂碼:確保原始 PDF 字體嵌入正確、iText 中文字體配置完整

替代方案比較

方案優點缺點適用場景
PDF 嵌入 JS無需額外服務、客戶端直連印表機依賴 PDF 檢視器支援度內網報表、單據自動列印
Java Print Service API伺服器端控制、支援所有印表機需伺服器連接印表機、佇列管理複雜集中式列印中心
轉圖片後列印相容性最好品質損失、效能較差特殊格式需求

總結

透過 iText 嵌入 JavaScript 實現 PDF 自動列印,程式碼簡潔且部署輕量。關鍵在於 bUI: false 與 bSilent: true 參數組合實現真正無感列印,搭配 setFormFlattening(true) 確保表單欄位正確渲染。實際部署前務必在目標環境驗證 PDF 檢視器相容性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved