C#的列印管理非常強大, 因此亦難以學習. 且這部份的教學大都混雜亂跳, 沒一組織性. 所以開設此目錄慢慢的足一說明
Windows Form 常用的列印物件有System.Windows.Forms.PrintDialog, PrintDocument, PrintPreviewDialog.
WPF常用的列印物件有System.Windows.Controls.PrintDialog, XpsDocument, FlowDocument, DocumentViewer等.
本篇以WPF 列印為主, 對於Windows Form的使用不作說明.
加入參考
進行列印工作前, 需加入需要的SDK. 請於專案按右鍵/加入/參考/組件, 將ReachFramework及System.Printing打勾
PrintDialog
PrintDialog是C#直接下達指令叫印表機開始動作的最基本物件. 任何複雜的設計, 如DocumentViewer, FlowDocument, 都會調用此物件進行列印, 所以要先了解此物件的相關特性.
以下是一個簡單的例子, 利用 PrintDialog的PrintVisual()方法, 就可以把WPF裏的所有元件印出, 包含了Grid, DataGrid, Canvas, Button..等等. 如下代碼, 把DataGrid裏的資料硬拷列印出來.
此例中因DataGrid裏的資料送到PrintDialog後, 還需經由網路取得資料庫及照片, 這需漫長的時間才能完成, 故在文件成型時, 因資料當未download完成而有誤, 且無法列印多頁的完整資料. 這些問題都將會在後續的討論中解決.
private void btnPrint_Click(object sender, RoutedEventArgs e)
{
PrintDialog dialog = new PrintDialog();
dialog.PageRangeSelection = PageRangeSelection.AllPages;
dialog.UserPageRangeEnabled = true;
if (dialog.ShowDialog() == true)
{
dialog.PrintVisual(grid, "test");
}
}