国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#利用PrintDocument定制打印單據的小例子

2020-01-24 00:04:57
字體:
來源:轉載
供稿:網友

前言

本文是利用PrintDocument定制打印單據的小例子,僅供學習分享使用,如果不足之處,還請指正。

涉及知識點:

  • PrintDocument :從 Windows 窗體應用程序打印時,定義一種可重用的可發送到打印機上的對象。
  • PrintPreviewControl :表示 Windows 窗體應用程序打印預覽的原始預覽部分,沒有任何對話框或按鈕。
  • Graphics :GDI+繪圖對象
  • PrinterSettings:設置打印機屬性,如:設置屬性Copies,可以設置打印份數,默認為1,
  • PageSettings:指定應用于單頁打印的設置
  • DefaultPageSettings:PrintDocument的屬性
  • PrintPage事件:PrintDocument的事件,通過此事件來繪制需要打印的內容
  • PaperSize:指定紙張大小
  • 毫米和英寸的換算:打印機是以英寸為單位的,單據設置是以毫米為單位的,所以需要轉換

效果圖如下:

核心代碼

關鍵代碼如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Drawing.Printing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace DemoPrint{ public partial class MainForm : Form {  private int width_p = 200;//單位是mm  private int height_p = 70;//單位是mm  private int margin_lr = 2;//左右邊距  private int margin_tb = 2;//上下邊距  /// <summary>  /// 需要打印的內容  /// </summary>  public List<PrintInfo> PrintInfos { get; set; }  private PrintHelper printHelper = new PrintHelper();  public MainForm()  {   InitializeComponent();  }  private void MainForm_Load(object sender, EventArgs e)  {   InitInfo();   InitDocument();  }  private void InitInfo() {   PrinterSettings printSetting = new PrinterSettings();   printSetting.PrintRange = PrintRange.AllPages;     int width_in = MM2Inch(width_p);   int height_in = MM2Inch(height_p);   PageSettings pageSetting = new PageSettings(printSetting);   pageSetting.PaperSize = new PaperSize("customer",width_in, height_in);      int margin_lr_in = MM2Inch(margin_lr);   int margin_tb_in = MM2Inch(margin_tb);   pageSetting.Margins = new Margins(margin_lr_in, margin_lr_in, margin_tb_in, margin_tb_in);   this.pdControl.DefaultPageSettings = pageSetting;  }  private void InitDocument() {   List<PrintInfo> lstPrintInfos = new List<PrintInfo>();   PrintInfo p0 = new PrintInfo()   {    PrtType = PrintType.Table,    PrtColor = Color.Brown,    Row = int.Parse(this.txtRow.Text.Trim()),    Column = int.Parse(this.txtColumn.Text.Trim()),    Start = new Point(int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[1])),    End = new Point(int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[1]))       };   lstPrintInfos.Add(p0);   printHelper.PrintInfos = lstPrintInfos;  }  /// <summary>  /// 轉換毫米到百分之一英寸  /// </summary>  /// <param name="mm"></param>  /// <returns></returns>  private int MM2Inch(int mm) {   return (int)(mm * 100.0f / 25.4f);  }  /// <summary>  /// 打印開始事件  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void pdControl_BeginPrint(object sender, PrintEventArgs e)  {  }  /// <summary>  /// 打印事件  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void pdControl_PrintPage(object sender, PrintPageEventArgs e)  {   Font font = new Font("Arial", 14f, FontStyle.Regular);   Graphics g = e.Graphics;   g.PageScale = 1;   g.PageUnit = GraphicsUnit.Millimeter;   //先畫一個矩形   Pen lineColor = new Pen(Color.Black, 0.2f);   g.FillRectangle(Brushes.Linen,0,0,width_p,height_p);   printHelper.Print(g);  }  /// <summary>  /// 打印結束事件  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void pdControl_EndPrint(object sender, PrintEventArgs e)  {  }  /// <summary>  /// 打印  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void btnPrint_Click(object sender, EventArgs e)  {   //打印對話框   if (this.ptDControl.ShowDialog() == DialogResult.OK)   {    this.pdControl.Print();   }  }  private void lblColor_Click(object sender, EventArgs e)  {   ColorDialog f = new ColorDialog();   if (f.ShowDialog() == DialogResult.OK)   {    this.lblColor.BackColor = f.Color;   }  }  /// <summary>  /// 刷新  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void btnRefresh_Click(object sender, EventArgs e)  {   List<PrintInfo> lstPrintInfos = new List<PrintInfo>();   //表格配置   PrintInfo p0 = new PrintInfo()   {    PrtType = PrintType.Table,    PrtColor = Color.Brown,    Row = int.Parse(this.txtRow.Text.Trim()),    Column = int.Parse(this.txtColumn.Text.Trim()),    Start = new Point(int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[1])),    End = new Point(int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[1]))   };   lstPrintInfos.Add(p0);   //標題配置   PrintInfo p1 = new PrintInfo()   {    PrtType = PrintType.Text,    PrtColor = this.lblColor.BackColor,    Content = this.txtTitle.Text.Trim(),    Size = int.Parse(this.txtSize.Text.Trim()),    FontStyle = chkBold.Checked ? FontStyle.Bold : FontStyle.Regular,    Start = new Point(int.Parse(this.txtLocation.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtLocation.Text.Trim(new char[] { '(', ')' }).Split(',')[1]))   };   lstPrintInfos.Add(p1);   //內容   TextBox[] T = new TextBox[12] { T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 };   TextBox[] L = new TextBox[12] { L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12 };   for (int i = 0; i < 12; i++)   {    PrintInfo p = new PrintInfo()    {     PrtType = PrintType.Text,     PrtColor = Color.Black,     Content = T[i].Text.Trim(),     Size = 12,     FontStyle = FontStyle.Regular,     Start = new Point(int.Parse(L[i].Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(L[i].Text.Trim(new char[] { '(', ')' }).Split(',')[1]))    };    lstPrintInfos.Add(p);   }   //打印時間   PrintInfo p2 = new PrintInfo()   {    PrtType = PrintType.Text,    PrtColor = this.lblColor.BackColor,    Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),    Size =11,    FontStyle =FontStyle.Regular,    Start = new Point(145,63)   };   lstPrintInfos.Add(p2);   printHelper.PrintInfos = lstPrintInfos;   this.ppVControl.InvalidatePreview();//刷新文檔的預覽,重新調用PrintDocument的Print方法  } }}

源碼鏈接

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 抚顺县| 治县。| 金寨县| 义马市| 灵台县| 冀州市| 城市| 绩溪县| 中阳县| 大足县| 西安市| 黑山县| 临武县| 锡林浩特市| 肇州县| 西华县| 保亭| 通道| 子长县| 兰坪| 扶绥县| 鄂尔多斯市| 德保县| 汕尾市| 祁阳县| 成安县| 赤壁市| 灌南县| 会理县| 张家口市| 营口市| 乌拉特前旗| 韶关市| 额尔古纳市| 三门县| 盘山县| 托克逊县| 汝城县| 高尔夫| 武平县| 苗栗市|