使用TCPDF和PHP生成PDF页面

时间:2016-03-05 19:43:08

标签: php tcpdf

我正在尝试生成证书的pdf文档。该列表来自表格帖子。使用直接的php,没有tcpdf代码,它会生成每个证书。当我添加tcpdf代码时,它只生成1个证书。 感谢

// set font
$pdf->SetFont('times', '', 20);
// add a page
$pdf->AddPage();

// LOOP
    while ($rowPart = mysql_fetch_array($result)) 
        {
    $PartName = ucfirst(strtolower($rowPart['firstname'])) . " " . ucfirst(strtolower($rowPart['lastname']));
// PDF STARTS HERE**************************
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetFont('alexbrush', '', 35);
    $pdf->SetY( 67);
    $pdf->Cell(0, 0, $PartName, 0, 0, 'C', 0, '', 3);
    $pdf->SetFont('helveticaB', '', 15);
    $pdf->SetY( 127);
    $pdf->Cell(0, 0, $SemDesc, 0, 1, 'C', 0, '', 3);
    $pdf->SetY( 135);
    $pdf->Cell(0, 0, $SemName, 0, 1, 'C', 0, '', 3);
    $pdf->Ln();
        }
// LOOP ENDS HERE**************************

//Close and output PDF document
$pdf->Output('certificate.php', 'I');

3 个答案:

答案 0 :(得分:0)

尝试在循环开始时而不是在循环开始之前添加新页面。我认为你正在创建一个页面并在循环中编写它。

编辑: 另外,在循环中的最后一行代码中添加调用endPage()函数。

答案 1 :(得分:0)

想要从我检查帖子的位置开始显示完整的代码:

if (is_array($_POST['partSel'])) {
// START CERTIFICATE PRINT

// Include the main TCPDF library (search for installation path).
require_once('tcpdf/tcpdf.php');
// Define Paramaters
define('IMG_PATH', 'certificates/');

// Extend the TCPDF class to create custom Header and Footer
class ETCPDF extends TCPDF {
//Page header
public function Header() {
// get the current page break margin
  $bMargin = $this->getBreakMargin();
// get current auto-page-break mode
  $auto_page_break = $this->AutoPageBreak;
// disable auto-page-break
  $this->SetAutoPageBreak(false, 0);
// set bacground image
  $img_file = IMG_PATH.'etc_cert.png';
  $this->Image($img_file, 0, 0, 297, 210, '', '', '', false, 300, '', false, false, 0);
// restore auto-page-break status
  $this->SetAutoPageBreak($auto_page_break, $bMargin);
// set the starting point for the page content
  $this->setPageMark();
  }
}
// create new PDF document
$pdf = new ETCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('');
$pdf->SetTitle('Certificate');
$pdf->SetSubject('');
$pdf->SetKeywords('');

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);

// remove default footer
$pdf->setPrintFooter(false);

//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, 0);

// 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);
}
// ---------------------------------------------------------


foreach ($_REQUEST['partSel'] as $partSel) {
$apartSel = mysql_real_escape_string($partSel); 
if ($_POST['sem'] == 'spcl') {
$sql = "SELECT spclactivitytitle AS EvtTitle, spclactivitydesc AS EvtDesc 
FROM tblspclactivity 
WHERE timeslotid =  '" . $_POST['tsid'] . "'";
}
if ($_POST['sem'] == 'sem') {
$sql = "SELECT tblseminars.seminarpresenter AS EvtTitle, tblseminars.seminartitle AS EvtDesc
FROM tblseminars Inner Join tblseminar_timeslot ON tblseminar_timeslot.seminarid = tblseminars.seminarid
WHERE tblseminar_timeslot.timeslotid =  '" . $_POST['tsid'] . "' AND tblseminar_timeslot.seminarid =  '" . $_POST['sid'] . "'";
}
if ($debug) { echo "<p>L117 $sql</p>"; }
$result = mysql_query($sql) or die ('<p>DB Error: ' . mysql_error() . '</p>');
while ($rowSem = mysql_fetch_array($result)) 
{
$SemName = "Presented by: " . $rowSem['EvtTitle'];
$SemDesc = $rowSem['EvtDesc'];
}

$sql = "SELECT firstname, lastname FROM tblparticipants WHERE participantid = '$apartSel'";
$result = mysql_query($sql) or die ('<p>DB Error: ' . mysql_error() . '</p>');

// set font
$pdf->SetFont('times', '', 20);

// LOOP STARTS HERE
    while ($rowPart = mysql_fetch_array($result)) 
    {
// add a page
      $pdf->AddPage();
      $PartName = ucfirst(strtolower($rowPart['firstname'])) . " " . ucfirst(strtolower($rowPart['lastname']));
// PDF STARTS HERE**************************
      $pdf->SetTextColor(255, 0, 0);
      $pdf->SetFont('alexbrush', '', 35);
      $pdf->SetY(67);
      $pdf->Cell(0, 0, $PartName, 0, 0, 'C', 0, '', 3);

      $pdf->SetFont('helveticaB', '', 15);
      $pdf->SetY(127);
      $pdf->Cell(0, 0, $SemDesc, 0, 1, 'C', 0, '', 3);

      $pdf->SetY( 135);
      $pdf->Cell(0, 0, $SemName, 0, 1, 'C', 0, '', 3);
      $pdf->endPage();

    }
// LOOP ENDS HERE**************************    
//Close and output PDF document
$pdf->Output('certificate.php', 'I');

//============================================================+
// END OF PDF FILE
//============================================================+
}
}

答案 2 :(得分:0)

不确定为什么但是MultiCell解决了这个问题!任何人都可以解释MultiCell和Cell之间的区别吗?

// LOOP STARTS HERE
while ($rowPart = mysql_fetch_array($resultPart)) 
{
$PartName = ucfirst(strtolower($rowPart['firstname'])) . " " . ucfirst(strtolower($rowPart['lastname']));
// PDF STARTS HERE**************************
// add a page
$pdf->AddPage();
$pdf->SetTextColor(255, 0, 0);
$pdf->SetFont('alexbrush', '', 35);
$pdf->MultiCell(0, 0, $PartName, 0, 'C', false, 0, 10, 67);

$pdf->SetFont('helveticaB', '', 15);
$pdf->MultiCell(0, 0, $SemDesc, 0, 'C', false, 0, 10, 127);
$pdf->MultiCell(0, 0, $SemName, 0, 'C', false, 0, 10, 135);
}
// LOOP ENDS HERE**************************

//============================================================+
// END OF PDF FILE
//============================================================+
}