關於C#打印技術

內容摘要:從原理上解釋一下采用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事件來實現的打印的,我們可以通過來利用此事件函數來打印我們想要的結果.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章