长沙北大青鸟作者:科泰校区
PHP一个最大的优点就是它对新技术的支持非常容易,这种语言的可扩展性使得开发人员能够很方便地添加新的模块,而且遍布世界的技术团体的支持和众多扩展模块的支持使得PHP已经成为功能最齐全的Web编程语言之 一。目前可得到的扩展模块已经能够使开发人员执行IMAP和POP3操作,可以动态产生图象和Shockwave Flash动画,进行信用卡验证,敏感数据的加密解密,还能够解析XML格式的数据。但这还不是全部,现在,又有一个新的模块可以与PHP进行绑定了,那就是PDFLib扩展模块,它能够让开发人员动态产生PDF(Adobe Portable Document Format)格式的文件,下面就先看看如何在PHP里使用这个模块。
为了能够使PHP具有操作PDF格式文档的能力,你必须先在你的系统里安装PDFLib扩展库,如果你使用的是Lunix系统,你可以从 http://www.pdflib.com/pdflib/index.html下载一个并进行编译,如果你使用的是Windows系统,那就更简单了,只需要下载一个编译好的PDFLib库,然后在PHP的配置文件里把相应的行的注释去掉即可。
extension=php_pdf.dll
如果是动态装载,也可以是参照下面的命令:
dl("php_pdf.dll");
此外,你还必须有一个Adobe Acrobat PDF阅读器,用来浏览PDF格式,如果你没有,你可以从http://www.adobe.com/免费下载。
一旦你做好了前期准备,就可以创建PDF文件了,下面就是一个简单的例子:
<?php
// 创建一个新的PDF文档句柄
$pdf = PDF_new();
// 打开一个文件
PDF_open_file($pdf, "PDFTest.pdf");
// 开始一个新页面(A4)
PDF_begin_page($pdf, 595, 842);
// 得到并使用字体对象
$arial = PDF_findfont($pdf, "Arial", "host", 1);
PDF_setfont($pdf, $arial, 10);
// 输出文字
PDF_show_xy($pdf, "This is an exam of PDF Documents, It is a good Lib,",50, 750);
PDF_show_xy($pdf, "If you like,please try yourself!", 50, 730);
// 结束一页
PDF_end_page($pdf);
// 关闭并保存文件
PDF_close($pdf);
?>
<?php
$pdf = PDF_new();
PDF_open_file($pdf, "LineExam.pdf");
PDF_begin_page($pdf, 595, 842);
$arial = PDF_findfont($pdf, "Arial", "host", 1);
PDF_setfont($pdf, $arial, 12);
// 设定直线的颜色
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0);
// 在左上角放置一个Logo标识
$image = PDF_open_image_file($pdf, "jpeg", "logo.jpg");
PDF_place_image($pdf, $image, 50, 785, 0.5);
// 在Logo标识下画出直线
PDF_moveto($pdf, 20, 780);
PDF_lineto($pdf, 575, 780);
PDF_stroke($pdf);
// 在页面底部画出另外一条直线
PDF_moveto($pdf, 20,50);
PDF_lineto($pdf, 575, 50);
PDF_stroke($pdf);
// 输出一些文字
PDF_show_xy($pdf, "Meng's Corporation", 200, 35);
PDF_end_page($pdf);
PDF_close($pdf);
?>
//设定填充颜色
PDF_setcolor($pdf, "fill", "rgb", 1, 1, 0);
// 设定边框线的颜色
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0);
// 画矩形,后面的四个参数分别是左下角的坐标X、Y和宽度、高度
PDF_rect($pdf, 50, 500, 200, 300);
PDF_fill_stroke($pdf);
PDF_setcolor($pdf, "fill", "rgb", 0, 1, 0);
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 1);
// 画出圆,参数分别是圆心坐标和圆的半径
<html>
<head>
<title>利用PHP创建PDF文档(饼图)</title>
</head>
<body>
<h3>饼图生成器</h3>
<table cellspacing="5" cellpadding="5">
<form action="pie.php" method=POST>
<tr>
<td>请输入饼图中每一块的数据值,以(,)分割开:</td></tr>
<tr><td><input type=text name=data></td></tr>
<tr><td><input type=submit value="产生PDF饼图"></td></tr>
</form>
</table>
</body>
</html>
下面是pie.php文件的代码:
<?php
// 接受书库
$data = $_POST['data'];
$slices = explode(",", $data);
// 初始化变量
$sum = 0;
$degrees = Array();
$diameter = 200;
$radius = $diameter/2;
// 设定每一块饼图的颜色,用数组存储
$colours = array(array(0,0,0),array(0,0,1),array(0,1,0),
array(1,0,0),array(0,1,1),array(1,1,0),
array(1,0,1));
// 计算总的数值
$sum = array_sum($slices);
// 把每一块分别转换成相应的百分数(360度圆)
for ($y=0; $y<sizeof($slices); $y++) {
$degrees[$y] = ($slices[$y]/$sum) * 360;
}
// 开始创建 PDF 文档
$pdf = PDF_new();
PDF_open_file($pdf, "chart.pdf");
PDF_begin_page($pdf, 500, 500);
PDF_setcolor($pdf, "stroke", "rgb", 1, 1, 0);
PDF_moveto($pdf, 250, 250);
PDF_lineto($pdf, 350, 250);
PDF_stroke($pdf);
for ($z=0; $z<sizeof($slices); $z++)
{
// 设定填充颜色
PDF_setcolor($pdf, "fill", "rgb", $colours[$z][0],
$colours[$z][1], $colours[$z][2]);
// 计算每个圆弧的终点坐标
$end_x = round(250 + ($radius * cos($last_angle*pi()/180)));
$end_y = round(250 + ($radius * sin($last_angle*pi()/180)));
// 用直线分割每一块圆弧
PDF_moveto($pdf, 250, 250);
PDF_lineto($pdf, $end_x, $end_y);
// 计算并画出圆弧
PDF_arc($pdf, 250, 250, $radius, $last_angle,($last_angle+$degrees[$z]));
// 保存最后的角度
$last_angle = $last_angle+$degrees[$z];
// 填充颜色
PDF_fill_stroke($pdf);
}
// 重画外圆轮廓
PDF_circle($pdf, 250, 250, 100);
PDF_stroke($pdf);
PDF_end_page($pdf);
PDF_close($pdf);
// 如果要直接输出到客户端的话,把下面的代码加上
$buf = PDF_get_buffer($p);
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=Pie_php.pdf");
print $buf;
PDF_delete($p);
?>