按照已有的模板输出<一>(如发票)
按照已有的模板输出<一>
普通的发票基本上都是固定模式,所以我们一般写好固定的模板,把其中需要变动的地方,以特定符号来代替。每次打印发票的时候,只需将其中的特定符号转换成我们需要显示的数据。。。
1) 新建一个txt格式的发票模板,如图6.1 发票模板:
图6.1 发票模板
1)我现在模拟相同情况,编写一个对象实体并赋值
Public class FaPiao{
//合同号
public string Contract { get; set; }
//姓名
public string Name { get; set; }
//站点
public string Site{ get; set; }
//级别 金额等的集合
public List<LevelAndPrice> LevelandPrice{ get; set; }
//总净重
public Decimal Net{ get; set; }
//总皮重
public Decimal Tare{ get; set; }
//总毛重
public Decimal Gross{ get; set; }
//总金额
public Decimal Money { get; set; }
//流水号
public int Serial{ get; set; }
//当前页数
public int Page{ get; set; }
//总页数
public int Pages{ get; set; }
//磅码员
public string Weighter{ get; set; }
//定级员
public string Levelter{ get; set; }
//终端
public string Line{ get; set; }
}
Public class LevelandPrice {
//合同号
public string Contract{ get; set; }
//级别
public string Level{ get; set; }
//净重
public Decimal Weight{ get; set; }
//金额
public Decima Price{ get; set; }
}
给实体赋值,这里我就不赋值了 。根据实际情况赋值就好。
2)给模板变量赋值
/// <summary>
/// 烟叶收购过磅单模板
/// </summary>
/// <param name="templeteFilePath">模板文件路径</param>
/// <param name=" fapiao ">发票对象</param>
/// <param name=" currentPage ">当前页</param>
/// <param name=" totalPage ">总页数</param>
/// <returns> </returns>
Public static string[] GetGdb(string templeteFilePath, FaPiao fapiao, int currentPage, int totalPage)
{
//获得模板
StreamReader objReader = new StreamReader(templeteFilePath, Encoding.UTF8);
//将模板的按照每一行存入到一个string集合中。
string line;
List<string> contents = new List<string>();
while ((line = objReader.ReadLine()) != null)
{
contents.Add(line + "\n");
}
//现在我们需要考虑一下Level,weight,price。因为这个地方一般来说不会只显示一行值,可能有多行值,相当于我们去超市买商品所打的发票,我们买很多商品就会列出很多条目。这是一个动态的。现在我们的考虑如何给这部分动态的赋值。
//查找到level在模板中是第几行,转换来就是查找出在contents集合中的位置,因为上一步代码我们已经按照行数将模板内容存在了contents集合中了。
var index = contents.FindIndex(p => p.Contains("{level}"));
//查找出这一行的模板内容,就是已经找到level所在的行的内容,就是我们需要查找的{level} {weight} {price}
var template = contents[index];
//去掉模板中的这一行内容
contents.RemoveAt(index);
//循环给{level} {weight} {price}循环赋值,将这动态的几行添加到模板中去。
List<LevelAndPrices > levelandPrices= fapiao.LevelandPrice;
for (int i = 0; i < levelandPrices.Count; i++)
{//级别
var tmp = template.Replace("{level}", levelandPrices[i].Level);
//净重
tmp = tmp.Replace("{weight}", levelandPrices[i].Weight.ToString("0.00"));
//金额
tmp = tmp.Replace("{price}", levelandPrices[i].Price.ToString("0.00"));
contents.Insert(index + i, tmp);
}
//循环部分已经添加完成了,现在给模板剩余部分添加数据
string allLine = string.Empty;
for (int i = 0; i < contents.Count - 2; i++)
{
allLine += contents[i];
}
//合同()
allLine = allLine.Replace("{contract}", fapiao.Contract);
//姓名
allLine = allLine.Replace("{name}", fapiao.Name);
//站点
allLine = allLine.Replace("{site}", fapiao.Site);
//打印时间
allLine = allLine.Replace("{date}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//总净重
allLine = allLine.Replace("{net}", fapiao.Net.ToString("0.00"));
//总皮重
allLine = allLine.Replace("{tare}", fapiao.Tare.ToString("0.00"));
//毛重
allLine = allLine.Replace("{gross}", fapiao.Gross.ToString("0.00"));
//金额
allLine = allLine.Replace("{money}", fapiao.Money.ToString("0.00"));
//流水号
allLine = allLine.Replace("{serial}", fapiao.Serial);
//磅码员
allLine = allLine.Replace("{weighter}", fapiao.Weihter);
//定级员
allLine = allLine.Replace("{levelter}", fapiao.Levelter);
//终端
allLine = allLine.Replace("{line}", fapiao.Line);
//当前页
allLine = allLine.Replace("{page}", currentPage.ToString());
//总页
allLine = allLine.Replace("{pages}", totalPage.ToString());
//最后一页加几个换行符,多打印几行
return new[] { allLine, contents[contents.Count - 1]+"\n\n" };
}
GetGdb方法已经给模板中的所有的变量赋值,如果要看打印的效果,直接循环引用GetGdb()方法,循环输出每一行查看效果。。。如果要将这个模板发送给打印机,在和打印机约定好协议后,只需要将string[]转化成为二进制流或者GB2312发送给打印机即可,这要看打印机方需要那种格式。
按照已有的模板输出<一>(如发票)的更多相关文章
- 按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式
按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式 之前写过一篇文章<按照已有的模板输出一(如发票)>,是关于如何给已有的模板赋值.在项目的实践过程 ...
- thinkphp二维数组模板输出方法
thinkphp二维数组模板输出方法 先写个记录,有空再整理发上来
- 《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章
<如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章 问题: VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何 ...
- 已有模板与tp框架的结合 (前台)
已有模板与tp框架的结合 具体步骤 A.复制模板文件到view指定目录 B. 复合css .js.img.静态资源文件到系统指定目录 C. 把静态资源(css,js,img)文件的路径设置为“常量 ...
- 【Thinkphp5】解决模板输出时间戳自动转换为时间格式的问题
背景: 数据库存储时间为时间戳,格式为varchar,模板输出时未进行时间格式化却输出了时间格式 如下图 (数据库存储的时间戳) (页面输出的时间) (未进行格式化的时间代码) (格式化后的时间代码) ...
- 谈谈 Act 的依赖注入 和 模板输出 - 回答 drinkjava 同学提问
1. 背景 依赖注入工具 jBeanBox 的作者 drinkjava 同学最近在 Actframework gitee 项目 的提出了如下评论: 你这个DI工具的出发点可能有问题,一个MVC工具为什 ...
- Django模板输出Dict所有Value的效率问题
一次跑偏之旅! 对于一个惯用C++的人来说,使用Python这种语言的一大障碍就是许多集合类型的操作效率并不如传统的经典数据结构那样直观可见,以及许多实际上涉及到内存分配.对象复制之类的耗时操作被 ...
- thinkphp5.0 模板输出常用内容
1.在模板获取session和cookie等全局变量 {$Think.session.user_id}//输出$_SESSION['user_id']变量 2.获取请求信息 {$Request.con ...
- 已有模板与tp框架结合
具体实现步骤: ①复制模板文件到view指定文件目录: ②复制css.js.img到view指定文件目录: ③把静态资源(css.js.img)文件的路径设置为“常量”信息(在index.php入口文 ...
随机推荐
- Halcon学习之三:有关图像通道的函数(R是三通道,B是1通道,G二通道),排列顺序BGR
黑白摄像机会返回每个像素所对应的能量采用结果,这些结果组成了一幅单通道灰度值图像,而对于RGB彩色摄像机,它将返回每个像素所对应的三个采样结果,也就是一幅三通道图像.下面这些是与图像通道有关的函数: ...
- Arduino学习笔记A6(补充) - 在串口读取多个字符串,并且转换为数字数组
功能如题目. 在串口收到逗号分割的6串数字比如 100,200,45,4,87,99 然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值 代码注释很详细了,就不再说明了. ARD ...
- delphi IOS 后台状态保存
FormSaveState procedure TFrm.FormSaveState(Sender: TObject);begin end; http://stackoverflow.com/ques ...
- delphi IOS 通知 TNotification
delphi IOS 通知 TNotification http://blogs.embarcadero.com/ao/2013/05/01/39450 TNotification http://d ...
- 【开发工具】Jenkins+Gitlab实现自动化部署
我在尝试在容器中安装Jenkins时,初衷是希望使用docker in docker 的模式来实现Jenkins slave容器按需创建.在实现的时候需要在Jenkins 中安装Kubernetes插 ...
- ffmpeg基本用法(转)
FFmpeg FFmpeg 基本用法 本课要解决的问题 1.FFmpeg的转码流程是什么? 2.常见的视频格式包含哪些内容吗? 3.如何把这些内容从视频文件中抽取出来? 4.如何从一种格式转换为另一种 ...
- Struts2 的核心、执行原理
转自: http://www.cnblogs.com/xiadongqing/p/5240615.html 在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样 ...
- Unsupported compiler 'com.apple.compilers.llvmgcc42' selected for architecture 'armv7' Xcode5
刚刚将Xcode更新到Xcode5,一运行报如下错误: Unsupported compiler 'com.apple.compilers.llvmgcc42' selected for archit ...
- MyBatis 体系结构
- S初始化生产环境数据
一.将开发机的库文件导出10.10.1.139开发机服务器,桌面上的BAT文件,将数据库表结构和表数据导出来,导到E:\Repository,设置SADMIN密码永不过期BAT文件内容如下: ::导出 ...