仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3103|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之用PHP编写PDF文档生成器

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:29:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
实现固定数量的几张图片的上传;再如调试软件ZendStudio的使用,看了很多次老师的应用,但总感觉用的不顺手,不懂那么多的数据值,到底哪一个才是真正的问题所在;还有如数据库语句的封装,我只会用简单的函数来进行封装。   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等,详细的运转情况请随时会见他们的网站失掉最新的材料。
  我先把我自己学习PHP的过程做一下概括:
冷月葬花魂 该用户已被删除
沙发
发表于 2015-2-16 04:55:39 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
透明 该用户已被删除
板凳
发表于 2015-3-4 23:59:20 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
admin 该用户已被删除
地板
发表于 2015-3-5 17:53:04 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
愤怒的大鸟 该用户已被删除
5#
发表于 2015-3-11 00:54:32 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
蒙在股里 该用户已被删除
6#
发表于 2015-3-15 17:23:41 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-16 23:44:58 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
深爱那片海 该用户已被删除
8#
发表于 2015-3-17 06:10:10 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
山那边是海 该用户已被删除
9#
发表于 2015-3-18 00:05:00 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
简单生活 该用户已被删除
10#
发表于 2015-3-25 21:23:01 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
第二个灵魂 该用户已被删除
11#
发表于 2015-3-26 23:37:50 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
精灵巫婆 该用户已被删除
12#
发表于 2015-4-1 08:08:30 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
13#
发表于 2015-4-4 04:23:41 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
老尸 该用户已被删除
14#
发表于 2015-4-11 08:36:36 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
变相怪杰 该用户已被删除
15#
发表于 2015-4-12 15:23:57 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
飘飘悠悠 该用户已被删除
16#
发表于 2015-4-12 17:57:18 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
小女巫 该用户已被删除
17#
发表于 2015-4-16 22:13:04 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
只想知道 该用户已被删除
18#
发表于 2015-4-17 10:32:32 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
兰色精灵 该用户已被删除
19#
发表于 2015-5-2 04:50:42 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
若天明 该用户已被删除
20#
发表于 2015-6-4 17:23:09 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-29 01:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表