按照已有的模板输出(如发票)

按照已有的模板输出

普通的发票基本上都是固定模式,所以我们一般写好固定的模板,把其中需要变动的地方,以特定符号来代替。每次打印发票的时候,只需将其中的特定符号转换成我们需要显示的数据。。。

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发送给打印机即可,这要看打印机方需要那种格式。

时间: 2024-08-07 08:40:30

按照已有的模板输出(如发票)的相关文章

模板输出的数组中增加三元运算符来判断

得出一个好用的判断方法,在模板输出的数组中增加三元运算符来判断,挺方便的.当然你也可以用Ajax~ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题</title> </head> <body> 我的口号是什么?——><{$data[

关于ThinkPHP5.0的渲染模板输出

在ThinkPHP的最新版本5.0 RC2中,渲染模版输出方法display()已经接近被废弃了. 在\think\view.php中,已经不存在display()方法. 而在\think\controller.php中,display()的函数体跟fetch()一样:     /**      * 加载模板和页面输出 可以返回输出内容      * @access public      * @param string $template 模板文件名      * @param array  

Thinkphp 框架模板变量及模板输出

Thinkphp框架 模板操作变量输出:{:function(-)}        //执行方法并输出返回值{~function}         //执行方法不输出{@var}                 //输出Session变量{#var}                 //输出Cookie变量{&var}                 //输出配置参数 {%var}                 //输出语言变量{.var}                 //输出GET变量{

(9) PHP 随笔---Smarty模板引擎 已有模板和Smarty结合 11

◇已有模板结合Smarty的步骤: ◇把模板复制到template目录. ◇先找到js代码<script>...</script>,在<script>....</script>外层加上{literal}<script>...</script>{/literal} ◇把站点的静态文件给引入,可以设置文件路径,或者直接复制粘贴文件所在文件夹.(路径是相对入口程序文件‘xxx.php’来设置) ◇路径都要替换,包括js文件,css文件,图片

thinkphp框架(已有模板和tp框架做结合)

关于thinkphp框架的基本介绍 第一次访问后创建的目录 路由的四种形式 创建应用(在首个index.php中) Controller里的自配需要文件 调用View视图的模板 注意:Controller和View里的视图名称保持一致,$this->display();就能直接调用: 设置登录网站的首页面 将写好的展示给用户的静态页面代码输入在内,就可访问 (本机的登录地址:localhost/xampp/shop/index.php/Home/Index/index) 访问到的界面 只是有简单

ThinkPHP 模板输出 display 方法

默认输出 模板默认输出是指输出指令 display 方法中不带任何参数,系统默认输出对应模板. 格式: $this->display(); 输出对应的模板: TPL/模板默认主题/[分组名/]模块名/操作名+模板后缀 其他输出 输出当前模块的其他操作模板 格式: $this->display('操作名'); 例子: <?php class IndexAction extends Action{     public function index(){         //输出当前模块其他

《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章

<如何让TT T4模板输出多个文件(VS2010中)>-- access911.net 文章 问题:   VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何编程让一个tt文件可以输出多个结果文件. 回答:   <#@ Import Namespace="System.Text" #> <#@ import namespace="System.IO" #> <#@ Import Namespace=

Aspose.Excel模板输出中名称管理器的使用

模板输出中名称管理器的使用 上面的内容是通过"公式"->"名称管理器"来设置的. 名称管理器设置之后就可以在C#模板操作中使用了. 原文地址:https://www.cnblogs.com/liuniublogs/p/9991324.html

Django模板输出Dict所有Value的效率问题

一次跑偏之旅! 对于一个惯用C++的人来说,使用Python这种语言的一大障碍就是许多集合类型的操作效率并不如传统的经典数据结构那样直观可见,以及许多实际上涉及到内存分配.对象复制之类的耗时操作被隐藏在看似简单的接口之中.加上Python的文档只强调如何使用,大部分时候都对实现的细节和效率语焉不详.这使我在使用Python时,会有一种比用C++更加小心翼翼的心态.当有许多个方式来加工一个数据集时,我不得不仔细考虑哪一种方式才是效率最高的,因为无法从文档中获得相关的信息,所以只能靠经验推测或是阅读