日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MIS开发中.net Framework的打印功能

發布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MIS开发中.net Framework的打印功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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=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++;
  }

?

  如果本頁打印完成而line不為空說明還有沒完成的頁面這將觸發下一次的打印事件在下一次的打印中lineReader會

  自動讀取上次沒有打印完的內容因為lineReader是這個打印方法外的類的成員它可以記錄當前讀取的位置

?

if(line?!=?null)
  e.HasMorePages?=?true;
  else
  e.HasMorePages?=?false;
  }

?

  打印設置,構造打印對話框 將對話框中設置的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方法 4 在用戶的單擊事件中調用 printDocument 的 Print方法實現打印功能

  在這中間可能要用到 PrintDialog PrintPreviewDialog PageSetupDialog 設置和查看打印效

  果這些方法通常是由菜單的單擊觸發的。

?

總結

以上是生活随笔為你收集整理的MIS开发中.net Framework的打印功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。