</head>
<body>
<table>
<tr><th>品名</th><th>批号</th><th>等级</th><th>仓库</th><th>库位</th><th>数量</th><th>日期</th></tr>
<tr><td>W2308</td><td>1234</td><td>a</td><td>01</td><td>0001</td><td>200</td><td>20020609</td></tr>
<tr><td>W2307</td><td>4321</td><td>a</td><td>01</td><td>0001</td><td>100</td><td>20020609</td></tr>
</table>
</body>
<foot>
<line top="5" bottom="5" size="50%" linetype="single" show="false"/>
<text fontsize="12" fontlaguage="cn" align="center">建表日期:20020611</text>
</foot>
</pdfreport>
用XMLParser对该XML文档解析后,得到一个包含所有信息的对象树,我们可以非常方便的访问其中的内容。生成的PDF报表如下图:
程序片断如下:
<? include( "../include/pc_init.inc" );?>
<? include( "xmlparser.inc" );
<?
$xmlobject=getRootNode("report.xml");
$pageSet=$xmlobject->attrs;
// get the report-head
$head=$xmlobject->nodes[0];
// code ignored...
?>
<?
function draw_line(&$parent,$line){
$line = &pc_create_object( $parent, "line" );
$line->pc_set_linestyle( $line->attrs["LINETYPE"]);
$line->pc_set_width( $line->attrs["SIZE"] );
$line->pc_set_alignment( "center" );
if($line->attrs["SHOW"]==false){
$line->pc_set_linecolor( "white" );
}
$line->pc_set_margin( array( "top" => $line->attrs["TOP"], "bottom" => $line->attrs["BOTTOM"], "left" => 0, "right" => 0 ) );
}
function draw_text(&$parent,$text){
// code ignored...
}
function draw_table(&$parent,$table){
// code ignored...
}
function addhead(&$parent,$head){
for($i=0;$i< $head->n;$i++){
switch ($head->nodes[$i]->name){
case "LINE":draw_line($parent,$head->nodes[$i]);break;
case "TEXT":draw_text($parent,$head->nodes[$i]);break;
}
}
}
//..
?>
<?
// Create a PDF Document
$PDF = &pc_create_pdf( array( "Author" => "cyman", "Title" => "a report example" ) );
// Create an A4-format page
$Page1 = &pc_create_page( $PDF, $pageSet["PAGETYPE"]);
addhead($Page1,$head);
$PDF->pc_draw();
?>
6.总结
在几个月来的毕业设计过程中,虽然忙碌,却非常充实。通过对一个实际的课题的分析,研究,论证,实现。感觉收获颇多。目前,这套系统已投入使用,收到了非常满意的效果,可以很容易的做出美观实用的报表、单据等。但是,由于时间上的仓促以及自己水平的有限,这套系统仍有许多不足之处。其中最遗憾就是,没有能定义出一套对各种文档(包括报表、单据、手册等等)都通用的XML标记,并编制通用的程序将这个XML文档转化为PDF,就如同浏览器解析HTML一样。这样就不必为每一种文档都定义各自的XML标记并编写相对应的转换程序,可以大大提高工作效率。
虽然毕业设计已经结束,但是我将会今后的日子里继续这个课题的研究。