PHP TCPDF Несколько WriteHTML () не работает - PullRequest
2 голосов
/ 26 октября 2011

Я написал некоторый код, который создает отчеты, а затем экспортирует их в .PDF с использованием TCPDF.Я хочу отправить разные части отчета на почту, поэтому мне нужно использовать функцию WriteHTML () более одного раза, чтобы создать несколько файлов PDF и сохранить их в определенном каталоге.

    $parts=explode("<div class='subTable'>",$html);
    pdf->writeHTML($html, true, false, false, false, '');
    $pdf->Output('exmpl/example_045.pdf', 'I');
    $pdf->Output('exmpl/example_046.pdf', 'F');
    $pdf->writeHTML($parts[2], true, 0, true, 0);
    //Close and output PDF document
    $pdf->Output('exmpl/example_048.pdf', 'F');

Хотя я пытаюсь экспортировать два разных файла в каталог exmpl, все, что я на самом деле получаю, это один файл (example_046.pdf).

Я должен упомянуть, что могу использовать Вывод() не раз, и я уже делал это, но я просто не могу использовать writeHTML () более одного раза.

Любое решение будет оценено, спасибо заранее!

РЕДАКТИРОВАТЬ

Вот полный код:

<?php
function createPDF($html, $type, $filename, $output,$saleStart,$saleEnd,$reportType)
    {

    //REQUIRE TCPDF
    require_once('tcpdf/config/lang/eng.php');
    require_once('tcpdf/config/lang/heb.php');
    require_once('tcpdf/tcpdf.php');

class MYPDF extends TCPDF {

    //Page header
    public function Header() {
        // Set font
        $this->SetFont('helvetica', 'B', 20);
        // Title
        $this->Cell(0, 15, '<< TCPDF Example 003 >>', 0, false, 'C', 0, '', 0, false, 'M', 'M');
    }

    // Page footer
    public function Footer() {
        // Position at 15 mm from bottom
        $this->SetY(-15);
        // Set font
        $this->SetFont('helvetica', 'I', 8);
        // Page number
        $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
    }
}



// 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('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 018');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
*/
// SET CUSTOMIZED DATE INCLUDED HEADER
$headerSDate=reverseLongDate($saleStart);
$headerEDate=reverseLongDate($saleEnd);
$header="";
$header.="\t";
$header.=Date("d-m-Y h:m:s");
$header.="\n";
$header.='מועדון המגדלים יוסי חותה פירות וירקות';
$header.="\n";
if($reportType=='customer')
{
    $header.='דו"ח שיווק ללקוח לתאריכים '.$headerSDate." עד ".$headerEDate;
}
else
    if($reportType=='newCustomer')
    {
        $header.='דו"ח שיווק ללקוח לתאריכים '.$headerSDate." עד ".$headerEDate;
    }
    else 
        if($reportType=='collection')
            {
            $header.='דו"ח גביה ללקוח לתאריכים '.$headerSDate." עד ".$headerEDate;
            }
                else 
                    if($reportType=='grower')
                    {
                        $header.='דו"ח מגדל ללקוח לתאריכים '.$headerSDate." עד ".$headerEDate;
                    }



$pdf->SetHeaderData("","" ,"",$header); 
//$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);



// set header and footer fonts
$pdf->setHeaderFont(Array("dejavusans", '', "15"));
$pdf->setFooterFont(Array("dejavusans", '', "12"));

// 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(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 data:
$lg = Array();
$lg['a_meta_charset'] = 'UTF-8';
$lg['a_meta_dir'] = 'rtl';
$lg['a_meta_language'] = 'fa';
$lg['w_page'] = 'page';

//set some language-dependent strings
$pdf->setLanguageArray($lg);

// ---------------------------------------------------------

// set font
$pdf->SetFont('dejavusans', '', 12);

// add a page
$pdf->AddPage();
// -----------------------------------------------------------------------------

        if($type == "all"){
            $pdf->writeHTML($html, true, false, false, false, '');
        } elseif($type == "partial"){
            $parts = explode("<div class='subTable'>", $html);
            $pdf->writeHTML($parts[2], true, 0, true, 0);
        }
        ob_clean();
        $pdf->Output('exmpl/' . $filename . '.pdf', $output);
    } //END_OF_FUNCTION

set_time_limit(0);
require('modifyDate.php');
require('createQuery.php');

//GET FORM DATA
if(isset($_POST['submitMeshavek']))
{
$saleStart=$_POST['saleStart'];
$saleEnd=$_POST['saleEnd'];
$saleWeek=$_POST['weekId'];
$growerId=$_POST['growerId'];
$reportType=$_POST['reportType'];
}





/*
$regularSaleStart=reverseDate($saleStart);
$regularSaleEnd=reverseDate($saleEnd);
$header='<h2>מועדון מגדלים יוסי חותה פירות וירקות</h2>';
$header.="דוח שיווק ללקוח לתאריכים                 ".$regularSaleEnd." ".$regularSaleStart;

 public function Header() {
        // Set font
        $this->SetFont('dejavusans', '', 10);
        // Title
        $this->Cell(0, 15, '<< TCPDF Example 003 >>', 0, false, 'C', 0, '', 0, false, 'M', 'M');
    }
*/

if($reportType=='customer')
{
    include('reportType/customer.php');
}
else
    if($reportType=='newCustomer')
    {
        include('reportType/customerNew.php');
    }
    else 
        if($reportType=='collection')
            {
            include('reportType/collect.php');
            }
                else 
                    if($reportType=='grower')
                    {
                        include('reportType/grower.php');
                    }


createPDF($html, "all", "example_045", "I",$saleStart,$saleEnd,$reportType);                    
createPDF($html, "partial", "example_048", "F",$saleStart,$saleEnd,$reportType);
createPDF($html, "all", "example_046", "F",$saleStart,$saleEnd,$reportType);



/*
ob_clean();
//$pdf->writeHTML($html, true, false, false, false, '');
$pdf->writeHTML($html, true, 0, true, 0);
//Close and output PDF document
$pdf->Output('example_048.pdf', 'I');

$pdf->writeHTML($html, true, 0, true, 0);
//Close and output PDF document
$pdf->Output('examp.pdf', 'I');
*/

?>

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Ваша проблема в том, что после $pdf->Output('exmpl/example_045.pdf', 'I') и как будто скрипт там заканчивается.Зачем снимать в заголовок файла.

Нельзя снимать в двух разных заголовочных файлах, если вы хотите сгенерировать два отдельных PDF-файла, я рекомендую перейти с функцией вывода строки

$pdf->Output('', 'S');

таким образом эти два файла в файловой системе сохраняют их и записывают.Сожмите файлы и снимите сжатый заголовок файла, содержащий два файла pdf.

ОБНОВЛЕНИЕ

, в вашем случае я бы использовал аналогичный подход:

function createPDF($html, $type, $filename, $output)
    {
        $pdf = new TCPDF();
        //... code ...
        if($type == "all"){
            $pdf->writeHTML($html, true, false, false, false, '');
        } elseif($type == "partial"){
            $parts = explode("<div class='subTable'>", $html);
            $pdf->writeHTML($parts[2], true, 0, true, 0);
        }
        $pdf->Output('exmpl/' . $filename . '.pdf', $output);
    }

createPDF($html, "partial", "example_048", "F");
createPDF($html, "all", "example_046", "F");
createPDF($html, "all", "example_045", "I");

Окончательное обновление

правильный код:

<?php

//REQUIRE TCPDF
require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/config/lang/heb.php');
require_once('tcpdf/tcpdf.php');

class MYPDF extends TCPDF
{

    //Page header
    public function Header()
    {
        // Set font
        $this->SetFont('helvetica', 'B', 20);
        // Title
        $this->Cell(0, 15, '<< TCPDF Example 003 >>', 0, false, 'C', 0, '', 0, false, 'M', 'M');
    }

    // Page footer
    public function Footer()
    {
        // Position at 15 mm from bottom
        $this->SetY(-15);
        // Set font
        $this->SetFont('helvetica', 'I', 8);
        // Page number
        $this->Cell(0, 10, 'Page ' . $this->getAliasNumPage() . '/' . $this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
    }

    // Create PDF
    function createPDF($html, $type, $filename, $output, $saleStart, $saleEnd, $reportType)
    {
        // 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('Nicola Asuni');
        $pdf->SetTitle('TCPDF Example 018');
        $pdf->SetSubject('TCPDF Tutorial');
        $pdf->SetKeywords('TCPDF, PDF, example, test, guide');
        */
        // SET CUSTOMIZED DATE INCLUDED HEADER
        $headerSDate = reverseLongDate($saleStart);
        $headerEDate = reverseLongDate($saleEnd);
        $header = "";
        $header .= "\t";
        $header .= Date("d-m-Y h:m:s");
        $header .= "\n";
        $header .= 'מועדון המגדלים יוסי חותה פירות וירקות';
        $header .= "\n";
        if ($reportType == 'customer') {
            $header .= 'דו"ח שיווק ללקוח לתאריכים ' . $headerSDate . " עד " . $headerEDate;
        }
        elseif ($reportType == 'newCustomer') {
            $header .= 'דו"ח שיווק ללקוח לתאריכים ' . $headerSDate . " עד " . $headerEDate;
        }
        elseif ($reportType == 'collection') {
            $header .= 'דו"ח גביה ללקוח לתאריכים ' . $headerSDate . " עד " . $headerEDate;
        }
        elseif ($reportType == 'grower') {
            $header .= 'דו"ח מגדל ללקוח לתאריכים ' . $headerSDate . " עד " . $headerEDate;
        }

        $pdf->SetHeaderData("", "", "", $header);
        //$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);


        // set header and footer fonts
        $pdf->setHeaderFont(Array("dejavusans", '', "15"));
        $pdf->setFooterFont(Array("dejavusans", '', "12"));

        // 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(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 data:
        $lg = Array();
        $lg['a_meta_charset'] = 'UTF-8';
        $lg['a_meta_dir'] = 'rtl';
        $lg['a_meta_language'] = 'fa';
        $lg['w_page'] = 'page';

        //set some language-dependent strings
        $pdf->setLanguageArray($lg);

        // ---------------------------------------------------------

        // set font
        $pdf->SetFont('dejavusans', '', 12);

        // add a page
        $pdf->AddPage();
        // -----------------------------------------------------------------------------

        if ($type == "all") {
            $pdf->writeHTML($html, true, false, false, false, '');
        } elseif ($type == "partial") {
            $parts = explode("<div class='subTable'>", $html);
            $pdf->writeHTML($parts[2], true, 0, true, 0);
        }
        ob_clean();
        $pdf->Output('exmpl/' . $filename . '.pdf', $output);
    } //END_OF_FUNCTION

}

set_time_limit(0);
require('modifyDate.php');
require('createQuery.php');

//GET FORM DATA
if (isset($_POST['submitMeshavek'])) {
    $saleStart = $_POST['saleStart'];
    $saleEnd = $_POST['saleEnd'];
    $saleWeek = $_POST['weekId'];
    $growerId = $_POST['growerId'];
    $reportType = $_POST['reportType'];
}


if ($reportType == 'customer') {
    include('reportType/customer.php');
}
elseif ($reportType == 'newCustomer') {
    include('reportType/customerNew.php');
}
elseif ($reportType == 'collection') {
    include('reportType/collect.php');
}
elseif ($reportType == 'grower') {
    include('reportType/grower.php');
}

$myPdf = new MYPDF();
$myPdf->createPDF($html, "partial", "example_048", "F", $saleStart, $saleEnd, $reportType);
$myPdf->createPDF($html, "all", "example_046", "F", $saleStart, $saleEnd, $reportType);
$myPdf->createPDF($html, "all", "example_045", "I", $saleStart, $saleEnd, $reportType);


?>
0 голосов
/ 26 октября 2011

из tcpdf документов

Отправка документа в указанное место назначения ... Сначала метод вызывает Close() при необходимости прекратить действие документа.

, поэтому вам нужно создать еще один $pdf экземпляр, потому что после Output() не прекращается использование writeHTML() снова

...