按照已有的模板打印小票<二>

——调用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打印机打印 可设置字体样式的更多相关文章

  1. JS设置打印页面并调用本地打印机打印页面

    <script type="text/javascript"> var hkey_key; var hkey_root = "HKEY_CURRENT_USE ...

  2. C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】

    原文地址:http://blog.csdn.net/ldljlq/article/details/7338772 在批量打印商品标签时一般都要加上条码或图片,而这类应用大多是使用斑马打印机,所以我也遇 ...

  3. JavaScript 调用 Windows 的打印 代码

    JavaScript 调用 Windows 的打印 代码 2009-02-24 10:36 <%@ Page Language="C#" AutoEventWireup=&q ...

  4. C#调用TSC条码打印机打印二维码

    #region 调用TSC打印机打印 /// <summary> /// 调用TSC打印机打印 /// </summary> /// <param name=" ...

  5. c# zxing生成二维码和打印

    生成二维码代码 asset=“要生成的字符串”: public static Bitmap CreateQRCode(string asset) { EncodingOptions options = ...

  6. PHPExcel探索之旅---阶段二 设置表格样式

    1.设置表格的默认样式为水平居中.垂直居中 getDefaultStyle()函数用来设置默认样式 由活动sheet对象来调用,setVertical()函数和setHorizontal()函数分别用 ...

  7. 【转】C#使用ESC指令控制POS打印机打印小票

    .前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos ...

  8. C#使用ESC指令控制POS打印机打印小票

    1.前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的po ...

  9. ActiveXObject Word.Application 打印小票

    javascript 时间格式 Date.prototype.format = function (format) { var o = { "M+": this.getMonth( ...

随机推荐

  1. Spring cloud Eureka高可用 - Windows 7 hosts文件立即生效

    hosts 文件所在位置 c:/windows/system32/drivers/etc/hosts 左下角 搜索框 搜索 cmd 弹出命令框 输入 ipconfig /displaydns 显示所有 ...

  2. Android MVP模式简单易懂的介绍方式 (二)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 上一篇文章我们介绍完了Model的创建 ...

  3. hbase安装与配置-分布式

    HBASE安装与配置 备注: 1:本文在hadoop的完全分布式基础上部署hbase 2:本文使用的是小博主自己搭建的zookpeer服务,未使用hbase本身的zookpeer服务 本文内容在以下前 ...

  4. Hibernate多对多关联映射的HQL中的in条件查询问题

    群里有朋友求解一个问题,高分求一条HQL多对多查询语句 . 问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f758 ...

  5. Mysql 中的伪列用法

    SELECT ( @rowNO := @rowNo + 1 ) AS rowno, A.*FROM ( SELECT * FROM t_user ) a, ( SELECT @rowNO := 0 ) ...

  6. 什么是web资源????

    所谓 web 资源即放在 Internet 网上供外界访问的文件或程序,又根据它们呈现的效果及原理不同,将它们划分为静态资源和动态资源. 1. 什么是静态资源 静态资源是浏览器能够直接打开的,一个 j ...

  7. PHP提取字符串中的手机号正则表达式怎么写

    0. 简介 PHP通过正则表达式提取字符串中的手机号并判断运营商,简单快速方便,能提取多个手机号. 1. 代码 <?php header("content-type:text/plai ...

  8. Redis搭建(六):Redis持久化配置

    一.介绍 Redis的持久化有2种方式: Rdb快照 Aof日志 1. Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 // 如果300 ...

  9. 阻塞和唤醒线程——LockSupport功能简介及原理浅析

    目录 1.LockSupport功能简介 1.1 使用wait,notify阻塞唤醒线程 1.2 使用LockSupport阻塞唤醒线程 2. LockSupport的其他特色 2.1 可以先唤醒线程 ...

  10. 10 华电内部文档搜索系统 search05

    上一节讲述了索引更新的处理方案,这一节首先讲述索引维护的相关方案.每创建一个索引,把文档相关的信息插入到数据库中.这个时候会产生一个唯一的对应的ID,获取这个ID之后,把这个ID又插入到对应的索引文件 ...