广告
返回顶部
首页 > 资讯 > 数据库 >XML Publisher 技巧
  • 197
分享到

XML Publisher 技巧

2024-04-02 19:04:59 197人浏览 泡泡鱼
摘要

更多 个人分类: FORM 开发

更多

个人分类: FORM 开发

           

可以采取两种方式编写布局语言,一是 XSL 语句,二是 XMLP 简易语句,个人建议使用前者,因为其是国际通行标准。另外,这两种语法可以混合使用,比如上面的条件格式化行和单元格。
在 RTF 中直接写的只能是 XMLP 简易语句;在窗体域中则上述两者皆可。
标准的页眉页脚中不允许使用窗体域;但扩展的页眉页脚中可以使用。

如果模板中要求多个页眉页脚,使用下面的标记来标示出报表的主体部分    

<? start:body ?>

……

<?end body?>

  • 嵌套模板

          由于在页眉和页脚中不允许使用窗体域,而当报表页眉页脚中希望插入 XML 数据的时候,可以考虑使用嵌套模板。

          嵌套模板是在模板中定义一个子模板,然后在需要的地方调用它,如在页眉页脚中调用它。

          1. 定义子模板

            子模板标记之间可以使用任何的标记和内容,和模板的主体部分没有任何区别

            <? template:internal template name?>

                 ……

            <?end template?>

           2. 调用子模板

              下面两条语句都可以:

               <?call:internal template name?>

               <? call-template:internal template name?>

  • XML中计算除法用div

            例如: <?pick_Qty div req_qty?>

  • XML Publisher 支持 Word 中的分栏功能,使报表输出能够以多栏的方式打印。

              如下是地址簿的多栏打印效果

               XML Publisher 技巧

  • 分页(按组分页)

分页是自然的,但如果想在某处强制分页如新组新页,那么可以使用 Word 的分页符( CTRL+ENTER 快捷键),但会导致最后出现空白页。

可以使用如下几种方式:

1 、分组声明中加 @ section , 如 <? for-each@section:Group_Name ?> ;

2 、 <?end for-each?> 前 ( 不同的 E 中哦 ) 加 <? split-by-page-break:?> 。 这个翻译后,实际上是:

       

        < xsl:if test="position()<last()">

        < xsl:attribute name="break-before">page</ xsl:attribute >

        </ xsl:if >

3 、 <?end for-each?> 前加 < xsl:attribute name="break-after">page</ xsl:attribute > ,

    此法下 RTF 最后无空白页,但 pdf 有空白页;

4 、 <? end for-each?> 前加 < xsl:attribute name="break-before">page</ xsl:attribute >

    此法下 RTF 、 PDF 最后都有空白页。

  • 分页(条件分页)

        任意条件分页,需要借助 IF + 上面的 break-after 或者 break-before , 如:

        <? if:CURRENCY_CODE ="CNY"?>

        < xsl:attribute name="break-before">page</ xsl:attribute >

        <?end if ?>

        注 : 要在 每行 的 <? end foreach ?> 前哦 ; if 和分页代码要写在同一个 E 中 .

  • 分页( 固定行分页 )

        固定行分页,需要借助 IF + 上面的 break-after 或者 break-before , 在行 <? end foreach ?> 前,如下语句控制每页 5 行:

        <? if:position () mod 5 =0?>

        < xsl:attribute name="break-before">page</ xsl:attribute >

        <?end if?>

       在测试过程中发现问题,第一句改为下面这句:

       <? if: position() != 1 and position() mod 5 = 1?>

  • 强制页码从某一个数值起始

<?initial-page-number:pagenumber?>: 参数pagenumber(1.可以是固定的值 2.可以XML传过来的值)

或<?initial-page-number:$pagenumber?>:其中pagenumber为在RTF中自定义的变量.

  • RTF中自定义变量

    • < ?param@begin:parameter_name;parameter_value ?>,引用的话前面要加$

  • IF 语句

The program was <? if:SUCCESS =’N’?>not<?end if?> successful

The program was

not

successful.

The program was <? if@inlines:SUCCESS =’N’?>not<?end if?> successful

The program was not successful.

使用@ inlines 使文本在同一行显示

If-Then-Else 语句

<?xdofx:if element_condition then result1 else result2 end if?>

<? xdofx:If AMOUNT > 1000 Then

                 'Higher‘

             Else If AMOUNT < 1000 then

                 'Lower‘

             Else

                 'Equal‘

             End If?>

条件格式化— Choose 语句

<?choose:?>

<? when:expression ?>

……

<? when:expression ?>

……

<?otherwise?>

……

<?end choose?>

  • 根据条件显示或隐藏行


YEAR MONTH  SALES
foreach   if year month sales endif    endforeach

        其中: foreach                          <?for-each:SALE?>

                  if                                     <?if:SALES>5000?>

                 endif                               <?end if?>

                 endforeach                     <?end for-each?>

  • 根据条件格式化行(加亮,背景等)

<? if@row:condition ?>

< xsl:attribute name="background-color" xdofo:ctx =" incontext "> lightgray </ xsl:attribute >

<?end if?>

如果不加@ row, 则仅局限于单元格


YEAR MONTH  SALES
foreach   format year month sales  endforeach

其中: foreach                    <?for-each:SALE?>

         format                       < ?if@row:position () mod 2=0?>
                                           <xsl:attribute name="background-color" xdofo:ctx="incontext">lightgray</xsl:attribute>

                                           <?end if?>

        endforeach               <?end for-each?>

RGB颜色的写法:

< ?if@row:REF_NO3="After Sub Total:"?>< ?attribute@incontext:background-color;'RGB(255,0,0)'?><?end if?> --背景颜色

< ?if@row:REF_NO3="Before Sub Total:"?>< ?attribute@incontext:color;'#114515'?><?end if?>------字体颜色

<?if:2>1?><fo:block font-size='20pt'><?end if?><?REF_NO2?>  控制字體大小

根据条件显示或隐藏列

            <? if@column:condition ?>

……

<?end if?>


<? if@column:condition ?>

  <?quantity?>

<?end if?>

例如:

<? if@column : TypeName ="PRIVATE"?>

  <?quantity?>

<?end if?>

  • 条件格式化—单元格加亮

我的理解加亮单元格也就是加一个背景,这里的 block 和前面说的 incontext 作用范围有所区别。在 if 后不加@ row 都是指 cell, 加@ row 后 incontext 作用于 row,block 作用于 column。

<? if:debit >1000?>

  < xsl:attribute xdofo:ctx ="block" name="background-color">

  red

  </ xsl:attribute >

<?end if?>

例:


account debit credit
F    account CH1 debit CH2 credit   E

其中: F                              <?for-each:account?>

         CH1                          <?if:debit>1000?>

                                               <xsl:attribute xdofo:ctx="block" name="backgroundcolor">red</xsl:attribute>

                                           <?end if?>

        CH2                           <?if:credit>1000?>

                                              <xsl:attribute xdofo:ctx="block" name=background-color">red</xsl:attribute>

                                           <?end if?> 

        E                                 <?end for-each?>

  • 连续向下累积合计效果

要实现以下效果:


id amt total
1 100 100
2 200 300
3 300 600

构造如下:

set_var


id amt total
F   id amt total   E

其中: set_var             <? xdoxslt:set_variable ($_XDOCTX, ’ Var ’, 0)?>      --定义变量

          F                          <?for-each:id?>

          total                    <? xdoxslt:set_variable ($_XDOCTX, ’ Var ’, xdoxslt:get_variable ($_XDOCTX,’ Var ’) + amt)?>        --累加第行值

                                     <? xdoxslt:get_variable ($_XDOCTX, ’ Var ’)?>                   --通过变量显示累加值

          E                          <?end for-each?>

  • 条件加总

<?sum(current-group)[sourcename!='']/receipt_amt?>

变量知识 :

变量使用“ set/get” 的方式来分配、更新和取得变量的值

<?xdoxslt:set_variable($_XDOCTX, ’variable name’, value)?>

<?xdoxslt:get_variable($_XDOCTX, ’variable name’)?>

<?xdoxslt:set_variable($_XDOCTX, ’x’, xdoxslt:get_variable($_XDOCTX, ’x’ + 1)?>

<xsl:variable name="start" xdofo:ctx="incontext" select="position()"/>
< xsl:value-of select="$start"/>

  • 排序

<?sort:element name?>

<?sort:SAL;'ascending';data-type='text'?>

升序/降序:ascending / descending

数据类型:text / number / date

注意以上字符串的大小写,这里的语法对大小写是敏感的。

可以有多个排序字段; 写在for-each和end for-each之间的同一个E中或不同的E中.

<?for-each:G_VENDOR_NAME?><?sort:VENDOR_NAME?><?sort:INVOICE_NUM?><?end for-each?>

  • 数字和日期格式化

数字格式化

XML Publisher 支持两种数字格式化方式:

Word 本身的数字格式掩码

oracle 的 format-number 功能

<?format-number:fieldname;’999G999D99’?>

日期格式化

XML Publisher 支持三种日期格式化方式

Word 本身的日期格式掩码

Oracle 的 format-date 功能

<? format-date:date_string ; ’FORMAT_MASK’;?>

<? format-date:hiredate ;’YYYY-MM-DD’?>

Oracle 的抽象日期格式掩码语法

<? format-date:fieldname ;’MASK’?>

<? format-date:hiredate ;’SHORT’?>

<? format-date:hiredate ;’LONG_TIME_TZ’?>

抽象日期格式掩码列表


掩码

US 输出实例

SHORT

2/31/99

MEDIUM

Dec 31, 1999

LONG

Friday, December 31, 1999

SHORT_TIME

12/31/99 6:15 PM

MEDIUM_TIME

Dec 31, 1999 6:15 PM

LONG_TIME

Friday, December 31, 1999 6:15 PM

SHORT_TIME_TZ

12/31/99 6:15 PM GMT

MEDIUM_TIME_TZ

Dec 31, 1999 6:15 PM GMT

LONG_TIME_TZ

Friday, December 31, 1999 6:15 PM GMT

  • 矩阵报表(也可guide中搜索:split-column-data)

XML数据:

<ROWSET>
< RESULTS>
< INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
< YEAR>2005</YEAR>
< QUARTER>Q1</QUARTER>
< SALES>1000</SALES>
< /RESULTS>
< RESULTS>
< INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
< YEAR>2005</YEAR>
< QUARTER>Q2</QUARTER>
< SALES>2000</SALES>
< /RESULTS>
< RESULTS>
< INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
< YEAR>2004</YEAR>
< QUARTER>Q1</QUARTER>
< SALES>3000</SALES>
< /RESULTS>
< RESULTS>
< INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
< YEAR>2004</YEAR>
< QUARTER>Q2</QUARTER>
< SALES>3000</SALES>
< /RESULTS>
< RESULTS>
< INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
< YEAR>2003</YEAR>
...
< /RRESULTS>
< RESULTS>
< INDUSTRY>Home Furnishings</INDUSTRY>
...
< /RESULTS>
< RESULTS>
< INDUSTRY>Electronics</INDUSTRY>
...
< /RESULTS>
< RESULTS>
< INDUSTRY>Food and Beverage</INDUSTRY>
...
< /RESULTS>
< /ROWSET>

想要的结果:


INDUSTRY 2005 2004 2003
Motor Vehicle Dealers 3000 6000 1200
Home Furnishings 3200 7770 3300
Electronics 9000 9000 4300
Food and Beverage 1200 900 1600

模板结构:


INDUSTRY   header column for   year   end
for     INDUSTRY for   sum(sales)   end

其中:   header column                          <?horizontal-break-table:1?>

            for:                                                < ?for-each-group@column:RESULTS;YEAR ?>

            YEAR                                           <?YEAR?>

            end                                              <?end for-each-group?>

            for:                                               <?for-each-group:RESULTS;INDUSTRY?>

            INDUSTRY                                <?INDUSTRY?>

            for:                                               < ?for-each-group@cell:currentgroup();YEAR ?>

            sum(Sales)                               <?sum(current-group()//SALES)

            end                                              <?end for-each-group?>

            end                                              <?end for-each-group?>

  • SQL与XML


SQL Statement

Usage

Description

2+3

<?xdofx:2+3?>

2-3

<?xdofx:2-3?>

2*3

<?xdofx:2*3?>

2/3

<?xdofx:2/3?>

2**3

<?xdofx:2**3?>

指数

2||3

<?xdofx:2||3?>

连接

lpad(‘aaa’,10,’.’)

<?xdofx:lpad(‘aaa’,10,’.’)?>

左边填充

rpad(‘aaa’,10,’.’)

<?xdofx:rpad(‘aaa’,10,’.’)?>

右边填充

decode(’xx’,’bb’,’cc’,’xx’,’dd’)

<?xdofx:decode(’xx’,’bb’,’cc’,’xx’,’dd’)?>

decode 判断功能

instr(’abcab’,’a’,2)

<?xdofx:instr(’abcab’,’a’,2)?>

Instr 查找子串位置

substr(’abcdefg’),2,3)

<?xdofx:substr(’abcdefg’),2,3)?>

查找子串

replace(name,’John’,’Jon’)

<?xdofx:replace(name,’John’,’Jon’)?>

替换

to_number(‘12345’)

<?xdofx:to_number(‘12345’)?>

转换为数字

to_char(12345)

<?xdofx:to_char(12345)?>

转换为字符

sysdate()

<?xdofx:sysdate()?>

系统当前日期

Http://blog.csdn.net/rfb0204421/article/details/7478090

http://www.cnblogs.com/quanweiru/arcHive/2012/10/19/2730842.html


您可能感兴趣的文档:

--结束END--

本文标题: XML Publisher 技巧

本文链接: https://www.lsjlt.com/news/46007.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • XML Publisher 技巧
    更多 个人分类: Form 开发 ...
    99+
    2022-10-18
  • Fluent Mybatis让你摆脱Xml文件的技巧
    目录一、啥是Fluent-Mybatis二、SpringBoot + Fluent-Mybatis三、官方链接一、啥是Fluent-Mybatis 与Mybatis-Plus类似,是...
    99+
    2022-11-12
  • .NET Framework处理XML操作技巧是怎样的呢
    .NET Framework处理XML操作技巧是怎样的呢,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。.NET Framework应用范围还是比较广泛的。许多开发人员都会使用它...
    99+
    2023-06-17
  • FlutterReusableLottieAnimations技巧
    目录正文封装相关加载数据使用的lottie动画测试一下正文 你是否想要在app里面新增一些炫酷的动画,但是呢?虽然Flutter提供了很多的动画,但是自己绘制吧,要么效果调整上过...
    99+
    2022-12-08
    Flutter Lottie Animations Flutter 技巧
  • Python单元测试的9个技巧技巧
    目录1、requests项目单元测试状况2、简单工具类如何测试2.1 test_help 实现分析2.2 test_hooks 实现分析2.3 test_structures 实现分...
    99+
    2022-11-12
  • CSS书写技巧和CSSHACK技巧有哪些
    这篇文章将为大家详细讲解有关CSS书写技巧和CSSHACK技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是CSS Hack? 不同的浏览器对C...
    99+
    2022-10-19
  • JavaScript小技巧
    这篇文章主要介绍了 JavaScript小技巧,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.判断数据类型使用 Object.protot...
    99+
    2022-10-19
  • FlutterRecoveringStreamErrors小技巧
    目录正文简单封装override bind()测试一下正文 你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去? 一般的做法就是 一个达到try catch,然...
    99+
    2022-12-08
    Flutter Recovering Stream Errors Flutter Stream
  • Python3 小技巧
    完全个人总接 每个文件头部都可以加入这个,或者放到用单独一个文件,再import *。其实都一样,只需要一行false=False;true=True;none=null=None;hid=lambda o:"0x%X"%id(o) 作用...
    99+
    2023-01-31
    小技巧
  • JavaScript简写技巧
    目录1. 合并数组 2. 合并数组(在开头位置) 3. 克隆数组 4. 解构赋值 5. 模板字面量 6. For循环 7. 箭头函数 8. 在数组中查找对象 9. 将字符串转换为整数...
    99+
    2022-11-12
  • javascript写法技巧
    JavaScript是一种用于Web开发的高级编程语言,它已成为现代Web开发中必不可少的一部分。无论是在前端还是后端开发,JavaScript都是必学的语言之一。学习JavaScript需要花费一定的时间和精力,同时也需要一些技巧和诀窍。...
    99+
    2023-05-14
  • awr常用技巧
    awr保留10天,每小时收集一次:begin DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(14400,60); end;手动收集awr一次:exec ...
    99+
    2022-10-18
  • mysql 索引技巧
    索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。 在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 myta...
    99+
    2022-05-31
    mysql 技巧
  • sql造数技巧
    begin     for i in 1 .. 10000      loop         ...
    99+
    2022-10-18
  • MySQL 查询技巧
    1)获取指定偏移量的数据SELECT * FROM alarm LIMIT 0,9; SELECT * FROM alarm LIMIT 9 OFFSET 0; (在mysql 5以后支持这...
    99+
    2022-10-18
  • PyChram使用技巧
    1、打开当前文件路径 project-->右键-->Show in Explorer 2、修改字体大小 a、工作台字体: file-->setting-->editor-->colors&fonts...
    99+
    2023-01-30
    使用技巧 PyChram
  • kindle3使用技巧
    开关机: 滑动开关键到右面,停住,等几秒就关机了,开机也是一样操作。 3G上网: 按照网上的帖子在Amazon注册之后,浏览网页的时候却出现了这个提示: Due to local restrictions, web browsi...
    99+
    2023-01-31
    使用技巧
  • golang写法技巧
    Go语言(Golang)是一种开源的静态编译型语言,由Google开发。该语言具有简洁、高效和可靠的特性,尤其适用于大规模分布式系统的开发。在使用Golang进行开发时,有许多的写法技巧可以提高代码的可读性、可维护性和性能等方面。下面将介绍...
    99+
    2023-05-22
  • python技巧 switch case
    不同于C语言和SHELL,python中没有switch case语句,关于为什么没有,官方的解释是这样的使用Python模拟实现的方法:   def switch_if(fun, x, y):    if fun == 'add':  ...
    99+
    2023-01-30
    技巧 python case
  • redis面试技巧
    前言Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作