`

用PHP编写PDF文档生成器

PDF 
阅读更多

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文件,在浏览器里进行浏览,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_setfont()函数选择和注 册字体是很方便的,PDF_findfont()函数预备了一种文档中要使用的字体,需要的参数有字体的名字,使用的编码,字体是否要嵌入到PDF文件 中。PDF_findfont()函数返回一个字体对象,它将会在PDF_setfont()函数里使用。


$arial = PDF_findfont($pdf, "Arial", "host", 1);

PDF_setfont($pdf,$arial, 10);


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


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_show_xy()函数用来向页面写内容,最后两个参数是要写入的字符串的坐标位置,注意坐标的原点(0,0)是在文档的左下角。 一旦文字写完了,页面就可以关闭了PDF_end_page(),当然你也可以写更多的页。所有的页面写完之后,用PDF_close()函数关闭文档, 此时文档就回保存到调用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_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_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);


// 画矩形,后面的四个参数分别是左下角的坐标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);


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


PDF_circle($pdf, 400, 600, 100)


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


PDF_set_info_author($pdf, "net_lover");

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


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

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

?>

 

运行上面的程序,并输入不同数值,你将会得到不同的饼图。

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等,具体的运行环境请随时访问他们的网站得到最新的资料。

来源:http://www.knowsky.com/3241.html

分享到:
评论

相关推荐

    使用PHP生成PDF文档1

    在本文中,我们将深入探讨如何使用PHP生成PDF文档,特别是通过TCPDF类库来实现这一功能。TCPDF是一个强大的PHP库,它允许开发者创建、修改和处理PDF文档,且全面支持UTF-8 Unicode编码和从右至左书写的语言。 首先...

    php生成pdf phplib纯中文文档

    "纯中文文档"则表明该教程或文档是用中文编写,方便中文用户阅读和学习。 描述中提到的"php扩展"可能指的是PHP的函数库或插件,它们可以扩展PHP语言的功能,使得PHP能够处理PDF文件的生成。具体到"PDFlib",这是一...

    FPDF: PDF生成器

    这个库的独特之处在于它完全由PHP编写,不需要任何外部依赖,如Adobe Acrobat,Ghostscript或其他PDF阅读器。通过FPDF,开发者可以直接在PHP代码中控制PDF的布局,包括添加文本、图像、线条、表格等元素,从而实现...

    PHP HTML 生成 PDF

    其中一个常用的开源工具是TCPDF,它是一个用PHP编写的PDF生成库,支持Unicode,可以处理图像、表格、超链接等复杂元素。TCPDF提供了丰富的API,允许开发者自定义PDF的各个方面,如字体、颜色、页面大小等。 另一个...

    html2pdf:官方项目| 用PHP编写HTML到PDF转换器

    Html2Pdf是用PHP编写HTML到PDF转换器,并且与PHP 5.6到7.4兼容。 它允许将有效HTML转换为PDF格式,以生成发票,文档等文件,... 您必须为Html2Pdf编写HTML代码,而不必尝试直接转换已经存在的html页面。 已经...

    数据字典生成器【MYSQL】

    标签中提到的"php",意味着这个工具可能是用PHP语言编写的,PHP是一种广泛用于Web开发的服务器端脚本语言,能够轻松地与MySQL数据库集成。这使得该工具特别适合那些使用PHP进行MySQL数据库开发的团队。 在...

    laravel生成pdf

    以上内容展示了在Laravel中使用tcpdf类库生成PDF文件的整个流程,包括如何配置环境、如何编写代码、如何输出PDF等。随着现代Web技术的发展,类似tcpdf这样的库能够帮助开发者高效地解决开发中遇到的各类问题,提升...

    html2pdf_v4.01

    HTML2PDF是用PHP编写的,这意味着它可以在服务器端运行,处理HTML内容并生成PDF。PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发,因此HTML2PDF可以无缝集成到基于PHP的Web应用中。 3. **JavaScript支持...

    一个基于XML的文档描述语言,使得动态网页语言(JSP、ASP、PHP等)和模板引擎可以高效的生成PDF等版式文档

    总之,XDOC(mini)是一种强大的工具,它将XML的灵活性与PDF的呈现能力结合,为动态Web应用提供了一种高效、灵活的文档生成解决方案。通过掌握XDOC,开发者可以更便捷地创建和维护复杂的版式文档,提升项目的质量和...

    PHP编写的25个游戏脚本.pdf

    本文档“PHP编写的25个游戏脚本.pdf”提供了25个用PHP实现的游戏脚本示例,涵盖了从简单的骰子投掷到更复杂的随机名称生成器等多种功能。 首先,我们要了解的是PHP中的随机数生成。在游戏开发中,随机数是非常关键...

    Laravel开发-pdf-lumen

    这个库是一个包装器,它基于dompdf,一个用PHP编写的PDF生成库,允许我们从HTML代码直接创建PDF文档。通过K98kurz/pdf,我们可以轻松地将HTML模板转换为专业品质的PDF输出,这对于生成报告、发票或其他需要打印或...

    php将word等文件转PDF或swf

    TCPDF是一个强大的PHP类,能够生成PDF文档,支持多语言和Unicode,而dompdf则是一个基于HTML和CSS的PDF生成器,它能够解析HTML内容并将其转换为PDF。 对于Word转SWF,可能需要使用到像PHPSWFTools这样的工具。...

    CodeIgniter 操作PDF ( Generating PDF files using CodeIgniter )

    一个常见的选择是TCPDF,这是一个用PHP编写的开源库,支持多种字符集、页面方向、图像插入、表格等。在CodeIgniter中使用TCPDF,你需要将TCPDF库下载到你的项目中,通常放在`application/third_party`目录下。 接...

    Windows下实现php在线预览功能

    - 使用COM组件中的WScript.Shell在PHP中运行SWFTools的转换命令,然后利用FlexPaper(一个开源的在线文档查看器)来显示生成的SWF文件。 4. **FlexPaper的使用**: - FlexPaper是一个开源的Swf文件查看器,支持...

    PHP实现图片转PDF

    `FPDF`是一个用PHP编写的用于生成PDF文档的开源库,广泛应用于各种PHP项目中。 ##### FPDF基础概念 - **基本原理**:`FPDF`的工作原理主要是通过发送命令给PDF文档流来构建文档。这意味着它实际上是在创建一个PDF...

    软著源码自动生成2.zip

    《软著源码自动生成2.zip》是一款专为软件著作权申请设计的工具,它能够帮助开发者整理并生成符合申请要求的代码文档。在IT行业中,软件著作权是保护开发者知识产权的重要方式,确保其软件创意和劳动成果不受侵犯。...

    openapi-generator,openapi生成器允许自动生成api客户端库(sdk生成)、服务器存根、文档和配置,并给出openapi规范(v2,v3).zip

    3. **文档生成**:根据OpenAPI规格自动生成易于理解的API文档,如HTML、Markdown或PDF格式,有助于提升开发者对API的理解和使用。 4. **配置文件生成**:可以创建配置文件,用于控制生成的代码的结构、样式和其他...

    PHP+核心技术与最佳实践.pdf

    不过,根据标题“PHP+核心技术与最佳实践.pdf”可以推测文档内容与PHP语言的核心技术以及在实际开发中的最佳实践有关。在进行这部分内容的生成时,我可以依照这些推测来介绍PHP的核心技术和最佳实践的相关知识点。 ...

    laravel5 PHP框架中文翻译文档PDF版

    - **结构生成器**:描述如何使用结构生成器创建和修改数据库表。 - **迁移与数据填充**:说明如何通过迁移管理数据库表结构的变化,以及如何填充测试数据。 - **Redis**:介绍如何在Laravel5中集成Redis服务。 ####...

    php单元测试文档pdf格式

    **骨架生成器的作用:** - **自动生成测试类:** 根据现有的类自动生成对应的测试类框架。 - **生成类骨架:** 从测试类反向生成类的骨架。 #### 十九、PHPUnit与Selenium **Selenium简介:** - **Selenium RC:...

Global site tag (gtag.js) - Google Analytics