RTF模板开发

 

关于RTF模板的总结关于RTF变量的使用和定义:
定义变量:<?xdoxslt:set_variable($_XDOCTX, ’变量名’,变量的值)?>
取得变量:<?xdoxslt:get_variable($_XDOCTX, ‘变量名’)?>
在RTF里面定义变量时也分全局变量和局部变量,如果在RTF的最前面定义一个变量那么它就在整个RTF模板里面有效,对于局部变量如
<FOR-EACH DATA1><?xdoxslt:set_variable($_XDOCTX, ’X1’, 0)?>
<FOR-EACH DATA2><?xdoxslt:set_variable($_XDOCTX, ’X2’, 0)?>
<END FOR-EACH DATA2>
<END FOR-EACH DATA1> 
X1,X2都是局部变量名称,它们的初始值都是0,X1在内循环和外循环里面都有效,而X2只在内循环里面有效,对于变量的数据类型它是在定义的时候以它的初始值为标准上面两个的数据类型为数字类型, <?xdoxslt:set_variable($_XDOCTX, ’X3’, ‘’)?>如X3它的数据类型为字符类型!
关于变量在循环里面的自增运算,如我要在RTF里面实现X1自增那么我要在循环里面加上
<?xdoxslt:set_variable($_XDOCTX,'x1',xdoxslt:get_variable($_XDOCTX, 'x1')+1)?>
如
<? FOR-EACH DATA1?> 
……………………………………
<?xdoxslt:set_variable($_XDOCTX,'x1',xdoxslt:get_variable($_XDOCTX, 'x1')+1)?>
…………………………………….
<? END FOR-EACH DATA1?>
每一次循环都会对X1实现自增1
如果两个变量相加求和则应该:<? xdoxslt:get_variable($_XDOCTX, '变量名')+ xdoxslt:get_variable($_XDOCTX, '变量名')?>
关于时间和页码的问题时间
如果想在打印的时候取得当前打印的时间则可以在RTF中加入如下代码:
<?xdoxslt:sysdate('yyyy-MM-dd HH24:mm:ss')?>则取的当前报表的打印时间并以24小时制显示,如果将HH24改为HH则以12小时显示
页码
一般插入页码直接在页眉和页脚插入但如果想在RTF模板中的任何一个位置中插入页码,先在WORD工具条中的“插入“中找到“域”这一项会弹出如图所示的一个对话框:
按照如图所示类别选中“编号”域名选中“PAGE”,格式为你在打印时你自己想要的页码格式。
注:如果在某种情况下想让页码从特定值开始,比如在组中当你循环完一次进行下次循环需要页码重编号时,则需要借助命令,如在<?for-each:组名?>后写:<?initial-page-number:1?>。这样就达到了每进行一次新的循环时就会将页码初始化为1。
关于WORD表格属性的一些使用
(1)       当你不想让表格中的数据行跨页显示时,选中表格的属性弹出如下对话框,将此中的“允许破布断行去掉就OK”
 
(2)表格中当有些行中的数据它要在打印出来的每页顶部以标题形式再现时,就将上图中的“在各页顶端以标题行形式重复出现“勾选上就OK,但是此方法在当数据层次较多时可能会出现不是你想要的结果!
条件语句的使用一般条件语句
<?if:条件语句?>
………….
<?end if?>
<?if:xdoxslt:get_variable($_XDOCTX,'X1')=’1’?>

<?../../SEGMENT1?>
<?end if?>
例子:
<?if:域的名字(一般来源于XML数据源)=’AA’?>
……
<?end if?>
(1)如果用IF条件语句通过变量来判断是否满足条件那么如下:
<?if:xdoxslt:get_variable($_XDOCTX,'变量名')=’AA’?>
…………………..
<?end if?>
(2)对于AND条件的判定语句
<?if:域的名字=’AA’ and域名=’BB’?>
……
<?end if?>
判断空值
(1)    元素存在,值不空时
   <?if:Element_Name!=" "?>想要的结果<?end if?>
(2)    元素存在,值空时
<?if:Element_Name and Element_Name=" "?>想要的结果<?end if?>
(3)     元素不存在
<?if:not(Element_Name)?>想要的结果<?end if?>对于判断中的双引号””也可以可以用单引号’’,还有判断等于空的时候我从别人以前的文档中看到他们写成!=””(中间没有空格)而我这样用这个判断语句一直不能达到想要的效果,当我写成!=" "(中间有空格)的时候就可以达到我想要的效果!
单元格加色
<?if:WT2<6001?><xsl:attribute xdofo:ctx="block" name="background-color">yellow</xsl:attribute><?end if?>  
此处的WT2是来源于XML的数据,也可以是任何其它条件语句!“yellow“是该单元格要被加的颜色
嵌套模板/子模板
嵌套模板也就是在模板中定义一个子模板,然后在任何你想的地方调用它,特别是在页眉和页脚,因为在这两个地方不能使用窗体域,而用字模板则可以突破它的局限性
1、 定义子模板
子模板中可以使用任何的标记和内容,和主模板没有任何区别。
<?template:internaltemplate mingming?>(mingming为字模板的名字)
……
<?end template?>
2、 调用子模板
<?call:internaltemplate mingming?>
关于强制分页
一般我们可以直接用WORD自带的分布符(CTRL+ENTER快捷键),但是它会导致报表的最后多出一页空白的页,为了避免空白页的出现我们一般有两种方法:
(1)    在声明组的时候加@section,如
<?for-each@section:组名?>
……………………………………
<?end for-each:组名?>
(2)    在<end for-each>前加<?split-by-page-break:?>
(3)    条件分页
<?if:XML数据或者变量=’’?>
  <xsl:attribute name=’break-before’>page</xsl:attribute>或者<?split-by-page-break:?>
<?end if?>
关于强制分页还有很多注意的地方,如<?for-each@section:组名?>是对一个表格进行循环而它放在表格外那么<?end for-each:组名?>和<?split-by-page-break:?>也得放在表格外,反之已然否则达不到你想要的分页效果!对于分页符<?split-by-page-break:?>放的位置还得多去自己摸索!
关于页内合计,结转合计,连续合计页内合计
要实现按页合计值,需分两步:声明合计变量、显示合计变量(可带格式)。
1、声明页内合计变量
<?add-page-total: pagetotal;’element’?>
pagetotal:为页内合计变量名称
Element:为被合计的XML元素名称
注意:对对应的ELEMENT进行页内合计时必须将此声明语句写在ELEMENT对应的组内,否则无正确引用
2、可在页内的任意地方显示合计数(一般在页眉和页脚显示直接将下面的代码写到页眉或页脚)
<?show-page-total: pagetotal?>
<?show-page-total: pagetotal;’$0.00’?>(保留两位小数点并带$显示)
连续合计
连续合计有点类似于使用变量,分为三个步骤:
1、在被连续合计的字段的组外面定义变量,并SET它的值为0
<?xdoxslt:set_variable($_XDOCTX,’变量名’, 0)?>
2、 计算累计值,将下面这段代码与被连续累积的字段写在同一个组内
 <?xdoxslt:set_variable($_XDOCTX, ‘变量名’, xdoxslt:get_variable($_XDOCTX,’变量名) + XML数据字段名)?>(注:此代码中的两个变量名为同一个变量等同于X=X+XML数据字段名)
3、 任意地方显示累计值
<?xdoxslt:get_variable($_XDOCTX,’变量名)?>
结转合计
在有些报表中需要将合计显示在每一页的页尾和下一页的页就需要用到结转合计了,其实结转合计就是页内合计的延伸,得先在RTF中定要初始化一个用来计算结转合计的变量如:
(1)<?init-page-total: X1?>(X1为结转合计的变量名)
(2)<?for-each:组名?>
……………………………………
<?add-page-total:X1;被结转合计的数据(来源XML)?>
<?end for-each:组名?>
<?end-page-total:X1?>(关闭页内合计)
(3)<?end-page-total:X1?>是在所有的循环组结束完以后写在最后面的
(4)如果要显示结转合计变量只要在每一页的页头写上如下代码就OK了
<xdofo:inline-total
display-condition="exceptfirst"
name="X1">
Brought Forward:
<xdofo:show-brought-forward
name="X1"
format="99G999G999D00"/>
</xdofo:inline-total>
注:display-condition为显示条件
(FIRST:为只在第一页显示
LAST:只在最后一页显示
exceptfirst: 除了第一页都显示
exceptlast: 除了最后一页都显示
everytime: 每一页都显示)
format为结转合计显示的格式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值