怎样在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 相关文章推荐
PHP 查找字符串常用函数介绍
Jun 07 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
CI配置多数据库访问的方法
Mar 28 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
德语专业求职信
2014/03/12 职场文书
生日宴会主持词
2014/03/20 职场文书
社团活动总结书
2014/06/27 职场文书
农行心得体会
2014/09/02 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
武当山导游词
2015/02/03 职场文书
留学推荐信英文范文
2015/03/26 职场文书
个人维稳承诺书
2015/05/04 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书