简体版
繁体版
英文版

用 Grid++Report 实现支票套打

概述

支票打印要求在将支票数据准确的打印在空白支票的对应位置,主要有两点需要注意:1、要求数据打印输出位置准确,2、要求数据的书写格式符合支票填写的要求。本文档就将说明用 Grid++Report 实现支票打印的过程,从中可以感受到 Grid++Report 实现票据打印的便利与快速。

在 Grid++Report 安装之后,实现支票打印的例子程序位于每种编程语言的例子目录的‘PrintInForm’子目录下,对应的报表模板文件为‘PrintCheck.grf’。

准备任务

  1. 精确的测量出支票的长度与宽度,我们测量出支票的宽度为23厘米,长度为8厘米。
  2. 用扫描仪制作出空白支票的图像,要求图像方正不扭曲,长宽比例不发生变化。在安装目录的‘Samples\Reports\Image\支票背景图.JPG’就是我们制作的支票图像。

报表模板设计要点

  1. 定义报表的页面设置:将宽度设为8cm,高度为23cm,将方向设为‘横向’,将四个页边距全部设为零。
  2. 插入一个报表头,报表头的高度为支票的长度(8cm)。
  3. 定义背景图:为报表的‘背景图’属性加载‘Samples\Reports\Image\支票背景图.JPG’图像文件,切换到页面视图就可以看到背景图显示在设计面板中。为了让背景图在打印预览时可见。应将报表的‘背景图预览’属性设为‘是’。
  4. 定义支票数据参数:为每一项支票数据定义一个对应的报表参数。
  5. 定义数据显示部件框:因为有背景图的显示,只要把部件框拖动到背景图中对应的位置就实现了输出位置的精确定位。因为支票数据已经对应定义了参数,所以应该采用静态文字框或综合文字框关联参数的方式来显示支票数据项。
  6. 定义年月日数据显示格式:支票中的‘年月日’要求按大写金额数字填写,如‘年’对应的参数的格式定义为‘$$$0000’,‘$$$’表示输出数字为大写金额数字,‘0000’表示整数部分固定输出四位,没有小数位。
  7. 定义大写金额数据显示格式:定义其对应输出综合文字框的格式为‘$$’,‘$$’表示将数字值按大写金额的方式输出。
  8. 定义金额线框数据显示格式:金额值套打右边对应的金额线框,定义表达式将金额值乘100,定义显示格式为‘0’;定义综合文字框的‘字间距’属性,让每位数字都输出在对应的金额位区域。
  9. 要保证内容较多的数据项能完整显示出来,定义部件框的‘按需缩小字体’属性为‘是’。

下图即为我们制作的例子模板:

编程

将支票数据传递给报表

在报表的 Initialize 事件中将支票数据传递给报表,为报表中定义的各个参数设置值即可。下面是对应的C++代码。

virtual void Initialize(void)
{
//将支票数据传递给报表,设置各个参数的值
m_pGridppReport->ParameterByName("BankName")->AsString = "中国工商";
m_pGridppReport->ParameterByName("PayTo")->AsString = "锐浪软件技术有限公司";
m_pGridppReport->ParameterByName("Year")->AsInteger = 2008;
m_pGridppReport->ParameterByName("Month")->AsInteger = 8;
m_pGridppReport->ParameterByName("Day")->AsInteger = 8;
m_pGridppReport->ParameterByName("Amount")->AsFloat = 20080808;
m_pGridppReport->ParameterByName("Usage")->AsString = "庆祝北京奥运开幕";
m_pGridppReport->ParameterByName("Remark")->AsString = "Grid++Report 用户包括通用软件厂商与系统集成商,企业行政事业单位,个人用户等";
}

通过程序改变数据项的显示文字

支票中的月日数字如果等于10或20 则要显示为‘壹拾’或‘贰拾’。如果1x或2x,则要显示为‘壹拾几’或‘贰拾几’,如15为壹拾伍,28为贰拾捌。而Grid++Report 通过设置格式串并不能直接得到这样的数据,我们在报表中为月日对应参数设置的‘格式’为‘$$00’,表示按大写金额数字输出各位数字,整数部分固定为两位,没有小数位。如果不用程序进行干预,10格式化出来的显示文字为‘壹零’,15格式化出来的显示文字为‘壹伍’。所以要通过 TextBoxGetDisplayText 事件来改变这些数据的显示文字。下面是对应的C++代码。

virtual void TextBoxGetDisplayText(IGRTextBox *pTextBox)?
{
//支票中的月日数字如果等于10或20 则要显示为‘壹拾’或‘贰拾’
//如果1x或2x,则要显示为‘壹拾几’或‘贰拾几’,如15为壹拾伍,28为贰拾捌
//而Grid++Report通过设置格式串并不能直接得到这样的数据,所以要通过 TextBoxGetDisplayText
//事件改变其显示文字
if (strcmp(pTextBox->Name, "stMonth") == 0)
{
int Month = m_pGridppReport->ParameterByName("Month")->AsInteger;
if (Month == 10)
{
pTextBox->DisplayText = "壹拾";
}
else if (Month > 10)
{
string RawDisplayText = pTextBox->DisplayText;
RawDisplayText.insert(2, "拾");
pTextBox->DisplayText = RawDisplayText.c_str();
}
}
else if (strcmp(pTextBox->Name, "stDay") == 0)
{
int Day = m_pGridppReport->ParameterByName("Day")->AsInteger;
if (Day == 10)
{
pTextBox->DisplayText = "壹拾";
}
else if (Day == 20)
{
pTextBox->DisplayText = "贰拾";
}
else if (Day > 10)
{
string RawDisplayText = pTextBox->DisplayText;
RawDisplayText.insert(2, "拾");
pTextBox->DisplayText = RawDisplayText.c_str();
}
}
}

 

粤ICP备05037369号 Copyright © 2005-2015 rubylong.cn(版权所有:广州锐浪软件技术有限公司)
地址:广州市天河区五山路135号519-04室 电话: 020-82520837
EMAIL:sales@rubylong.cn(销售) support@rubylong.cn(技术支持) 销售QQ:1067004956 641243789