按照已有的模板打印小票lt;二gt; ——调用windows打印机打印 可设置字体样式

本文主要是介绍按照已有的模板打印小票lt;二gt; ——调用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方法传入带有字体样式的内容的参数,就可以了。

 

如果打印的模板没有这么多的样式变化。代码还可以更简便些。。和我写的加以综合自己摸索摸索吧。

这篇关于按照已有的模板打印小票lt;二gt; ——调用windows打印机打印 可设置字体样式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525222

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...