怎样在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 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
php过滤危险html代码
Aug 18 PHP
php 中英文语言转换类
Sep 07 PHP
PHP 第二节 数据类型之数组
Apr 28 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
php while循环得到循环次数
Oct 26 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
PHP的反射机制实例详解
Mar 29 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
php反射应用示例
2014/02/25 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
python自动翻译实现方法
2016/05/28 Python
python实战教程之自动扫雷
2018/07/13 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
django admin组件使用方法详解
2019/07/19 Python
python requests使用socks5的例子
2019/07/25 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
简述DNS进行域名解析的过程
2013/12/02 面试题
服务承诺口号
2014/05/22 职场文书
上诉答辩状范文
2015/05/22 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python