来源:自学PHP网 时间:2014-12-25 09:57 作者: 阅读:次
[导读] 用PHP编写PDF文档生成器,php一个最大的优点就是它对新技术的支持非常容易,这种语言的可扩展性使得开发人员能够很方便地添加新的模块,而且遍布世界的技术团体的支持和众多扩展模...
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的配置文件里把相应的行的注释去掉即可。
一旦你做好了前期准备,就可以创建PDF文件了,下面就是一个简单的例子:
// 创建一个新的PDF文档句柄 $pdf = PDF_new();
PDF_open_file($pdf, "PDFTest.pdf");
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文件,在浏览器里进行浏览,PHP就会执行上面的代码,它产生一个新的PDF文件,并保存到指定的位置。 现在我们分析一下什么的代码,要使用PHP创建PDF文件,有四个步骤:1,创建文档句柄;2,注册文档的字体和颜色;3,用PDFLib提供的函数向文件句柄写文字或画图;4,保存文档。 首先,创建PDF文档句柄,语法如下:
下一步要做的,就是给PDF文件一个名字,由PDF_open_file()函数完成,它需要先前创建的文件句柄和自定义的文件名做参数:
注意这里,在PDF_begin_page()函数里,有另外两个参数,他们分别代表页面尺寸的宽和高,单位是磅(point,1磅等于1/72英寸),或许在这里数学并不是你的强项,PHP还提供了大多数标准页面尺寸,象A4等,上面的例子就是使用A4的尺寸。 在调用PDF_begin_page()函数和PDF_end_page()函数之间的代码是向PDF文档了写内容的,内容可以是文字、图象以及几何图形等。例子中只是写了一行文字,先得到一个字体,然后把文字写到文档里。通过PDF_findfont()和PDF_setfont()函数选择和注册字体是很方便的,PDF_findfont()函数预备了一种文档中要使用的字体,需要的参数有字体的名字,使用的编码,字体是否要嵌入到PDF文件中。PDF_findfont()函数返回一个字体对象,它将会在PDF_setfont()函数里使用。
PDF_setfont($pdf,$arial, 10);
PDF_show_xy($pdf, "If you like,please try yourself!", 50, 730);
PDFLib库能做的事情还远不止这些,还可以在页面里加入图象,我们以前面的文件为例,在文字的下面添加一个图象文件,下面的语句实现了添加图象功能:
PDF_place_image($pdf, $image, 50, 650, 0.25);
除了在PDF文档里画出现有的图象以外,PDF模块还提供了许多函数来让我们画出几何图形。比如:直线、圆、长方形等几何图案,下面就是一段画直线的实现方法:
$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);
$image = PDF_open_image_file($pdf, "jpeg", "logo.jpg"); PDF_place_image($pdf, $image, 50, 785, 0.5);
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_moveto(), PDF_lineto() 和 PDF_stroke()。上面的例子是先用PDF_moveto($pdf, 20, 780)函数把光标移动到坐标(20,780),然后用PDF_lineto($pdf, 575, 780)函数定义直线的另外一个点的坐标(575,780),最后用PDF_stroke($pdf)画出线。设定颜色的函数PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0)有好几个参数,其中的颜色填充模式有stroke、fill、both三种选项,颜色可以是RGB或CMYK配色方案的颜色值。值得注意的是:PDF_setcolor()函数中使用的值是颜色的百分比,也就是说是该颜色的亮度,比如:如果想设为红色(RGB:255,0,0),你可以这样写:PDF_setcolor($pdf, "stroke", "rgb", 1, 0, 0),如果想设为黄色,可以这样:PDF_setcolor($pdf, "stroke", "rgb", 1, 1, 0)。
PDF_setcolor($pdf, "fill", "rgb", 1, 1, 0);
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0);
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);
PDF_set_info_creator($pdf, "Meng Xianhui"); PDF_set_info_title($pdf, "PHP Exam"); PDF_set_info_subject($pdf, "PHP"); PDF_set_info_keyWords($pdf, "PHP PDF PDFLib");
说到这里,相信大家对如何使用PDFLib创建PDF文档有了基本的了解了吧。下面,我们就以一个实际的例子来看看如何为我们的工作服务。这个例子就是根据提供的数据来生成饼图,首先,建立一个数据输入表单,输入饼图中每一块的大小。文件如下:
<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>
// 接受书库 $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);
for ($y=0; $y<sizeof($slices); $y++) { $degrees[$y] = ($slices[$y]/$sum) * 360; }
$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);
{ // 设定填充颜色 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_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); ?>
运行上面的程序,并输入不同数值,你将会得到不同的饼图。 PDFLib是一个兼容性很好的模块,你不但可以用PHP编写,还可以用java,C#,VB.NET,VB5/6(ActiveX/COM),asp(VBScript/Jscript),Borland Delphi, Windows Script Host,ColdFusion4.5+,C/C++,Python,Perl,RPG;支持的平台不仅仅有Windows,还有Unix/linux,Mac OS,IBM eServer iSeries 400 和 zSeries S/390等,具体的运行环境请随时访问他们的网站得到最新的资料。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com