我正在尝试使用codeigniter框架中的tcpdf生成一个表。我想要生成的结构如下所示。
________________________________________________________
header 1
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
description 1 | | | | | | | |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
header 2
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
subheader 2.1
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
description 2.1.1
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
description 2.1.2
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
subheader 2.2
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
description 2.2.1
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
header 3
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
description 3.1
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
description 3.2
虽然我能够获得上表,但生成的表不是常量。除了描述3.1和描述3.2之外,它有时会给我所有行和单元格。我尝试了mysql查询,每次都会产生预期的结果。我的代码是:
function createPDF($chklistID){
$this->load->library("Pdf");
$title="Daily Checklist Template";
$subject="Daily Checklist";
$author = "Derek Lim";
// 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($author);
$pdf->SetTitle($title);
$pdf->SetSubject($subject);
//$pdf->SetKeywords('');
// set default header data
$pdf->setHeaderFont(array('', '', 20));
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
$pdf->setFooterData(array(0,64,0), array(0,64,128));
// 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 (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
require_once(dirname(__FILE__).'/lang/eng.php');
$pdf->setLanguageArray($l);
}
// ---------------------------------------------------------
// set default font subsetting mode
$pdf->setFontSubsetting(true);
// Set font
// dejavusans is a UTF-8 Unicode font, if you only need to
// print standard ASCII chars, you can use core fonts like
// helvetica or times to reduce file size.
$pdf->SetFont('dejavusans', '', 11, '', true);
// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->AddPage();
// set text shadow effect
$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));
// Set some content to print
$html = '<div width="100%"><br/><br/><table><tr><td width="20%"><b>Project:</b></td><td width="80%">_______________________________________________</td></tr></div>';
//get worklist type name
$worklistName = $this->checklists_model->get_worklist($chklistID);
//gen html
$html = $this->gen_html($chklistID);
// Print text using writeHTMLCell()
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
// ---------------------------------------------------------
// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$chklistPath = $_SERVER['DOCUMENT_ROOT']."safety/checklists/";
$pdf->Output($chklistPath.urlencode($worklistName->checklistName).'.pdf', 'F'); //save to file
$pdf->Output(urlencode($worklistName->checklistName).'.pdf', 'I'); //preview in screen
}
function gen_html($chklistID){
//get worklist type name
$worklistName = $this->checklists_model->get_worklist($chklistID);
$html .= '<div width="100%" style="text-align:center;"><b>'.$worklistName->checklistName.' Checklist</b></div>';
$html .= '<div width="100%" ><table><tr><td width="30%"><b>Contractor:</b></td><td width="70%">_______________________________________________</td></tr><tr><td></td></tr><tr><td width="30%"><b>Location/Area:</b></td><td width="70%">_______________________________________________</td></tr><tr><td></td></tr><tr><td width="30%"><b>Date of Inpection:</b></td><td width="70%">_________________________ To ______________________</td></tr><tr><td> </td></tr><td width="30%"><b>Location/Area:</b></td><td width="70%">_______________________________________________</td></tr><tr><td></td></tr><tr><td width="30%"><b>Inspected/Checked by:</b></td><td width="70%" style="text-align:center;">_______________________________________________<br/>(Name & Signature)</td></tr></table></div>';
$html .= '<div><table border="1"><tr><th width="7%" style="text-align:center;">S/No</th><th width="40%" style="text-align:center;">Description</th><th width="50%" style="text-align:center;">Day<br/><table border="1"><tr><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th><th>Sun</th></tr></table></th></tr>';
$headers = $this->checklists_model->get_headers($chklistID);
$sn = 1;
foreach ($headers as $header) {
if($header->chklistDailyConditionsCatParent==0){
$conditions = $this->checklists_model->get_conditions($header->chklistDailyConditionsCatID);
$html .= '<tr><td></td><td><u>'.$header->chklistDailyConditionsCatName.'</u></td><td></td></tr>';
foreach ($conditions as $condition) {
$html .= '<tr><td>'.$sn.'</td><td>'.$condition->chklistConditionsName.'</td><td><table border="1" style="width:100%;"><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table></td></tr>';
$sn++;
}
$sn1 = $sn;
}elseif($header->chklistDailyConditionsCatParent!=0){
$subConditions = $this->checklists_model->get_subConditions($header->chklistDailyConditionsCatID);
$html .= '<tr><td></td><td> -<u>'.$header->chklistDailyConditionsCatName.'</u></td><td></td></tr>';
foreach ($subConditions as $condition) {
$html .= '<tr><td>'.$sn1.'</td><td> '.$condition->chklistConditionsName.'</td><td><table border="1" style="width:100%;"><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table></td></tr>';
$sn1++;
}
$sn = $sn1;
}
}
$html .= '<tr><td></td><td>Signature:</td><td><table border="1" style="width:100%;"><tr><td style="height:100px;"></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table></td></tr>';
$html .= '</table></div>';
$html .= '<div><span><h4>Legend:</h4><br/><br/>X No/Not Satisfactory<br/><br/>✔ Yes/Good<br/><br/>C Not Applicable</span></div>';
$html .= '<div><h4>Remarks:</h4></div>';
return $html;
}
我有什么不对的吗?
答案 0 :(得分:0)
尝试使用此代码为我工作。你必须在helpers文件夹pdf_helper.php中创建一个文件并编写这段代码,并将tcpdf库文件夹放在这个文件夹中
<?php
function tcpdf()
{
//require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');
}
?>
在您的视图页面中编写此代码
<?php get_instance()->load->helper('pdf_helper');
tcpdf();
$obj_pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$obj_pdf->SetCreator(PDF_CREATOR);
$title = "PDF Report";
$obj_pdf->SetTitle($title);
$obj_pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, $title, PDF_HEADER_STRING);
$obj_pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$obj_pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$obj_pdf->SetDefaultMonospacedFont('helvetica');
$obj_pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$obj_pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$obj_pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$obj_pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$obj_pdf->SetFont('helvetica', '', 9);
$obj_pdf->setFontSubsetting(false);
$obj_pdf->SetPrintHeader(false);
$obj_pdf->SetPrintFooter(false);
$obj_pdf->AddPage();
ob_start();
?>
<html>write your html here .....</html>
<?php
$content = ob_get_contents();
ob_end_clean();
$obj_pdf->writeHTML($content, true, false, true, false, '');
//$obj_pdf->Output('output.pdf', 'I');
$obj_pdf->Output($this->config->item('server_absolute_path').'/application/controllers/invoice_pdf/Invoice_'.$booking_details[0]['id'].'.pdf', 'F'); ?>
名为invoice.pdf的文件将保存在控制器文件夹
中