喵喵~的专栏

Django 生成PDF(三)——关于RML

接上文,,本节讲述一下关于报表所需的RML标准。RML(Report Market Language),即报表标记语言,其语法类似于HTML、XML语言。RML中也有标签、样式一说,如果你英文比较厉害,请戳以下链接下载查看:

如果你的英语跟我一样很菜的话,就接着往下看吧:

环境准备:

RML文档中包含可以直接执行的Python源代码,因此需要用到Preppy,下载地址:,文档下载地址:

RML常用语法解析:

1,定义文档:

<document filename="financial_products.pdf" compression=’1′>

定义文档,filename为文件名称,compression表示是否压缩文档,1表示压缩。

2,在文档中引用Python代码:

{{script}}import locale;locale.setlocale(locale.LC_ALL, ”);{{endscript}}

script标签中所嵌套的即为python代码,建议使用一个物理行包含多个逻辑行,因为在script标签之间不太好使用固定格式的python代码(很难编译通过,实战经验)。

3,预定义模板文件:

template通常指定一段模板文件,譬如说页眉、页脚等,在页面布局中引用。pageSize表示页面的大小,"(595, 842)" 即为一张A4纸的大小。leftMargin和rightMargin表示页面的左右边距。举个例子,下面的一段代码定义了一段:

<template pageSize="(595, 842)" leftMargin="72" rightMargin="72" > <pageTemplate id="head" pageSize="a4 portrait"><pageGraphics><image file="{{STATIC_DIR}}/img/db_logo.jpg" x="50" y="780" width="302" height="53"/><fill color="black"/><setFont name="song" size="10"/><lineMode width="2"/><lines>40 765 555 765</lines><fill color="#ADD8E6"/><lineMode width="1" /><lines>0 60 595 60</lines><fill color="#778899"/><setFont name="song" size="10"/><drawString x="235" y="40">客服热线:4006-816-886 </drawString><drawString x="450" y="40">当前第<pageNumber countingFrom="1"/>页 / 总共4页</drawString></pageGraphics><frame id="second" x1="35" y1="85" width="525" height="660"/></pageTemplate></template>

4,定义一段页面样式:

<paraStyle name="common" fontName="song" fontSize="12" leading="18" spaceBefore="6" spaceAfter="12" firstLineIndent="0.5in" /><paraStyle name="alignLeft" alignment="left" fontName="song" fontSize="12" leading="15" spaceBefore="6" spaceAfter="8" firstLineIndent="0.2in" /> 上面一段代码定义了两种样式:

这里的name="common" 以及name="alignLeft"只是对样式取了一个别名而已,以方便在文档的正文部分调用(详细见下文)。指定字体为song(即:前文中提到的注册的宋体字, leading指定行间距,spaceBefore 、spaceAfter表示段前、段后的间距,firstLineIndent表示首航缩进。alignment表示对其方式。

5,在页面中引用预先定义的模板文件:

<story><setNextTemplate name="head"/></story> <story>音译为故事,可以将每一个PDF文档想象成一个完美的故事,其标签包裹的东西即为故事的内容,setNextTemplate 标签标示调用文档前面预定义的模板文件,模板文件可以有多个,工作指定name属性来表示具体引用哪一个模板文件。

6,在页面中使用段落:

<para style="alignLeft"><b><u>2. 声明与保证</u></b></para><para style="alignLeft"> <b>1.0</b> 双方均分别向另一方声明并保证该方具有完全适当的资格与能力订立、接收及履行本合同以及以其为一方的其他任何有关文件。</para> 用para标签表示段落,用style属性指定该段落使用的属性,属性名称为上文中预定义好的属性名称。一次定义,多处调用。在段落中也可以用到一些常用的RML标记,类似于HTML语言,如:<b></b>包裹的一段文字表示加粗显示;<i></i>包裹的文字表示斜体显示等等。

7,在文档中添加一张图片:

<image file="{{STATIC_DIR}}/img/common/cachet.gif" x="350" y="350" width="168" height="168"/> 添加图片一般使用image标签, file属性指定图片文件的位置,在生成PDF时,reprotlab会从file指定的文件中使用Python的urllib相关库读取文件,直接指定磁盘中文件的地址貌似难以实现,因此指定该属性时最好指定一个通过浏览器可以访问的链接。x和y属性指定从哪一点开始画图片,width和height指定所画区域的宽度和高度。

以上即为上文中生成PDF所涉及到的RML代码,希望对你会有所帮助,更详细的解释,直接下载官方文档细细斟酌即可。

既有美妙的风景,也会有称不上景、只有风的地方。

喵喵~的专栏

相关文章:

你感兴趣的文章:

标签云: