【问题标题】:PHP TCPDF Multiple WriteHTML() Not WorkingPHP TCPDF多个WriteHTML()不起作用
【发布时间】:2011-12-15 12:59:29
【问题描述】:

我编写了一些代码来创建报告,然后使用 TCPDF 将其导出为 .PDF。 我想将报告的不同部分发送到 mail ,因此我需要多次使用函数 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)。

我不得不提一下,我可以多次使用 Output(),而且我已经做过这样的事情,但是我不能多次使用 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');
*/

?>

【问题讨论】:

    标签: php html pdf tcpdf


    【解决方案1】:

    您的问题是在$pdf-&gt;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);
    
    
    ?>
    

    【讨论】:

    • 首先,感谢您的评论,但我仍然无法弄清楚 - Output('','S') 如何帮助我将两个不同的 pdf 文件保存到一个目录中?
    • 您好,非常感谢您的帮助。我使用了你的解决方案,但我又遇到了同样的问题:我得到的只是第一个文件-example_048..你有什么建议吗?
    • 奇怪!使用我的方法安全吗?您可以发布您的完整代码以便找到错误?
    • 嘿,我发布了所有代码。一直在尝试一次又一次,但 TCPDF 只是发疯了,只输出 example_048
    • 希望您在粘贴代码时犯了错误,因为您发布的内容在php中无法理解且无法使用! :S
    【解决方案2】:

    来自 tcpdf 文档

    将文档发送到给定的目的地...该方法首先调用 Close() 必要时终止文档。

    所以您需要创建另一个 $pdf 实例,因为在 Output() 未终止后再次使用 writeHTML()

    【讨论】:

      猜你喜欢
      • 2020-06-25
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多