使用的是开源类TCPDF来生成的, 这个类主要是写中文的时候比较容易,另外写页头,页尾和目录,书签这些常用的
功能在他官方的demo里都能找到代码,遗憾的是文档较少,中文资料也较少,我根据网上的一个资料制作了一个支持
中文的字体,并根据他的demo增加改写了一些,最终勉强实现了我想要的效果,以下是PHP代码:
<?php
/**
* @author 我好笨
* @todo 生成PDF测试
*
*/
set_time_limit(0);
require_once "./config/comm_config.php";
require_once __ROOTDIR__."/include/comm.php";
require_once __ROOTDIR__."/include/tcpdf/config/tcpdf_config.php";
require_once(__ROOTDIR__.'/include/tcpdf/config/lang/eng.php');
require_once(__ROOTDIR__.'/include/tcpdf/tcpdf.php');
$number_pdf=_get("curent");
$number_pdf=$number_pdf?intval($number_pdf):0;
//取总记录数
$nums=$db->getNums("select * from `{$db_prefix}article_base` where `{$db_prefix}article_base`.`is_check`=1");
if($number_pdf<ceil($nums/365))
{
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('优乐笑话网');
$pdf->SetTitle('优乐笑话365开心每一天第'.($number_pdf+1).'部');
$pdf->SetSubject('优乐笑话365开心每一天第'.($number_pdf+1).'部');
$pdf->SetKeywords('优乐笑话,365开心每一天,第'.($number_pdf+1).'部');
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, '优乐笑话365开心每一天第'.($number_pdf+1).'部', PDF_HEADER_STRING);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
//set some language-dependent strings
$pdf->setLanguageArray($l);
// ---------------------------------------------------------
// set font
$pdf->SetFont('dsf', '', 10);
// add a page
$pdf->AddPage();
//查询数据库,取最近20条记录
$table_article_base=$db->as_field("{$db_prefix}article_base");
$table_article=$db->as_field("{$db_prefix}article","c");
$table_sort=$db->as_field("{$db_prefix}sort","s");
$sql="select $table_article_base,$table_article,$table_sort from `{$db_prefix}article_base` left join `{$db_prefix}article` on `{$db_prefix}article_base`.`id`=`{$db_prefix}article`.`article_id` left join `{$db_prefix}sort` on `{$db_prefix}article_base`.`sort`=`{$db_prefix}sort`.`id` where `{$db_prefix}article_base`.`is_check`=1 limit ".($number_pdf*365).",365";
$re=$db->query($sql);
$article=array();
$txt = '';
while($rd=$db->fetchArray($re))
{
$article=$rd;
$article['tags']=explode(",",$rd['tag']);
$article['sys_time']=$rd['add_time'];
$article['add_time']=$rd['add_time']?date("Y-m-d",$rd['add_time']):"";
$article['ding']=intval($rd['do']);
$article['cai']=intval($rd['undo']);
$article['title']=$rd['title'];
$article['info']=htmlspecialchars($rd['info']);
$article['content']=str_replace($str_replace,$str_replace_r,str_replace("#p#分页标题#e#","",$rd['c_content']));
$pdf->setDestination($article['title'], 0, '');
$pdf->Bookmark($article['title'], 0, 0, '', 'B', array(0,64,128));
$pdf->SetFont('dsf', 'B', 16);
$pdf->writeHTML($article['title']."<br />");
$pdf->SetFont('dsf', '', 10);
$ec=preg_replace_callback("~(?=[\/]*index.php\?ct=)(.*)(?=[\"\'])~Uis",create_function('$matchs','return "http://www.meiyoule.com"._parse_html($matchs[0]);'),$article['content']);
$ec=preg_replace("~(\./|/)?index\.php~Uis","http://www.meiyoule.com/index.html",$ec);
$pdf->writeHTML(strip_tags($ec,"<br /><a><p>")."<br />");
$pdf->writeHTML("优乐笑话原文连接:<a href=''>http://www.meiyoule.com/view/index/id-".$rd['id'].".html</a><br />");
}
// add a new page for TOC
$pdf->addTOCPage();
// write the TOC title
$pdf->SetFont('dsf', 'B', 16);
$pdf->MultiCell(0, 0, '本期内容索引', 0, 'C', 0, 1, '', '', true, 0);
$pdf->Ln();
$pdf->SetFont('dsf', '', 12);
// add a simple Table Of Content at first page
// (check the example n. 59 for the HTML version)
$pdf->addTOC(1, 'dsf', '.', '目录', 'B', array(128,0,0));
// end of TOC page
$pdf->endTOCPage();
//Close and output PDF document
$pdf->Output('meiyou'.($number_pdf+1).'.pdf', 'F');
$url=array("0"=>"pdf.php?curent=".($number_pdf+1),"继续生成"=>"pdf.php?curent=".($number_pdf+1));
$error_msg='文件meiyou'.($number_pdf+1).'.pdf生成完成,继续生成后续文件';
default_err($url,$error_msg,0,3);
}
else
{
//完成
$url=array("首页"=>"index.php");
$error_msg='所有文件已生成完成';
default_err($url,$error_msg,0);
}