怎样在php中使用PDF文档功能


Posted in PHP onOctober 09, 2006

写给Hunte:
好久不在网上见你,真有点说不出来的感觉,没有hunte的phpuser.com什么也不是. 转了你站上的两篇文章, 特翻了一篇了以示致歉.

----------------------------------------------------
原作者:Perugini Luca (www.phpbuilder.com)
译者:znsoft (http://www.phpease.com)
---------------------------------------------------
转载请保留以上信息,否则请不要转载!

PHP捆绑PDFLIB库也许是最好的web出版平台了。一对典型的用法:

需求小册子
电子商务发货单

通过这个指南,你可以学会怎样使用php4中的PDF扩展来创建PDF文档。
我们也把焦点放在用mysql数据来创建PDF文档。

内容摘要

安装PDFLib 3.0.1 和有PDF支持的PHP4.01pl2(译注:你可以安装最新的php4.03pl1)

提取PDF文档
(我假设你有一点配置php的经验)

安装PDFLib和有PDF支持的PHP。

需求:

PHP 4.02+ 从 http://php.net 下载
PDFLib 3.0.1 从 http://www.pdflib.com 下载

这是一个怎样让PDFLib3.0.1和php4一起工作的小秘方:(老外很幽默的^_^)

直接从http://www.php.net下载 ext/pdf/pdf.c的补丁来支持PDFLib v 3.0.1

下载PDFLib3.0.1从此处 http://www.pdflib.com
适用的补丁你可以在此找到 http://www.pdflib.com/pdflib/patches.html

配置,Make和安装PDFLib

#./configure --enabled-shared-pdflib
#make
#make install
你会使得 PDFLib 安装在 /usr/local/lib .

配置 PHP
#./configure --with-apxs=/usr/bin/apxs \
--with-gd --with-pdflib=/usr/local --with-mysql=/usr/local \
--with-config-file-path=/etc/httpd --with-zlib-dir=/usr \
--with-ttf=/usr/local/include \
--with-jpeg-dir=/usr --with-tiff-dir=/usr \
--with-system-regex=yes --enable-debug=no

#make
#make install

更新系统库
插入 /usr/local/lib 进 /etc/ld.so.conf (文件)

#/sbin/ldconfig

测试和验证
现在你需要重启apache
#apachectl restart

拷贝pdfclock.php 到的httpd目录中(就是web目录)...测试....一切正常。

重要信息

要使得PHPLIb和字体一起工作你必须注意PDFLib手册中的UPR部分。
最简单的用PDFLib使用字体的办法是拷贝PDFlib tar包中的标准UPR描述文件(fonts/pdflib.upr)到你的工作目录。

提取PDF文档
现在我们已经作好了如飞地生成PDF文档的条件!

在这个小例子中我们要生成FLYStore公司的需求小册子,当然是从目录数据库中提取数据。

准备数据库
我假设你有一点数据库的经验,最小限度,我真的只希望你懂得怎样创建一个数据库并向其中插入表。
创建表 catalogue:

create table catalogue(
id smallint(8) unsigned DEFAULT '0' NOT NULL,
item varchar(100) DEFAULT '' NOT NULL,
description tinytext,
img_data longblob,
imgname varchar(60),
imgsize varchar(60),
imgtype varchar(60),
price smallint(8) unsigned DEFAULT '0' NOT NULL,
PRIMARY KEY (id),
KEY item (item(20))
);

送出MIME头信息
为了让我们的正确地显示出来,我们需要送出正确的头信息到用户的浏览器。
在PHP中我们可以用header函数实现。下面的代码送出正确的MIME类型到浏览器。

header( "Content-type: application/pdf" );
header( "Content-Disposition: attachment; filename=modulo.pdf" );
header( "Content-Description: PHP3 Generated Data" );

重要信息
你必须知道的是在送出头信息前不能输出任何东西。一个常见的错误是在文件的开头存在空格。

从mysql中取数

这儿我们用一个从目录数据中提数据的简单代码片断。
<?php

$link = mysql_connect ("127.0.0.1", "flyadm", "flystore")
or die ("Could not connect");

mysql_select_db ("flystore", $link);

$result = mysql_query ("SELECT * FROM catalogue", $link)
or die ("Invalid query");

$data = mysql_fetch_row ($result);
....
....
mysql_close ($link);

?>

生成PDF文件

为了生成PDF文档,我们需要作经过以下步骤:

打开一个PDF流,并使它和一个句柄关联:
$pdf = PDF_open();

(Optional) Set document information like Author, Title, Subject, etc
(可选的)设置文档信息,如作者,标题,主题,等

开始一个新页(PDF文件可以用不同的版面生成不同的页,比如肖像,前景...):
PDF_begin_page($pdf, 595, 842);
(可选的)设置一个超链接:
PDF_add_outline($pdf, "Item ".$data[1]);

选择字体类型, 尺寸 (pdf_set_font($pdf, "Helvetica-Bold" , 20, winansi);) 表现模式

插入文本在X.y位置:
PDF_show_xy($pdf, "Item : " .$data[1], 100, 700);

或插入图片在X.Y位置:
pdf_place_image($pdf, $im, 100, 300, 3);

刷新文本缓冲区并关闭PDF流。
PDF Coordinate Systems
What we need to do to locate a string or picture in some part of the PDF page,
在PDF页的很多地方我们需要定位字符串和图片,转换英制单位到DTP点值.

在PDFLIB手册的45页写到:

".. .缺省的坐标系统的原点在页面的左下角,用DTP点作为单位:
1 pt = 1 inch /72 = 25.4mm /72 = 0.3528 mm
"

这儿是生成PDF文件的代码片断:
<?php

$pdf = PDF_open();
pdf_set_info_author($pdf, "Luca Perugini");
PDF_set_info_title($pdf, "Brochure for FlyStore");
pdf_set_info_creator($pdf, "See Author");
pdf_set_info_subject($pdf, "FlyStore");
PDF_begin_page($pdf, 595, 842);
PDF_add_outline($pdf, "Item ".$data[1]);
pdf_set_font($pdf, "Helvetica-Bold" , 20, winansi);
pdf_set_text_rendering($pdf, 0);
pdf_show_xy($pdf, "FlyStore Catalogue 2000",50,780);

PDF_show_xy($pdf, "Item : " .$data[1], 100, 700);

PDF_show_xy($pdf, "Description : " .$data[2], 100, 620);

$im = PDF_open_jpeg($pdf, "pass4_sml.jpg");
pdf_place_image($pdf, $im, 100, 300, 3);
pdf_close_image ($im);

pdf_stroke($pdf);
PDF_end_page($pdf);
PDF_close($pdf);

?>

在最后,我要提示你这篇文章不是PDF教程,如果你需要更多的PDF文档的信息和用法,你可以访问
http://www.pdfzone.com/ 和 http://www.planetpdf.com/.

我希望对你有用。

PHP 相关文章推荐
PHP4中实现动态代理
Oct 09 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
thinkPHP3.2简单实现文件上传的方法
May 16 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
基于php双引号中访问数组元素报错的解决方法
Feb 01 PHP
PHP goto语句用法实例
Aug 06 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 PHP
在PHP中执行系统外部命令
Oct 09 #PHP
针对初学PHP者的疑难问答(1)
Oct 09 #PHP
?繁体转换的class
Oct 09 #PHP
一个用于网络的工具函数库
Oct 09 #PHP
oracle资料库函式库
Oct 09 #PHP
针对初学PHP者的疑难问答(2)
Oct 09 #PHP
模仿OSO的论坛(三)
Oct 09 #PHP
You might like
详解:――如何将图片储存在数据库里
2006/12/05 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
php异常处理使用示例
2014/02/25 PHP
php创建多级目录的方法
2015/03/24 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python jieba库用法及实例解析
2019/11/04 Python
Python计算信息熵实例
2020/06/18 Python
Python爬虫与反爬虫大战
2020/07/30 Python
浅析Python 序列化与反序列化
2020/08/05 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
高考自主招生自荐信
2013/10/20 职场文书
小学教师读书活动总结
2014/07/08 职场文书
化工见习报告范文
2014/10/31 职场文书
高三毕业感言
2015/07/30 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技
Python实现双向链表
2022/05/25 Python