首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》第32章 生成PDF格式的个性化文档

关灯直达底部

在以服务为驱动的站点中,我们有时候需要发布个性化文档,这些文档是根据访问者的输入而生成的。这个特性可以用来实现表单的自动填写或用来生成个性化文档,例如法律文档、信件或证书等。

在本章中,我们所介绍的例子将为用户提供一个在线技术评估页面并生成一个证书。

在本章中,我们主要介绍以下内容:

■如何使用PHP字符串处理功能将用户数据与模板结合起来,从而创建一个RTF格式的文档。

■如何使用类似的方法生成PDF格式的文档。

■如何使用PHP的PDFlib函数来生成类似的PDF文档。

32.1 项目概述

对于这个项目,我们希望能为访问者提供一个包括许多问题的测验。如果他们正确回答了足够多的问题,则给他们一个证书证明通过了该测验。

因为计算机能够比较容易地对问题进行打分,所以问题采用多项选择形式,它由一个问题和多个可能的答案组成。每个问题仅仅有一个答案是正确的。

如果用户在这些问题上获得了及格的分数,将获得一个证书。

在理想状况下,我们所颁布的证书文件格式应该是:

■容易设计。

■能够包含多种不同的元素,例如位图和向量图。

■能产生一个高质量的打印输出。

■只需要下载一个小文件。

■几乎立即就能生成结果。

■成本低。

■可以在多种操作系统上工作。

■难以伪造及更改。

■不需要任何特殊的软件来浏览或打印。

■对所有接收者都能够一致地显示和打印。

像我们有时候做很多决定一样,当选择一种传送格式来满足以上特性时,需要进行一些折中。

评估文档格式

需要做出的最重要决定是用什么格式来传送证书。可选项包括纸张、ASCII文本、HTML、Microsoft Word或其他字处理格式,诸如:RTF、PostScript和PDF等。根据上面列出的特性,我们可以考虑并比较其中的一些选项。

1.纸张

用纸张传送证书具有许多明显的优点。我们可以完全控制处理过程。在将证书发送出去之前,可以很清楚地看到输出证书的外观,从而不必担心软件或带宽,并且证书可以使用反伪造技术进行印制。

除了“几乎立即就能生成结果”和“成本低”项要求外,它可以适应其他所有要求。但是纸质证书不能快速制造并传送。根据我们及接收者邮政投递系统的不同,这可能需要花费几天或几周的时间。

每一张证书都要花费几分到几美元的印刷和邮寄费用,而在实际处理中可能需要更多费用。相比较,自动电子投递可能要便宜些。

2.ASCII

以ASCII或纯文本格式来投递文档具有一些优势。首先,兼容性就不会成为问题。带宽要求也会相当小,因此费用会相当低。最终结果的简单性使得设计起来非常简单,而且可以使用脚本快速生成。

但是,如果以ASCII文件的形式向访问者提供证书,那么对证书的外观几乎没有任何控制。我们不能控制字体或者分页。我们仅能包含文本,而几乎对格式没有任何控制。我们也不能控制接收者对文档的复制和更改。这种方法使得接收者易于欺骗性地更改证书。

3.超文本置标语言(HTML)

在Web上传送文档,HTML是一个显而易见的选择。超文本置标语言就是专门为该目的而设计的。毫无疑问,HTML包括格式控制,支持包括多种对象(比如图像)的语法,并且与多种操作系统和软件是兼容的(包含一些变化)。它非常简单,因此既易于设计又可以快速地由脚本程序生成和传送。

在本程序中使用HTML的缺陷包括:对打印相关格式的有限支持,比如分页、在不同的平台及程序上的输出不一致性,以及不稳定的打印质量。此外,虽然HTML可以包含任何外部元素的类型,但是对于不常见的类型,浏览器显示或使用这些元素的能力不能得到保证。

4.字处理器格式

对于企业内部网的项目,提供字处理器格式的文档是尤其有意义的。但是,对于Internet项目,使用专有的字处理器格式会排斥某些访问者,但由于其市场优势,对Microsoft Word来说这样做可能有意义。多数用户会用Word或者某种字处理器(例如,OpenOffice Writer)来阅读Word文件。

没有Word的Windows用户可以从如下网址下载免费软件WordViewer:http://office.microsoft.com/en-us/downloads/ha010449811033.aspx。

生成像Microsoft Word文档一样的文档有几点好处。只要有一份Word的副本,设计一个文档就变得相当容易。我们可以很好地控制文档的打印效果,文档内容也极具灵活性。当然,也可以通过要求密码的方式来使得接收者难以修改其内容。

不幸的是,Word文件可能会很大,特别是当它们包含图像或其他复杂元素时。而且没有很好的办法使用PHP动态生成这种文档。这种格式是经过文档化的,但是它是一种二进制格式,而且这种格式的文档化要求得到许可条件。使用COM对象生成Word文档是可能的,但是这相当复杂。

可以考虑的另一个可能方法是使用OpenOffice Writer软件,这个软件具有非专利软件和使用基于XML的文件格式的双重优点。

如今,Office 2003和2007也支持自身定义的XML文件格式。Word和其他Office产品的文档类型定义(DTD)可以从Microsoft.com站点下载。请查阅“Office XML参考模式”(Office XML Reference Schemas)。这是一个不错的选择,但不是最简单的。

5.RTF格式

RTF(Rich Text Format)具有Word的大多数优点,但是RTF文件更容易生成。在打印页的排列和格式方面仍然具有灵活性,仍然可以包含诸如向量图或位图之类的元素。此外还可以确保当用户浏览或打印文档时,他们看到的结果与我们看到的会十分相似。

RTF是Microsoft Word的文本格式。它是为一种在不同程序间传送文档所使用的交互格式而设计的。在某种程度上,它与HTML类似。它使用语法和关键字而不用二进制数据来表达格式化信息,因此相对更容易阅读一些。

这种格式的文档非常丰富和翔实,其规范可以免费获得,用关键字/"RTF Specification/"搜索Microsoft.com就可找到。

生成一个RTF文档的最简单的方法是在字处理器中选择Save As RTF选项。由于RTF文件仅包含文本,因此直接生成和修改已有的文件也十分简单。

因为这种格式的文档非常丰富而且可以免费使用,与Word的二进制格式比起来,RTF可以被更多的软件读取。请注意,用户如果使用旧版本的Word或其他字处理器软件打开一个复杂的RTF文件,经常会产生不同的显示结果。每种新版本的Word都为RTF引进新的关键字,因此旧版本经常忽略它们无法解释的控件或那些已经没有选择实现的控件。

从我们最初的要求列表来看,RTF证书易于使用Word或其他字处理器设计;可以包含多种不同的元素,如向量图和位图;具有高质量的打印输出;可以简单且快速地生成;并且以低廉的费用通过电子化方式传送。

它可以在多种应用程序及操作系统上使用,尽管结果略微有些变化。不利的一面是:RTF文档可以轻易地被任何人随时随意更改,这对于证书和某些其他文档来说是一个问题。对于复杂文档,其文件可能稍微大一些。

RTF对于许多文档分发程序来说是一个不错的选择,因此我们这里把它作为一个可选项。

6.PostScript

Adobe公司的PostScript是一种页面描述语言。它是一种强大且复杂的编程语言,试图以与设备无关的方式表示文档,也就是说,一段描述可以在不同的设备,比如打印机、显示器上产生一致的输出结果。该格式的文档也非常丰富。除了很多Web站点外,至少有3本图书全面地介绍了这种格式。

PostScript文档可以包含非常精确的格式、文本、图像、嵌入式字体和其他元素。可以通过在应用程序中将PostScript文档打印到PostScript打印机驱动程序,很容易地生成一个PostScript文档。如果对这些感兴趣,可以学习用它直接编辑。

PostScript文档具有很好的可移植性。在不同的设备及操作系统下,它们都可以给出一致的高质量的打印输出。

用PostScript发布文档有两个重大缺陷:文件大小可能很大以及许多用户必须下载额外的软件来使用它。

大多数UNIX用户可以处理PostScript文件,但Windows用户通常需要下载一个浏览器,比如GSview,该浏览器使用Ghostscript PostScript解释器。该软件适合多种类型的平台。虽然它是自由软件,但我们不希望强迫用户下载更多的软件。

可以在如下网址获得更多关于Ghostscript的文章:http://www.ghostscript.com/。

也可以在如下网址下载:http://www.cs.wisc.edu/~ghost/。

对于我们当前的程序,PostScript在具有一致性和高质量的输出方面表现十分出色,而在其他要求方面却表现得相当糟糕。

7.可移植文档格式(PDF)

可喜的是,有一种格式既具有PostScript的大多数功能,又具有很多其他优点。PDF(Portable Document Format,也出自Adobe公司)是出于以下目的来设计文档发布方法的:这种文档在不同的平台表现一致,且可在屏幕或纸上产生可预见的高质量输出。

Adobe公司将PDF称为“面向世界范围开放的电子文档发布的事实标准”。Adobe的PDF是一种统一文件格式,它预留了所有字体、格式、颜色和任何源文档的图形,不论它是在何种应用程序和平台上创建的。PDF文件是简洁的,拥有免费Adobe Acrobat阅读器的人可以随心所欲地共享、浏览、操作和打印。

PDF是一种开放格式,除了其他许多Web站点和正式的手册外,也可以在如下网址找到相关文档:http://partners.adobe.com/asn/tech/pdf/specifications.jsp。

从我们要求的特性来看,PDF非常令人满意:PDF可以产生一致的、高质量的输出,可以包含诸如位图或向量图之类的元素,可以使用压缩方法创建较小的文件,可以廉价地通过电子方式进行传送,可以在多数操作系统上使用,而且还包括安全控制。

依靠PDF来工作是基于这样一个事实,那就是大多数用来创建PDF文档的软件都是商业性的。浏览PDF文件需要一个阅读器,但Adobe公司发布的Acrobat Reader的Windows、UNIX及Macintosh版本都是可以免费使用的。我们站点的许多访问者应该已经相当熟悉.pdf的扩展名,而且他们可能已经安装了阅读器。

PDF文件是一种易于发布的、可打印文档的好方法,特别是对那些不希望接收者轻易更改的情况。

接下来,我们将要通过两种不同的方法来生成PDF证书。