內容摘要:從原理上解釋一下采用C#打印的應用,這裏以最常用的C/S模式作爲範例,首先,獲取要打印的數據,根據固定的模版進行數據排版。然後,簡單設置打印屬性以及預覽數據。最後,進行打印。
首先,從原理上解釋一下關於使用C#開發打印的應用。這裏以最常用的C/S模式作爲範例。
.NetFrameWork爲打印提供了System.Drawing;、System.Drawing.Printing;和System.Windows.Froms;命名空間,在這個命名空間裏面有以下幾個常用的重要類分別是:
a) PrintDocment類主要用來繪製打印頁面並將打印頁面發送到打印機;
1) 常用屬性:
DefaultPageSettings: 獲取或設置頁設置,這些頁設置用作要打印的所有頁的默認設置。
DocumentName: 獲取或設置打印文檔時要顯示的文檔名。
PrinterSettings: 獲取或設置對文檔進行打印的打印機。
2) 常用方法:
Print(): 開始文檔的打印進程。
OnPrintPage(): 引發 PrintPage 事件。該事件在某頁打印之前被調用。
3) 常用事件
BeginPrint: 在調用 Print 方法時並且在打印文檔的第一頁之前發生。
EndPrint: 打印完文檔的最後一頁時發生。
PrintPage: 當需要爲當前頁打印的輸出時發生。
b) PageSetupDialog類用於設置簡單的打印設置
1) 常用屬性
AllowMargins: 獲取或設置一個值,該值指示是否啓用對話框的邊距部分。
AllowOrientation: 獲取或設置一個值,該值指示是否啓用對話框的方向部分(橫向對縱向)。
AllowPaper: 獲取或設置一個值,該值指示是否啓用對話框的紙張部分(紙張大小和紙張來源)。
AllowPrinter: 獲取或設置一個值,該值指示是否啓用“打印機”按鈕。
Document: 獲取或設置一個值,指示從中獲取頁面設置的 PrintDocument。
PageSettings: 獲取或設置一個值,該值指示要修改的頁設置。
PrinterSettings: 獲取或設置用戶單擊對話框中“打印機”按鈕時修改的打印機設置。
ShowHelp: 獲取或設置一個值,該值指示“幫助”按鈕是否可見。
ShowNetwork: 獲取或設置一個值,該值指示“網絡”按鈕是否可見。
2) 常用方法
Reset(): 已重寫。 將所有選項重新設置爲其默認值。
ShowDialog(): 已重載。 運行通用對話框。
c) PrintPreviewDialog類用於打印預覽
1) 常用屬性
DesktopBounds: 獲取或設置 Windows 桌面上窗體的大小和位置。(從 Form 繼承。)
DesktopLocation: 獲取或設置 Windows 桌面上窗體的位置。(從 Form 繼承。)
DialogResult: 獲取或設置窗體的對話框結果。
Document: 獲取或設置要預覽的文檔。
Enabled: 獲取或設置一個值,該值指示是否已啓用該控件。
Height: 獲取或設置控件的高度。
Location: style="FONT-SIZE: 12pt; COLOR: black">獲取或設置該控件的左上角相對於其容器的左上角的座標。
Width: 獲取或設置控件的寬度。(從 Control 繼承。)
WindowState: 獲取或設置窗體的窗口狀態。
2) 常用方法
ShowDialog(): 已重載。將窗體顯示爲模式對話框。
下面我們來看一下打印的基本步驟:
1) 聲明一個PrintDocment:
命名空間:System.Drawing.Printing;
代碼:
PrintDocment objPrintDocment=new PrintDocment();
objPrintDocment.PrintPage+=new PrintPageEventHandler
(Print_PrintPage);
2) 調用打印屬性設置窗口
命名空間:System.Windows.Froms;
代碼:
//初始化要顯示的設置窗口
PageSetupDialog objPageSetupDialog = new PageSetupDialog();
//獲取文檔
objPageSetupDialog.Document = this._pDocument;
//顯示窗口s
objPageSetupDialog.ShowDialog();
3) 調用打印預覽窗口
//初始化要預覽窗口
PrintPreviewDialog objPrintPreviewDialog = newPrintPreviewDialog();
//獲取要預覽的文檔
objPrintPreviewDialog.Document = objDocument;
//顯示預覽窗口
objPrintPreviewDialog.ShowDialog();
4) 添加Print_PrintPage(object sender, PrintPageEventArgs e)的代碼
//這裏主要實現打印功能
利用Graphics類的 DrawLine()方法畫線,DrawString()方法寫入文本;
//打印表裏的數據
g.DrawString(cellValue, _contentFont, _contentForeColor, new PointF(linex, liney + _cellTopMargin));
//標題下面的一條線
g.DrawLine(_linePen, new PointF(_leftMargin, lineBeginY), new PointF(pageWidth - _rightMargin,lineBeginY));
現面來看一下一個具體的、簡單的事例:將用戶輸入的數據在界面上打印出來.
public partial class FTest : Form
{
PrintDocument objDocument;
public FTest ()
{
InitializeComponent();
}
private void FTest _Load(object sender, EventArgs e)
{
objDocument = new PrintDocument();
//當需要爲當前頁打印的輸出時發生
objDocument.PrintPage += new PrintPageEventHandler(objDocument_PrintPage);
}
void objDocument_PrintPage(object sender, PrintPageEventArgs e)
{
string objString = this.textBox1.Text;
//獲取用於繪製頁面的Graphics的對象
Graphics g= e.Graphics;
//向頁面輸出一行文字
g.DrawString(objString, new Font("宋體", 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("宋體", 24)).Width) / 2, e.PageBounds.Height / 8));
g.DrawString(objString, new Font("宋體", 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("宋體", 24)).Width) / 2, e.PageBounds.Height / 8+48));
g.DrawString(objString, new Font("宋體", 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("宋體", 24)).Width) / 2, e.PageBounds.Height / 8 + 96));
E: 12pt">g.DrawString(objString, new Font("宋體", 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("宋體", 24)).Width) / 2, e.PageBounds.Height / 8 + 144));
g.Dispose();
}
private void button1_Click(object sender, EventArgs e)
{
//初始化要顯示的設置窗口
PageSetupDialog objPageSetupDialog = new PageSetupDialog();
//獲取文檔
objPageSetupDialog.Document = this.objDocument;
//顯示窗口
objPageSetupDialog.ShowDialog();
//初始化要預覽窗口
PrintPreviewDialog objPrintPreviewDialog = new PrintPreviewDialog();
//獲取要預覽的文檔
objPrintPreviewDialog.Document = objDocument;
objPrintPreviewDialog.Width = 800;
objPrintPreviewDialog.Height = 600;
//顯示預覽窗口
objPrintPreviewDialog.ShowDialog();
}
}
總結:通過上面的事例我們可以知道C#主要使用其自帶的類庫PrintDocment類的PrintPage事件來實現的打印的,我們可以通過來利用此事件函數來打印我們想要的結果.