Web 列印的特殊挑戰
- 程式在伺服器,印表機在客戶端,控制權分離
- 頁面排版、分頁、頁首頁尾控制困難
- 瀏覽器列印預設行為差異大
七大列印方案比較
| 方案 | 原理 | 優點 | 缺點 | 適用場景 |
| 1. Client Script (JS) |
JS 擷取頁面片段,開新視窗列印 |
零伺服器負擔、彈性高 |
需約定 HTML 結構、複雜排版難控制 |
簡單報表、局部列印 |
| 2. Server 產生列印版 |
後端讀 DB 產生專用列印頁 + CSS 分頁 |
內容豐富、可控性強 |
伺服器負載大、需維護兩套版面 |
正式報表、發票、契約 |
| 3. IE 直接列印 |
window.print() 或 WebBrowser.ExecWB |
零開發成本 |
無法控制頁首頁尾、非列印區域也會印出 |
內部簡單 GridView 列印 |
| 4. WebBrowser 控制項 |
ActiveX 控制項程式化列印/預覽/設定 |
功能完整、可指定印表機 |
僅 IE 支援、需客戶端安裝、安全性限制多 |
內部系統、Kiosk 模式 |
| 5. 匯出 Excel/Word 列印 |
Response 輸出 HTML/Office 格式,用戶自行列印 |
排版靈活、離線可用 |
需客戶端裝 Office、MIME 類型相容性問題 |
複雜表格、需二次編輯 |
| 6. .NET 組件/XSLT |
客戶端下載組件或伺服器 XSLT 轉 HTML |
格式變化大、資料量小時適合 |
需 .NET Framework、XML 解析效能瓶頸 |
特殊格式需求、資料驅動文件 |
| 7. 第三方/水晶報表 |
專業報表引擎,支援匯出 PDF/Word/Excel/列印 |
功能最強、企業級標準 |
授權成本高、部署複雜、學習曲線陡峭 |
企業級複雜報表、法規格式 |
推薦實作:JS 局部列印(輕量、通用)
<div id="printArea" runat="server">
<h2><%# Eval("Title") %></h2>
<div><%# Eval("Content") %></div>
</div>
<asp:Button ID="btnPrint" runat="server" Text="列印" OnClientClick="return printArticle();" />
<script>
function printArticle() {
var content = document.getElementById('<%= printArea.ClientID %>').innerHTML;
var w = window.open('', '_blank', 'width=800,height=600');
w.document.write('<html><head><title>列印</title>');
w.document.write('<style>@media print { .no-print { display:none; } } body{font-family:微軟正黑體;}</style>');
w.document.write('</head><body onload="window.print();window.close();">');
w.document.write(content);
w.document.write('</body></html>');
w.document.close();
return false;
}
</script>
頁面設定控制(@page / @media print)
<style>
@page { margin: 2cm; size: A4 portrait; }
@media print {
.no-print { display: none !important; }
.page-break { page-break-before: always; }
.avoid-break { page-break-inside: avoid; }
thead { display: table-header-group; } /* 表頭每頁重複 */
tfoot { display: table-footer-group; }
}
</style>
選型決策樹
- 需求極簡(只印一區塊) → JS 局部列印
- 需求固定、格式嚴謹(發票、報表) → Server 產生列印版 + CSS @media print
- 企業級、多格式、法規遵循 → 水晶報表 / FastReport / Stimulsoft
- 內部系統、指定印表機、批次列印 → WebBrowser 控制項 / ActiveX
- 使用者需二次編輯 → 匯出 Excel/Word
避坑指南
- 列印預覽與實際列印可能不同,實機測試不可省略
- 大量資料分頁列印時,注意
thead 重複與頁碼處理
- 跨瀏覽器測試:Chrome/Firefox/Edge/IE11 列印行為差異大
- 安全性:列印頁面不應包含敏感資料(密碼、Token)