WEB开发中,在需要固定的排版、输出文档用来传阅及打印时,会考虑用PDF的形式动态输出页面,想做个新浪微博应用,输出授权用户的微博内容为PDF电子书,查阅资料得知,FPDF和TCPDF是两款纯PHP的库,由于中文输出乱码的原因,纠结了好长时间,最后选择用TCPDF
关于TCPDF
TCPDF是一个开源项目,确切的说什一个开源的PHP类,用于动态地输出PDF,主页是www.tcpdf.org,只需要简单的配置,甚至直接上传代码到服务器就可以使用TCPDF。源代码保存在http://sourceforge.net/,由于某些原因,该网站无法在我国大陆访问,我下了最新版(2013年10月19日)保存在微盘,大家可以去我的微盘下载: tcpdf_6_0_039.zip,文档目录如下附录
应用
解压之后,目录结构如下附录,其中├─examples下为示例,可以一一打开效果,通过阅读tcpdf.php和示例中的代码可以具体学习。需要注意的是如果要输出汉字,要修改$pdf->SetFont()中第一个参数,可以设置为宋体(stsongstdlight)。
自定义LOGO
在输出的PDF中,如果保留页脚页眉的话,其中LOGO如果要自定义的话,需要在目录├─images下传入指定名称图片。这样有一个问题,如果要动态传入图片作为LOGO的时候,必须每次都去├─images下操作,经过阅读源代码,我发现,控制LOGO的代码如下
if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) {
$imgtype = TCPDF_IMAGES::getImageFileType(K_PATH_IMAGES.$headerdata['logo']);
if (($imgtype == 'eps') OR ($imgtype == 'ai')) {
$this->ImageEps($headerdata['logo'], '', '', $headerdata['logo_width']);
} elseif ($imgtype == 'svg') {
$this->ImageSVG($headerdata['logo'], '', '', $headerdata['logo_width']);
} else {
$this->Image($headerdata['logo'], '', '', $headerdata['logo_width']);
}
$imgy = $this->getImageRBY();
} else { …………
每次传入图片的时候,程序都是用的相对位置来处理的,只需要把程序中$headerdata['logo']的地方改成绝对位置,给上边代码中所有$headerdata['logo']前边均缀上常量“K_PATH_IMAGES”(程序有定义的,不用再去定义它的值),例如:$this->ImageEps(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']);
这样以后每次传入的时候,都可以根据图片地址来自行制定,比如程序中输出的不用的内容需要不用的LOGO的时候方便动态控制。需要注意的是,如果做了以上修改,├─examples目录下的程序如果设置显示页眉页脚,都会出错,这时候只需要设置页眉函数的参数,如example_001.php中,设置页眉的代码
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH,
PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
需要修改为
$pdf->SetHeaderData(K_PATH_IMAGES.'/'.PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH,
PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
当然要自定义为网络上的图片资源,只需要把第一个参数修改为图片地址组成的字符串,比如这样可以把LOGO改为百度的LOGO图片来输出到PDF:
$pdf->SetHeaderData("http://www.baidu.com/img/bdlogo.gif", PDF_HEADER_LOGO_WIDTH,
PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
附录
tcpdf │ CHANGELOG.TXT │ composer.json │ LICENSE.TXT │ …………………… │ ├─config │ tcpdf_config.php │ ├─examples │ │ example_001.php │ │ example_002.php │ │ example_003.php │ │ …………………… │ │ │ ├─barcodes │ │ example_1d_html.php │ │ example_1d_png.php │ │ example_1d_svg.php │ │ ……………… │ │ │ ├─config │ │ tcpdf_config_alt.php │ │ │ ├─data │ │ │ chapter_demo_1.txt │ │ │ chapter_demo_2.txt │ │ │ table_data_demo.txt │ │ │ utf8test.txt │ │ │ │ │ └─cert │ │ tcpdf.crt │ │ tcpdf.fdf │ │ tcpdf.p12 │ │ │ ├─images │ │ alpha.png │ │ bug.eps │ │ image_demo.jpg │ │ ……………… │ │ │ └─lang │ afr.php │ ara.php │ aze.php │ …………………… │ ├─fonts │ │ aealarabiya.ctg.z │ │ aealarabiya.php │ │ aealarabiya.z │ │ …………………… │ │ │ ├─ae_fonts_2.0 │ │ ChangeLog │ │ COPYING │ │ README │ │ │ ├─dejavu-fonts-ttf-2.33 │ │ AUTHORS │ │ BUGS │ │ langcover.txt │ │ …………………… │ │ │ └─freefont-20120503 │ AUTHORS │ ChangeLog │ COPYING │ …………………… │ ├─include │ │ sRGB.icc │ │ tcpdf_colors.php │ │ tcpdf_filters.php │ │ …………………… │ │ │ └─barcodes │ datamatrix.php │ pdf417.php │ qrcode.php │ └─tools .htaccess tcpdf_addfont.php