c# printdialog 打印html,C#利用PrintDocument定制打印单据的小例子

前言

本文是利用PrintDocument定制打印单据的小例子,仅供学习分享使用,如果不足之处,还请指正。

涉及知识点:

PrintDocument :从 Windows 窗体应用程序打印时,定义一种可重用的可发送到打印机上的对象。

PrintPreviewControl :表示 Windows 窗体应用程序打印预览的原始预览部分,没有任何对话框或按钮。

Graphics :GDI+绘图对象

PrinterSettings:设置打印机属性,如:设置属性Copies,可以设置打印份数,默认为1,

PageSettings:指定应用于单页打印的设置

DefaultPageSettings:PrintDocument的属性

PrintPage事件:PrintDocument的事件,通过此事件来绘制需要打印的内容

PaperSize:指定纸张大小

毫米和英寸的换算:打印机是以英寸为单位的,单据设置是以毫米为单位的,所以需要转换

效果图如下:

a5ba777cfcb9a742a05fa468d5bcdb59.png

核心代码

关键代码如下:

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;//上下边距

///

/// 需要打印的内容

///

public List 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 lstPrintInfos = new List();

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;

}

///

/// 转换毫米到百分之一英寸

///

///

///

private int MM2Inch(int mm) {

return (int)(mm * 100.0f / 25.4f);

}

///

/// 打印开始事件

///

///

///

private void pdControl_BeginPrint(object sender, PrintEventArgs e)

{

}

///

/// 打印事件

///

///

///

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);

}

///

/// 打印结束事件

///

///

///

private void pdControl_EndPrint(object sender, PrintEventArgs e)

{

}

///

/// 打印

///

///

///

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;

}

}

///

/// 刷新

///

///

///

private void btnRefresh_Click(object sender, EventArgs e)

{

List lstPrintInfos = new List();

//表格配置

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方法

}

}

}

源码链接

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值