按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式
按照已有的模板打印小票<二>
——调用windows打印机打印 可设置字体样式
之前写过一篇文章《按照已有的模板输出一(如发票)》,是关于如何给已有的模板赋值。在项目的实践过程中,我又遇到了如何调用windows打印机打印的情况,我觉得有必要记录与分享。
如图1
一、小票模板
1) Txt文件编写模板
打印小票我们还是用我们一贯的做法,使用模板。先用txt文件写出如图1模板样式中的模板。如图2。(文中txt模板文件取名为排号机小票)
图2
2) Txt模板文件放在项目文件下
写完模板,将模板放在项目的目录下(排号机小票),如图3。
图3
3) 始终复制到输出目录
将排号机小票模板放在项目中后,还有一个操作很重要,选中排号机小票模板——>右键属性——>复制到输出目录修改为始终复制,生成操作修改为无。如图4-5.
这一操作是为了每次项目编译后,都能生成模板在bin目录下。
图4
图5
4) 给模板赋值
如图2,我们写了模板,但是并没有给模板赋值,接下来讲如何给模板赋值。
a) 首先我们得有数据源。
这里我新建一个类,保存数据源。
public class PrintTicketModel
{
/// <summary>
/// 烟点名称
/// </summary>
public string Ydmc { get; set; }
/// <summary>
///序号
/// </summary>
public int Xh { get; set; }
/// <summary>
/// 交售通道
/// </summary>
public int Jstd { get; set; }
/// <summary>
/// 烟农姓名
/// </summary>
public string Ynxm { get; set; }
/// <summary>
/// 卡号尾号
/// </summary>
public string Yhwh { get; set; }
/// <summary>
/// 当日余量
/// </summary>
public decimal Dryl { get; set; }
/// <summary>
/// 合同余量
/// </summary>
public decimal Htyl { get; set; }
/// <summary>
/// 合同余量
/// </summary>
public decimal Zhtl { get; set; }
/// <summary>
/// 等待人数
/// </summary>
public int Ddrs { get; set; }
/// <summary>
/// 时间
/// </summary>
public DateTime Sj { get; set; }
}
b) 给类赋值
窗体加载后我马上给数据源赋了初始值。
private void FormPrintTicket_Load(object sender, EventArgs e)
{
//给默认值
TicketModel.Ydmc = "姜州烟点";
TicketModel.Xh = 1007;
TicketModel.Jstd = 1;
TicketModel.Ynxm = "张留高";
TicketModel.Yhwh = "63959";
TicketModel.Dryl = 598.08m;
TicketModel.Htyl = 598.08m;
TicketModel.Zhtl = 600.00m;
TicketModel.Ddrs = 6;
TicketModel.Sj = DateTime.Now;
//赋值
txtydmc.Text = TicketModel.Ydmc;
txtxh.Text = TicketModel.Xh.ToString();
txtjstd.Text = TicketModel.Jstd.ToString();
txtynxm.Text = TicketModel.Ynxm;
txtkhwh.Text = TicketModel.Yhwh;
txtdryl.Text = TicketModel.Dryl.ToString();
txthtyl.Text = TicketModel.Htyl.ToString();
txthtzl.Text = TicketModel.Zhtl.ToString();
txtddrs.Text = TicketModel.Ddrs.ToString();
}
c) 给排号机小票.txt模板赋值
接下来讲的很重要,如何给排号机小票.txt模板赋值,以及修改字体样式。
/// <summary>
///给模板赋值
/// </summary>
/// <param name=" printTicket ">数据源 </param>
/// <returns></returns>
public List<ContentWithFontModel> GetTempleteDemo(PrintTicketModel printTicket)
{
StreamReader objReaderFp = new StreamReader("TicketTemplete\\排号机小票.txt", Encoding.UTF8);
string content = objReaderFp.ReadToEnd();
//烟点名称
content = content.Replace("{ybmc}", printTicket.Ydmc);
//序号
content = content.Replace("{xh}", printTicket.Xh.ToString());
//交售通道 -
content = content.Replace("{jstd}", printTicket.Jstd.ToString());
//烟农姓名-
content = content.Replace("{ynxm}", printTicket.Ynxm);
//卡号尾号
content = content.Replace("{yhwh}", printTicket.Yhwh);
////当日余量-
content = content.Replace("{dryl}", (printTicket.Dryl).ToString());
//合同余量-
content = content.Replace("{htyl}", printTicket.Htyl.ToString());
//总合同量; -
content = content.Replace("{zhtl}", printTicket.Zhtl.ToString());
//等待人数--
content = content.Replace("{ddrs}", printTicket.Ddrs.ToString());
//时间--
content = content.Replace("{sj}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
content = content.Replace("\r\n", "\n");
//将content按照\n分开
return GetFontChangeTemplete(content.Split('\n'));
}
/// <summary>
///给模板设置字体样式
/// </summary>
/// <param name="contents">模板内容,按照行保存在数组中,以便每行设置字体样式</param>
/// <returns></returns>
private static List<ContentWithFontModel> GetFontChangeTemplete(string[] contents)
{
List<ContentWithFontModel> contentWithFontModels = new List<ContentWithFontModel>();
//设置字体
Font putongFont = new Font("仿宋", 12, FontStyle.Regular);
Font disFont = new Font("仿宋", 22, FontStyle.Bold);
//设置画刷
SolidBrush solidBrush = new SolidBrush(Color.Black);
//设置字体
for (int i = 0; i < contents.Length; i++)
{
ContentWithFontModel contentWithFontModel = new ContentWithFontModel();
if (i == 1)
{
contentWithFontModel.Content = contents[i];
contentWithFontModel.FontStyle = disFont;
contentWithFontModel.SolidBrushStyle = solidBrush;
}
else
{
contentWithFontModel.Content = contents[i];
contentWithFontModel.FontStyle = putongFont;
contentWithFontModel.SolidBrushStyle = solidBrush;
}
contentWithFontModels.Add(contentWithFontModel);
}
return contentWithFontModels;
}
/// <summary>
/// 打印内容 字体样式 刷子样式
/// </summary>
public class ContentWithFontModel
{
/// <summary>
/// 内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 字体样式
/// </summary>
public Font FontStyle { get; set; }
/// <summary>
/// 刷子样式
/// </summary>
public SolidBrush SolidBrushStyle{ get; set; }
}
二、调用windows打印机打印
以上内容我们已经完成了模板的内容,模板样式。现在就是讲解如何将模板的内容交给windows打印机打印。
在窗体的工具箱内有一个控件PrintDocument,可以拖动控件编写。我这里没有推动控件,直接使用的PrintDocument类。直接使用PrintDocument要添加引用using System.Windows.Forms;
/// <summary>
/// 打印小票
/// </summary>
/// <param name="printcontents">带字体的模型</param>
private void Print(List<ContentWithFontModel> printcontents)
{
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += (sender, e) =>
{
int fontheight = 0;
foreach (var item in printcontents)
{
e.Graphics.DrawString(item.Content, item.FontStyle, item.SolidBrushStyle, new Point(0, fontheight));
fontheight += item.FontStyle.Height;
}
};
printDocument.Print();
}
调用Print方法传入带有字体样式的内容的参数,就可以了。
如果打印的模板没有这么多的样式变化。代码还可以更简便些。。和我写的加以综合自己摸索摸索吧。
按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式的更多相关文章
- JS设置打印页面并调用本地打印机打印页面
<script type="text/javascript"> var hkey_key; var hkey_root = "HKEY_CURRENT_USE ...
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】
原文地址:http://blog.csdn.net/ldljlq/article/details/7338772 在批量打印商品标签时一般都要加上条码或图片,而这类应用大多是使用斑马打印机,所以我也遇 ...
- JavaScript 调用 Windows 的打印 代码
JavaScript 调用 Windows 的打印 代码 2009-02-24 10:36 <%@ Page Language="C#" AutoEventWireup=&q ...
- C#调用TSC条码打印机打印二维码
#region 调用TSC打印机打印 /// <summary> /// 调用TSC打印机打印 /// </summary> /// <param name=" ...
- c# zxing生成二维码和打印
生成二维码代码 asset=“要生成的字符串”: public static Bitmap CreateQRCode(string asset) { EncodingOptions options = ...
- PHPExcel探索之旅---阶段二 设置表格样式
1.设置表格的默认样式为水平居中.垂直居中 getDefaultStyle()函数用来设置默认样式 由活动sheet对象来调用,setVertical()函数和setHorizontal()函数分别用 ...
- 【转】C#使用ESC指令控制POS打印机打印小票
.前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos ...
- C#使用ESC指令控制POS打印机打印小票
1.前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的po ...
- ActiveXObject Word.Application 打印小票
javascript 时间格式 Date.prototype.format = function (format) { var o = { "M+": this.getMonth( ...
随机推荐
- Git Hook 同步服务器代码
参考并转载自: http://www.embbnux.com/2014/09/05/git_server_let_code_auto_deploy/ http://www.chenyudong.com ...
- 2018/4/26 python文件处理方式
目录 2018/4/26总结 1. 如果有一天群内问题总结: 问题:python2和python3的默认编码是什么? 2. python学习总结: python的处理文件方式 2018/4/26总结 ...
- python grpc
pip install grpcio pip install grpcio-tools python -m grpc_tools.protoc -I. --python_out=. --grpc_py ...
- Linux实战教学笔记44:NoSQL数据库开篇之应用指南
第1章 NoSQL数据库 1.1 NoSQL概述 自关系型数据库诞生40年以来,从理论产生发展到现实产品,例如:大家最常见的MySQL和Oracle,逐渐在数据库领域里上升到了霸主地位,形成每年高达数 ...
- MonoDevelop Assembly Browser
[MonoDevelop Assembly Browser] View -> Assembly Browser,通过此窗口可以查看Dll的反编译后的代码. 还有几款免费的替代产品可以使用, 虽然 ...
- python 文件的读取&更新
[python 文件的读取&更新] 任务抽象: 读取一个文件, 更新内容后, 重新写入文件. 实际应用: 磁盘上的一个配置文件, 读入内存后为一个dict, 对dict更新后重新写入磁盘. d ...
- Spark之 SparkSql整合hive
整合: 1,需要将hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放位置. 2,如果Hive的元数据存放在Mysql中,我们还需 ...
- git服务器搭建问题
CentOS6.5本地搭建. 对于图形化的系统,可以联网,然后CTRL+ALT+F2可以切换到命令行,CTRL+ALT+F1可以切换回桌面图形化. 可以用SSH和FTP来连接服务器和传文件. (1 ...
- 17-list,字典使用练习
randint(a,b)包括 [a,b]中随机, 包含a,b range(n)= 0,1,2,3....n-1 chr() 数字转字符: chr(65) 得到 :A ord()字符转数字: ord( ...
- T-sql GroupBy语句常见问题处理
1.问题描述 现在有一张course表(含课程编号和名称)和一张sc表(含学生学号,选修课程的编号以及考试成绩),如下:现在想要查询所有课程编号.对应的课程名称以及选修该课程的所有学生的平均成绩.一开 ...