亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現打印與打印預覽功能的思路及代碼

2020-01-24 02:59:55
字體:
來源:轉載
供稿:網友

在windows應用程序中文檔的打印是一項非常重要的功能,在以前一直是一個非常復雜的工作,Microsoft .Net Framework的打印功能都以組件的方式提供,為程序員提供了很大的方便,但是這幾個組件的使用還是很復雜的,有必要解釋一下。
打印操作通常包括以下四個功能:
1 打印設置 設置打印機的一些參數,比如更改打印機驅動程序等;
2 頁面設置 設置頁面大小紙張類型等
3 打印預覽 類似于word中的打印預覽
4 打印

實現打印功能的核心是PrintDocument類這個類屬于System.Drawing.Printing名字空間這個類封裝了當前的打印設置頁面設置以及所有的與打印有關的事件和方法
這個類包括以下幾個屬性,事件和方法
1、PrinterSettings 屬性
存放打印機的設置信息,這個屬性不需要程序員設置,因為它是由打印對話框獲取的.
2、PrintCountroller 屬性
控制打印過程
3、DefaultPageSettings 屬性
存放頁面設置信息,打印紙大小方向等,也不需要程序員設置,因為它是由頁面設置對話框獲取的.
4、DocumentName 屬性
指定文檔名稱,出現在打印機狀態窗口中

1。 BeginPrint事件
在打印之前發出
2. PrintPage事件
每打印一頁是發出,事件接受一個PrintPageEventArgs參數該參數封裝了打印相關的信息

PrintPageEventArgs參數有很多重要的屬性
1 Cancel 取消打印
2 Graphics 頁面的繪圖對象
3 HasMorePages 是否還有要打印的頁面


Print方法:該方法沒有參數 調用它將按照當前設置開始打印.
若實現打印功能首先構造PrintDocument對象添加打印事件

復制代碼 代碼如下:

PrintDocument printDocument;
 private void InitializeComponent()
 {
 ...
// 這里的printDocument對象可以通過將PrintDocument控件拖放到窗體上來實現,注意要設置該控件的PrintPage事件。
 printDocument=new PrintDocument();
 printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
 ...
 }

實現打印事件功能
打印和繪圖類似都是調用Graphics 類的方法進行畫圖 不同的是一個在顯示器上一個在打印紙上并且打印要進行一些復雜的計算
如換行、分頁等。

復制代碼 代碼如下:

 private void printDocument_PrintPage(object sender,PrintPageEventArgs e)
 {
 Graphics g = e.Graphics; //獲得繪圖對象
 float linesPerPage = 0; //頁面的行號
 float yPosition = 0; //繪制字符串的縱向位置
 int count = 0; //行計數器
 float leftMargin = e.MarginBounds.Left; //左邊距
 float topMargin = e.MarginBounds.Top; //上邊距
 string line = null; 行字符串
 Font printFont = this.textBox.Font; //當前的打印字體
 SolidBrush myBrush = new SolidBrush(Color.Black);//刷子
 linesPerPage = e.MarginBounds.Height / printFont.GetHeight(g);//每頁可打印的行數
//逐行的循環打印一頁
 while(count < linesPerPage && ((line=lineReader.ReadLine()) != null))
 {
yPosition = topMargin + (count * printFont.GetHeight(g));
g.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat());
count++;
 }
// 注意:使用本段代碼前,要在該窗體的類中定義lineReader對象:
// StringReader lineReader = null;
 //如果本頁打印完成而line不為空,說明還有沒完成的頁面,這將觸發下一次的打印事件。在下一次的打印中lineReader會
 //自動讀取上次沒有打印完的內容,因為lineReader是這個打印方法外的類的成員,它可以記錄當前讀取的位置
 if(line != null)
 e.HasMorePages = true;
 else
{
 e.HasMorePages = false;
 // 重新初始化lineReader對象,不然使用打印預覽中的打印按鈕打印出來是空白頁
 lineReader = new StringReader(textBox.Text); // textBox是你要打印的文本框的內容
}
}

打印設置,構造打印對話框 將對話框中設置的Document屬性賦給printDocument這樣會將用戶的設置自動保存到printDocument
的PrinterSettings屬性中
復制代碼 代碼如下:

protected  void FileMenuItem_PrintSet_Click(object sender,EventArgs e)
{
    PrintDialog printDialog = new PrintDialog();
    printDialog.Document = printDocument;
    printDialog.ShowDialog();
}

頁面設置和打印預覽與打印設置原理相同都是構造對話框將用戶在對話框中的設置保存到相應的類的屬性中

復制代碼 代碼如下:

protected  void FileMenuItem_PageSet_Click(object sender,EventArgs e)
{
    PageSetupDialog pageSetupDialog = new PageSetupDialog();
    pageSetupDialog.Document = printDocument;
    pageSetupDialog.ShowDialog();
}

打印預覽

復制代碼 代碼如下:

protected void FileMenuItem_PrintView_Click(object sender,EventArgs e)
{
   PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
   printPreviewDialog.Document = printDocument;
   lineReader = new StringReader(textBox.Text);
   try
   {
        printPreviewDialog.ShowDialog();
   }
   catch(Exception excep)
   {
        MessageBox.Show(excep.Message, "打印出錯", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
}

打印就可以直接調用printDocument的Print()方法因為用戶可能在打印之前還要再更改打印設置所以
在這里再次顯示打印設置對話框

復制代碼 代碼如下:

 protected void FileMenuItem_Print_Click(object sender,EventArgs e)
  {
   PrintDialog printDialog = new PrintDialog();
   printDialog.Document = printDocument;
   lineReader = new StringReader(textBox.Text);
   if (printDialog.ShowDialog() == DialogResult.OK)
   {
       try
       {
         printDocument.Print();
       }
       catch(Exception excep)
       {
              MessageBox.Show(excep.Message, "打印出錯", MessageBoxButtons.OK, MessageBoxIcon.Error);
              printDocument.PrintController.OnEndPrint(printDocument,new PrintEventArgs());
       }
    }
  }

總結打印的過程是
1 在應用程序窗體初始化時構造PrintDocument對象,添加 printDocument 的 PrintPage 方法
2 實現PrintPage方法
3 在用戶的單擊事件中調用 printDocument 的 Print方法實現打印功能
在這中間可能要用到  PrintDialog PrintPreviewDialog PageSetupDialog 設置和查看打印效果這些方法通常是由菜單的單擊觸發的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕网站| 懂色aⅴ精品一区二区三区蜜月| 日韩人在线观看| 亚洲成人激情在线观看| 欧美精品在线免费播放| 欧美中文在线观看| 亚洲人成网7777777国产| 久久成人免费视频| 91经典在线视频| 毛片精品免费在线观看| 最新的欧美黄色| 亚洲天堂日韩电影| 97高清免费视频| 操日韩av在线电影| 久久精品91久久久久久再现| 狠狠躁夜夜躁久久躁别揉| 国产精品成av人在线视午夜片| 92版电视剧仙鹤神针在线观看| 久久久成人精品| 日本一区二区三区在线播放| 精品国产乱码久久久久久天美| 91精品国产91久久久久福利| 亚洲成人激情在线| 久久国产加勒比精品无码| 91视频免费在线| 国内伊人久久久久久网站视频| 日韩精品视频在线免费观看| 欧美日韩在线观看视频小说| 亚洲一区二区少妇| 成人免费黄色网| 亚洲精品成人av| 欧美亚洲另类制服自拍| 在线亚洲午夜片av大片| 欧美日韩免费在线| 日韩av片永久免费网站| 97人人爽人人喊人人模波多| 中文字幕视频在线免费欧美日韩综合在线看| 日韩精品亚洲视频| 91香蕉电影院| 精品久久久久久国产91| 日韩综合中文字幕| 亚洲最大av网| 中文字幕日韩欧美在线视频| 国产日韩欧美夫妻视频在线观看| 孩xxxx性bbbb欧美| 国产欧美一区二区三区视频| 亚洲一区二区中文| 国产男女猛烈无遮挡91| 欧美成人国产va精品日本一级| 欧美黑人一区二区三区| 亚洲成人激情图| 日韩中文字幕不卡视频| 欧美性猛交xxxx黑人| 66m—66摸成人免费视频| 日韩欧美精品中文字幕| 日韩精品久久久久久久玫瑰园| 亚洲精品v欧美精品v日韩精品| 欧美激情videoshd| 国产精品视频地址| 成人欧美一区二区三区在线湿哒哒| 性夜试看影院91社区| 国产精品wwww| 成人激情电影一区二区| 81精品国产乱码久久久久久| 国产做受69高潮| 亚洲第一精品久久忘忧草社区| 亚洲一区二区三区香蕉| 欧美日韩国产精品专区| 国产在线观看精品一区二区三区| 国产欧美日韩免费| 欧美成人激情视频| 亚洲第一区中文字幕| 日韩高清有码在线| 久久精品国产亚洲7777| 欧美日韩中文字幕日韩欧美| 亚洲人午夜色婷婷| 欧美黑人狂野猛交老妇| 一本大道香蕉久在线播放29| 国产成人黄色av| 欧美资源在线观看| 欧美精品18videos性欧| 国产91免费看片| 日韩理论片久久| 黑人与娇小精品av专区| 久久99热这里只有精品国产| 欧美日韩成人在线播放| 欧美成人黄色小视频| 欧美疯狂性受xxxxx另类| 国产精品色视频| 日韩精品在线私人| 亚洲免费伊人电影在线观看av| 亚洲国产女人aaa毛片在线| 久久久久久网站| 日本中文字幕不卡免费| 欧美资源在线观看| 国产欧美日韩精品专区| 久久视频在线观看免费| 91精品国产乱码久久久久久蜜臀| 亚洲美女动态图120秒| 久久精品国产清自在天天线| 亚洲大尺度美女在线| 久久精品国产亚洲| 久久久久国产视频| 欧美wwwxxxx| 国产精品入口福利| 久久九九国产精品怡红院| 久久久精品久久久| 国产精品自拍偷拍| 国色天香2019中文字幕在线观看| 欧美色视频日本版| 国产999精品久久久影片官网| 91精品国产自产91精品| 国产情人节一区| 久久精品免费播放| 欧美成人精品一区| 中文字幕欧美精品在线| 日韩经典一区二区三区| 日韩精品小视频| 欧美激情成人在线视频| 日日骚久久av| 国产精品久久9| 亚洲电影在线看| 日韩视频亚洲视频| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩亚洲网| 国产精品成人一区二区| 日本精品久久久| 久久久91精品国产| 亚洲欧美日韩图片| 亚洲第一精品电影| 欧美专区日韩视频| 亚洲一区二区三区sesese| 国产视频精品va久久久久久| 亚洲欧美日韩精品| 亚洲成人网av| 亚洲在线免费视频| 日韩激情av在线免费观看| 日韩黄色在线免费观看| 欧美日韩国产精品一区二区不卡中文| 国产suv精品一区二区三区88区| 综合国产在线视频| 亚洲aaa激情| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品视频色| 中文字幕精品国产| 国产精品美女主播在线观看纯欲| 人人做人人澡人人爽欧美| 亚洲色图色老头| 成人精品一区二区三区电影黑人| 亚洲精品一区二三区不卡| 欧美日韩免费网站| 秋霞午夜一区二区| 57pao精品| 8x海外华人永久免费日韩内陆视频| 91亚洲va在线va天堂va国| 国产一区二区三区三区在线观看| 亚洲日本aⅴ片在线观看香蕉| 色先锋资源久久综合5566| 欧美精品videosex性欧美| 91国语精品自产拍在线观看性色| 久久精品国产电影| 国产日韩一区在线| 色噜噜久久综合伊人一本| 亚洲一区二区少妇|