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

news/2024/11/29 22:40:57/

前言

本文是利用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方法

}

}

}

源码链接

总结

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


http://www.ppmy.cn/news/554852.html

相关文章

打印单据(PDF)

1、首先需要下载两个包&#xff0c;点击&#xff1a; iText-5.0.5与iTextAsian包 2、正文 package com.service;import java.io.File; import java.io.FileOutputStream;import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.Font…

ant-design 打印功能/打印单据

ant项目&#xff0c;这里是我的单据&#xff0c;用js原生的打印&#xff0c;你会发现&#xff0c;你的样式基本上没了&#xff0c;所以我用了html2canvas先截图&#xff0c;然后再打印 说下思路&#xff1a;将单据截图&#xff0c;然后打印&#xff0c;但是打印的时候只能打印…

审核的单据才可以打印

编辑界面ActionPrintPreView&#xff0c;ActionPrint前置脚本实现非审核状态单据不允许打印&#xff1a; var easNames JavaImporter(); easNames.importPackage(Packages.com.kingdee.eas.util.client); easNames.importPackage(Packages.com.kingdee.eas.scm.common); easNa…

出入库单据小票移动打印,盘点机PDA连接蓝牙打印机打印单据小票

本期视频讲解&#xff1a;使用&#xff08;汉码&#xff09;盘点机PDA搭配蓝牙便携打印机&#xff0c;移动扫码入库&#xff0c;出库开单&#xff0c;并打印单据小票。实现移动的单兵神器&#xff0c;不用来回电脑跑&#xff0c;能大大提高工作效率&#xff0c;节省时间成本。 …

C# 利用PrintDocument定制打印单据

本文是利用PrintDocument定制打印单据的小例子&#xff0c;仅供学习分享使用&#xff0c;如果不足之处&#xff0c;还请指正。 涉及知识点&#xff1a; PrintDocument :从 Windows 窗体应用程序打印时&#xff0c;定义一种可重用的可发送到打印机上的对象。PrintPreviewContr…

金蝶精斗云PDA移动扫码入库出库,搭配蓝牙打印机打印单据小票

金蝶精斗云PDA移动扫码入库出库&#xff0c;搭配蓝牙打印机打印单据小票&#xff0c;单据小票打印&#xff0c;金蝶安卓盘点机PDA金蝶精斗云PDA轻松扫描商品条码盘点 第一步&#xff0c;装上单据小票纸。 打开蓝牙便携打印机的纸仓&#xff0c;调整里面的挡板到合适位置&#…

【C#】最全单据打印(打印模板、条形码二维码、字体样式、项目源码)

系列文章 【C#】编号生成器&#xff08;定义单号规则、固定字符、流水号、业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

定时器的实现原理

文章目录 1.定时器的作用?2.数据结构要求3.时间轮4.分级时间轮5.业界实现方案参考文献 1.定时器的作用? 定时器的主要用途是执行定时任务。 定时任务在很多场景都需要用到&#xff0c;比如游戏的 Buff 实现&#xff0c;Redis 中的过期任务&#xff0c;Linux 中的定时任务&a…