首页 > 作文

用PHP编写PDF文档生成器

更新时间:2023-04-06 07:39:07 阅读: 评论:0

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_tfont($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,plea try yourlf!”, 50, 730);

// 结束一页

pdf_end_page($pdf);

// 关闭并保存文件

pdf_clo($pdf);

?>

然后保存成php文件,在浏览器里进行浏览,php就会执行上面的代码,它产生一个新的pdf文件,并保存到指定的位置。

现在我们分析一下什么的代码,要使用php创建pdf文件,有四个步骤:1,创建文档句柄;2,注册文档的字体和颜色;3,用pdflib提供的函数向文件句柄写文字或画图;4,保存文档。

首先,创建pdf文档句柄,语法如下:

$pdf = pdf_new();

这个任务是由pdf_new()函数完成的,它返回一个pdf文档的句柄,这个句柄将会被后续的所有操作使用。

下一步要做的,就是给pdf文件一个名字,由pdf_open_file()函数完成,它需要先前创建的文件句柄和自定义的文件名做参数:

pdf_open_file($pdf, “pdftest.pdf”);

一旦我们创建了文档,就可以用pdf_begin_page()函数在其中插入新页面了:

pdf_begin_page($pdf, 595, 842);

然后用pdf_end_page()结束页面。

注意这里,在pdf_begin_page()函数里,有另外两个参数,他们分别代表页面尺寸的宽和高,单位是磅(point,1磅等于1/72英寸),或许在这里数学并不是你的强项,php还提供了大多数标准页面尺寸,象a4等,上面的例子就是使用a4的尺寸。

在调用pdf_begin_page()函数和pdf_end_page()函数之间的代码是向pdf文档了写内容的,内容可以是文字、图象以及几何图形等。例子中只是写了一行文字,先得到一个字体,然后把文字写到文档里。通过pdf_findfont()和pdf_tfont()函数选择和注册字体是很方便的,pdf_findfont()函数预备了一种文档中要使用的字体,需要的参数有字体的名字,使用的编码,字体是否要嵌入到pdf文件中。pdf_findfont()函数返回一个字体对象,它将会在pdf_tfont()函数里使用。

$arial = pdf_findfont($pdf, “arial”, “host”, 1);

pdf_tfont($pdf,$arial, 10);

一旦我们设定了字体,就可以使用pdf_show_xy()函数向页面中的指定位置写字符串了。

pdf_show_xy($pd2015年感动中国f, “this is an exam of pdf documents, it is a good lib,”,50, 750);

pdf_show_xy($pdf, “if you like,plea try yourlf!”, 50, 730);

pdf_show_xy()函数用来向页面写内容,最后两个参数是要写入的字符串的坐标位置,注意坐标的原点(0,0)是在文档的左下角。一旦文字写完了,页面就可以关闭了pdf_end_page(),当然你也可以写更多的页。所有的页面写完之后,用pdf_clo()函数关闭文档,此时文档就回保存到调用pdf_open_file()函数时指定的文件名和路径下,文档句柄随之销毁。

pdflib库能做的事情还远不止这些,还可以在页面里加入图象,我们以前面的文件为例,在文字的下面添加一个图象文件,下面的语句实现了添加图象功能:

$image = pdf_open_image_file($pdf, “jpeg”, “pdfimagetest.jpg”);

pdf_place_image($pdf, $image, 50, 650, 0.25);

是不是很简单?pdf_open_image_file()函数打开一个图形文件,可以接受的图象类型有:gif, jpeg, tiff 和 png,该函数返回图象句柄,pdf_place_image()函数利用前面的图象句柄,把图象插入到pdf文档中。注意这里的坐标位置是指图象的左下角,最后一个参数是图象显示时的比例因子,1是与实际大小一样显示,0.5是按原来尺寸的一半显示。

除了在pdf文档里画出现有的图象以外,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_tfont($pdf, $arial, 12);

// 设定直线的颜色

pdf_tcolor($pdf, “stroke”, “rgb”, 0, 0, 0);

// 在左上角放置一个logo标识

$image = pdf_open_image_file($pdf, “jpeg”, “logo.jpg”);

pdf_place_image($pdf, $i小脚丫mage, 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_clo($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_tcolor($pdf, “stroke”, “rgb”, 0, 0, 0)有好几个参数,其中的颜色填充模式有stroke、fill、both三种选项,颜色可以是rgb或cmyk配色方案的颜色值。值得注意的是:pdf_tcolor()函数中使用的值是颜色的百分比,也就是说是该颜色的亮度,比如:如果想设为红色(rgb:255,0,0),你可以这样写:pdf_tcolor($pdf, “stroke”, “rgb”, 1, 0, 0),如果想设为黄色,可以这样:pdf_tcolor($pdf, “stroke”, “rgb”, 1, 1, 0)。

要想画带填充色的长方形和圆形,可以使用下面的方法:

//设定填充颜色

pdf_tcolor($pdf, “fill”, “rgb”, 1, 1, 0);

// 设定边框线的颜色

pdf_tcolor($pdf, “stroke”, “rgb”, 0, 0, 0);

// 画矩形,后面的四个参数分别是左下角的坐标x、y和宽度、高度

pdf_rect($pdf, 50, 500, 200, 300);

pdf_fill_stroke($pdf);

pdf_tcolor($pdf, “fill”, “rgb”, 0, 1, 0);

pdf_tcolor($pdf, “stroke”, “rgb”, 0, 0, 1);

// 画出圆,参数分别是圆心坐标和圆的半径

pdf_circle($pdf, 400, 600, 100)

此外,pdflib还提供了书写文档摘要信息的函数,这些函数以pdf_t_info_*()开头,这些信息可以包括:文档的作者、标题、内容,主题等。下面是几个常用的函数:

pdf_t_info_author($pdf, “net_lover”);

pdf_t_info_creator($pdf, “meng xianhui”);

pdf_t_info_title($pdf, “php exam”);

pdf_t_info_subject($pdf, “php”);

pdf_t_info_keywords($pdf, “php pdf pdflib”);

当用acrobat reader打开这样的文档时,在菜单“文件”-“文档属性”-“摘要”里就能看到上面写进去的信息。

说到这里,相信大家对如何使用pdflib创建pdf文档有了基本的了解了吧。下面,我们就以一个实际的例子来看看如何为我们的工作服务。这个例子就是根据提供的数据来生成饼图,首先,建立一个数据输入表单,输入饼图中每一块的大小。文件如下:

<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;

$radi培训学习体会us = $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_tcolor($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_tcolor($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, $endassume名词_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_clo($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 erver iries 400 和 zries s/390等,具体的运行环境请随时访问他们的网站得到最新的资料。

本文发布于:2023-04-06 07:38:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/78b8a06dc7295c9a8c0105270a158adf.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:用PHP编写PDF文档生成器.doc

本文 PDF 下载地址:用PHP编写PDF文档生成器.pdf

标签:函数   文档   句柄   文件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图