使⽤itext将xml转换为pdf(⼆)
⽂章⽬录
主要是⼀个探索的过程,所以使⽤Java project来⽴项。现在经过将近⼀个⽉的整理和整合,在web项⽬中已经渐近成熟。再总结⼀下。
基本上分为三个模块
- xml的配置
- xml数据结构
- xml解析与数据装配
类似于mvc结构,即xml配置为前端展现view,数据装配为controller,xml对应的数据模型为model。
⽤到了dom4j的相关jar,还有就是jaxb2,这个主要是借鉴⽹上的。
xml配置
主要是dtd约束及xml的编写
dtd⽂件的编码及说明
dtd的主要作⽤是⽤来约束xml的编写规范。
dtd⽂件
<!ELEMENT tablepage(title,tables,include)>
<!ELEMENT tables(table,include)>
<!ELEMENT table(trs,include)>
<!ELEMENT trs(tr)>
<!ELEMENT tr(tds)>
<!ELEMENT tds(td)>
<!ELEMENT td(text)>
<!ATTLIST include file CDATA#IMPLIED>
<!ATTLIST title align CDATA"center"
v-align CDATA"middle"
font-family CDATA#IMPLIED>
<!ATTLIST table entity CDATA#REQUIRED
rows CDATA#IMPLIED
font CDATA"微软雅⿊"
rotate CDATA"false">
<!ATTLIST tr foreach CDATA"false"
entities CDATA"">
<!ATTLIST td align CDATA"center"
v-align CDATA"middle"
rowspan CDATA#IMPLIED
colspan CDATA"微软雅⿊">
dtd⽂件说明
xml-config中配置的是每个pdf对应的xml,下边是参数的dtd⽂档说明
tablepage是xml的root节点,有且只有⼀个
tablepage的⼦节点为title和tables
<!ELEMENT tablepage (title,tables)>
//tablepage下可以有多个table,多个table⽤tables包裹,其⼦节点⽤有且只有⼀个trs
<!ELEMENT tables (table)>
//table⼦节点能且只能是trs
<!ELEMENT table (trs)>
/
/table下可以有多个tr,多个tr⽤trs包裹
<!ELEMENT trs (tr)>
//tr⼦节点能且只能是tds
<!ELEMENT tr (tds)>
//tds⼦节点能且只能是td
<!ELEMENT tds (td)>
<!ELEMENT td (text)>
//包含⽂件,其中file只得是xml-config下的⽂件路径,不包含xml-config,但要包含.xml后缀,file不能为空. //被包含⽂件不能有根节点tablepage
<!ATTLIST include file CDATA #IMPLIED>
//下边是每个标签的熟悉,属性名可以参考html,如有不懂之处,请上⽹搜索
<!ATTLIST title align CDATA "center"
v-align CDATA "middle"
font-family CDATA #IMPLIED>
<!ATTLIST table entity CDATA #REQUIRED
使用dom4j解析xml文件rows CDATA #IMPLIED
font CDATA "微软雅⿊"
//rotate,false:正常A4,true:横向A4
rotate CDATA "false">
<!ATTLIST tr foreach CDATA "false"
//foreach ⽤来指定是否是⼀个循环
//配合下边的entities,entities的数据结构为List<Map<String,Object>>
entities CDATA "">
<!ATTLIST td align CDATA "center"
v-align CDATA "middle"
rowspan CDATA #IMPLIED
//四个边框的宽度,其顺序按照上、右、下、左的顺序设置
//若只有⼀个值则为上、右、下、左
//若两个值则前⼀个值为上下,后⼀个值为左右
border-width CDATA "1 1 1 1"
colspan CDATA "微软雅⿊">
xml编码及说明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tablepage PUBLIC "tablepage" "localhost:8080/dtd/tablepage.dtd">
<tablepage file-name="">
<!-- <title align="center" v-align="middle" font-family="STSong-Light"> -->
<!-- <text>测试标题</text> -->
<!-- </title> -->
<tables>
<table cols="12"font-family="STSong-Light"entity="cpafInfo"rotate="false">
<title align="center"v-align="middle"font-family="STSong-Light">
<text>事务所基本信息</text>
<td colspan="12"align="center"v-align="middle"border-width="1 1 1 1"> <text>基本情况</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle"border-width="2 2">
<text>名称</text>
</td>
<td colspan="10"align="left"v-align="middle">
<text>{{cpafName}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle"border-width="3">
<text>所属⾏政区划</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{divisionProvince}}</text>
</td>
<td colspan="2"align="left"v-align="middle"border-width="0 0">
<text>组织形式</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{orgForm}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>执业许可批准⽇期</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{approDate}}</text>
</td>
<td colspan="2"align="left"v-align="middle">
<text>统⼀社会信⽤代码</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{regisCno}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>执业许可批准⽂号</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{rna}}</text>
</td>
<td colspan="2"align="left"v-align="middle">
<text>执业证书编号</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{cpafCno}}</text>
</td>
<td colspan="2"rowspan="2"align="left"v-align="middle"> <text>注册资本(出资总额)(单位:万元)</text>
</td>
<td colspan="4"rowspan="2"align="left"v-align="middle"> <text>{{totalInves}}</text>
</td>
<td colspan="2"align="left"v-align="middle">
<text>分所数量</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{cpafbNum}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>国际⽹络名称(如有)</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{internetName}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>经营场所</text>
</td>
<td colspan="10"align="left"v-align="middle">
<text>{{officeLocation}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>通讯地址</text>
</td>
<td colspan="10"align="left"v-align="middle">
<text>{{address}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>报备业务联系⼈</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{reporter}}</text>
</td>
<td colspan="2"align="left"v-align="middle">
<text>电⼦邮箱</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{email}}</text>
</td>
</tds>
</tr>
<text>报备业务</text>
</td>
<td colspan="10"align="left"v-align="middle">
<text>{{phone}}</text>
</td>
</tds>
</tr>
</trs>
</table>
<include file="l"/>
</tables>
</tablepage>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tablepage PUBLIC "tablepage" "localhost:8080/dtd/tablepage.dtd"> <table cols="12"font-family="STSong-Light"entity="cpafInfo"
rotate="true">
<title align="center"v-align="middle"font-family="STSong-Light">
<text>测试横向页⾯</text>
</title>
<trs>
<tr>
<tds>
<td colspan="12"align="center"v-align="middle">
<text>基本情况</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>名称</text>
</td>
<td colspan="10"align="left"v-align="middle">
<text>{{cpafName}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>所属⾏政区划</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{divisionProvince}}</text>
</td>
<td colspan="2"align="left"v-align="middle">
<text>组织形式</text>
</td>
<td colspan="4"align="left"v-align="middle">
<text>{{orgForm}}</text>
</td>
</tds>
</tr>
<tr>
<tds>
<td colspan="2"align="left"v-align="middle">
<text>执业许可批准⽇期</text>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论