用于打印pdf的代码如下:
class MYPDF extends TCPDF { // Load table data from file public function LoadData($file) { // Read file lines $lines = file($file); $data = array(); foreach($lines as $line) { $data[] = explode(';',chop($line)); } return $data; } // Colored table public function ColoredTable($header,$data) { // Colors,line width and bold font $this->SetFillColor(233,136,64); $this->SetTextColor(255); $this->SetDrawColor(128,0); $this->SetLineWidth(0.3); $this->SetFont('','B'); // Header $w = array(10,40,20,20); $num_headers = count($header); for($i = 0; $i < $num_headers; ++$i) { $this->Cell($w[$i],7,$header[$i],1,'C',1); } $this->Ln(); // Color and font restoration $this->SetFillColor(224,235,255); $this->SetTextColor(0); $this->SetFont(''); // Data $fill = 0; foreach($data as $row) { $this->Cell($w[0],6,$row[0],'LR',$fill); $this->Cell($w[1],$row[1],'L',$fill); $this->Cell($w[2],$row[2],$fill); $this->Cell($w[3],$row[3],$fill); $this->Cell($w[4],$row[4],$fill); $this->Cell($w[5],$row[5],$fill); $this->Cell($w[6],$row[6],$fill); $this->Ln(); $fill=!$fill; } $this->Cell(array_sum($w),'','T'); } } // create new PDF document $pdf = new MYPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false); // set document information $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('Nicola Asuni'); $pdf->SetTitle('TCPDF Example 011'); $pdf->SetSubject('TCPDF Tutorial'); $pdf->SetKeywords('TCPDF,PDF,example,test,guide'); // set default header data $pdf->SetHeaderData(PDF_GYANKUTIR_logo,PDF_HEADER_logo_WIDTH,'GyanKutir','Jhunjhunu International Wisdom City Near Khemi Shakti Temple Jhunjhunu (Rajasthan)-333001'); // 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('helvetica',6); // add a page $pdf->AddPage(); //Column titles $header = array('Rank','Student','Time Used','Correct Answers','Wrong Answers','Questions Skipped','Final score'); $final_data = $smarty->fetch($file_to_show); $file = fopen("text.txt","w+"); file_put_contents($file,""); fwrite($file,$final_data); fclose($file); ob_start(); ob_flush(); //Data loading $data = $pdf->LoadData('text.txt'); // print colored table $pdf->ColoredTable($header,$data); // --------------------------------------------------------- ob_flush(); //Close and output PDF document $pdf->Output('example_011.pdf','I'); //============================================================+ // END OF FILE //============================================================+
我想将标题添加到每个页面上的表列.屏幕截图附有这个问题.在第一个屏幕截图中,标题正在显示,但在第二个屏幕截图中,没有显示.如何在后续页面上显示这些列标题?请帮我解决这个问题.感谢Advance.This图像是pdf中的表格的第一页.
我有两种方法.
方法1:
创建您自己的自定义标题功能(如在TCPDF示例3中)自动将标题单元添加到每个页面.在这种情况下,您可以将标题单元格放置代码移动到类中的标题方法中,并将页眉绘制到页面上的固定位置.由于在添加新页面时自动调用头文件方法,因此,一旦创建页面,就会添加表头.这当然比方法2更快,更少密集,但它可能有点棘手.
方法2:
使用TCPDF事务来检测行何时中断页面,然后回滚.然后你将自己添加AddPage;再次绘制标题;并继续显示.您可以通过在创建行之前获取页数,并将其与之后的页数进行比较.一个例子,你可以这样做:
//Separated Header Drawing into it's own function for reuse. public function DrawHeader($header,$w) { // Colors,line width and bold font // Header $this->SetFillColor(233,'B'); $num_headers = count($header); for($i = 0; $i < $num_headers; ++$i) { $this->Cell($w[$i],255); $this->SetTextColor(0); $this->SetFont(''); } // Colored table public function ColoredTable($header,$data) { $w = array(10,20); $this->DrawHeader($header,$w); // Data $fill = 0; foreach($data as $row) { //Get current number of pages. $num_pages = $this->getNumPages(); $this->startTransaction(); $this->Cell($w[0],$fill); $this->Ln(); //If old number of pages is less than the new number of pages,//we hit an automatic page break,and need to rollback. if($num_pages < $this->getNumPages()) { //Undo adding the row. $this->rollbackTransaction(true); //Adds a bottom line onto the current page. //Note: May cause page break itself. $this->Cell(array_sum($w),'T'); //Add a new page. $this->AddPage(); //Draw the header. $this->DrawHeader($header,$w); //Re-do the row. $this->Cell($w[0],$fill); $this->Cell($w[1],$fill); $this->Cell($w[2],$fill); $this->Cell($w[3],$fill); $this->Cell($w[4],$fill); $this->Cell($w[5],$fill); $this->Cell($w[6],$fill); $this->Ln(); } else { //Otherwise we are fine with this row,discard undo history. $this->commitTransaction(); } $fill=!$fill; } $this->Cell(array_sum($w),'T'); }