使用PERL脚本生成PDF输出(2)
时间:2007-02-17 来源:PHP爱好者
使用PERL产生PDF输出
为了更好的说明如何将HTMLDOC集成到Perl CGI脚本中,我们假设在WEB服务端编写了一个PERL脚本,可以接收从客户端传来的名为innerHTML的参数(innerHTML可以是一个表单域),然后将innerHTML转化成PDF文件再传回用户端的浏览器。
我们可以把处理后传回的数据流的MIME类型设定为application/pdf。这样,如果用户在客户端安装了Adobe Acrobat阅读程序,浏览器就可以根据接收信息的MIME类型启动Adobe Acrobat。否则,浏览器将会询问用户以何种方式打开该文件或者选择是否保存该文件。
本例所述程序的客户端界面可以如下:
当用户在表单中输入HTML代码之后,点击“Download PDF”键,数据上传到服务端,经过HTMLDOC转化后传回,并最终以PDF格式显示。显示结果可以如下:
在对程序的输入和输出有所了解之后,我们就来看一下到底如何将PERL和HTMLDOC结合起来,实现以上功能。
具体代码如下:
#!/usr/bin/perl
#使用HTMLDOC产生PDF输入
use CGI;
#获取CGI参数
my $CGIobj=new CGI;
my $innerHTML=$CGIobj-$#@62;param("innerHTML");
#处理输入数据中各种可能出现的特殊字符
my %specialChars=(
"’","´",
"$","$",
"@","@",
"!","!",
"n","",
"r","");
my $specialCharList=join("",keys %specialChars);
$innerHTML=~s///g;
$innerHTML=~s/([$specialCharList])/$specialChars{$1}/g;
#向浏览器输出PDF标头
print "Content-Type: application/pdfrnrn";
#创建并向浏览器输出PDF数据流
if ($innerHTML) {
my $command="`echo -e ’".$innerHTML."’ | HTMLdoc --webpage -t pdf - `";
print eval($command);
}
说明:
在脚本程序的开始,我们首先从CGI环境下接收由客户端传来的输入信息,并保存在innerHTML参数中。用户也可以将该脚本设计成能够接收其它程序输出的HTML代码,而不必非要从客户端或外界输入。
无论我们是以何种方式获取HMTL代码,都需要对其中所包含的可能引发运行错误的特殊字符进行处理。这里,我? 要是通过建立一个哈希表来查找和替换特殊字符。有关PERL中的哈希表以及字符运算的知识我们在这里就不进行详细的说明了,感兴趣的朋友可以参见“学习中心”的相关文章。
在完成对HTML代码的处理之后,我们把数据的MIME类型设置为application/pdf。这样,位于客户端的浏览器在接收到数据之后就知道应该以何种方式对其进行处理。
因为HTMLDOC是一种外部程序,所以我们需要对其进行系统调用。相关命令我们在前文已经进行过介绍,在这里就不重复了。需要提醒大家注意的一点就是使用PERL进行系统调用时,必须将命令包含在“`”符号内。PERL中的eval()函数可以把字符串解释成为PERL代码,这样,$command变量所包含的系统调用命令就可以被执行,最终的PDF数据将会被直接传送到客户端的浏览器。
最后还有一点需要说明,因为每一个页面只能传送一次HTTP标头,所以标头application/pdf必须被放在输出数据的第一行。
小结
对于那些已经在使用PERL脚本生成动态HTML页面的网站来说,借助于外部程序HTMLDOC可以非常方便的实现PDF输出功能,根本不需要对现有程序进行任何大的改动,简单,快速,方便。
虽然在PERL脚本中调用外部HTMLDOC程序从技术和性能角度来说并不一定是一种最佳的选择,但是,对于那些希望丰富网站功能,向用户提供更加友好的访问界面的朋友来说,HTMLDOC还是具有相当大的吸引力的。
php爱好者站 http://www.phpfans.net PHP|MySQL|javascript|ajax|html.
为了更好的说明如何将HTMLDOC集成到Perl CGI脚本中,我们假设在WEB服务端编写了一个PERL脚本,可以接收从客户端传来的名为innerHTML的参数(innerHTML可以是一个表单域),然后将innerHTML转化成PDF文件再传回用户端的浏览器。
我们可以把处理后传回的数据流的MIME类型设定为application/pdf。这样,如果用户在客户端安装了Adobe Acrobat阅读程序,浏览器就可以根据接收信息的MIME类型启动Adobe Acrobat。否则,浏览器将会询问用户以何种方式打开该文件或者选择是否保存该文件。
本例所述程序的客户端界面可以如下:
当用户在表单中输入HTML代码之后,点击“Download PDF”键,数据上传到服务端,经过HTMLDOC转化后传回,并最终以PDF格式显示。显示结果可以如下:
在对程序的输入和输出有所了解之后,我们就来看一下到底如何将PERL和HTMLDOC结合起来,实现以上功能。
具体代码如下:
#!/usr/bin/perl
#使用HTMLDOC产生PDF输入
use CGI;
#获取CGI参数
my $CGIobj=new CGI;
my $innerHTML=$CGIobj-$#@62;param("innerHTML");
#处理输入数据中各种可能出现的特殊字符
my %specialChars=(
"’","´",
"$","$",
"@","@",
"!","!",
"n","",
"r","");
my $specialCharList=join("",keys %specialChars);
$innerHTML=~s///g;
$innerHTML=~s/([$specialCharList])/$specialChars{$1}/g;
#向浏览器输出PDF标头
print "Content-Type: application/pdfrnrn";
#创建并向浏览器输出PDF数据流
if ($innerHTML) {
my $command="`echo -e ’".$innerHTML."’ | HTMLdoc --webpage -t pdf - `";
print eval($command);
}
说明:
在脚本程序的开始,我们首先从CGI环境下接收由客户端传来的输入信息,并保存在innerHTML参数中。用户也可以将该脚本设计成能够接收其它程序输出的HTML代码,而不必非要从客户端或外界输入。
无论我们是以何种方式获取HMTL代码,都需要对其中所包含的可能引发运行错误的特殊字符进行处理。这里,我? 要是通过建立一个哈希表来查找和替换特殊字符。有关PERL中的哈希表以及字符运算的知识我们在这里就不进行详细的说明了,感兴趣的朋友可以参见“学习中心”的相关文章。
在完成对HTML代码的处理之后,我们把数据的MIME类型设置为application/pdf。这样,位于客户端的浏览器在接收到数据之后就知道应该以何种方式对其进行处理。
因为HTMLDOC是一种外部程序,所以我们需要对其进行系统调用。相关命令我们在前文已经进行过介绍,在这里就不重复了。需要提醒大家注意的一点就是使用PERL进行系统调用时,必须将命令包含在“`”符号内。PERL中的eval()函数可以把字符串解释成为PERL代码,这样,$command变量所包含的系统调用命令就可以被执行,最终的PDF数据将会被直接传送到客户端的浏览器。
最后还有一点需要说明,因为每一个页面只能传送一次HTTP标头,所以标头application/pdf必须被放在输出数据的第一行。
小结
对于那些已经在使用PERL脚本生成动态HTML页面的网站来说,借助于外部程序HTMLDOC可以非常方便的实现PDF输出功能,根本不需要对现有程序进行任何大的改动,简单,快速,方便。
虽然在PERL脚本中调用外部HTMLDOC程序从技术和性能角度来说并不一定是一种最佳的选择,但是,对于那些希望丰富网站功能,向用户提供更加友好的访问界面的朋友来说,HTMLDOC还是具有相当大的吸引力的。
php爱好者站 http://www.phpfans.net PHP|MySQL|javascript|ajax|html.
相关阅读 更多 +