如何使用带有canvas元素的php打印到pdf

时间:2010-07-20 19:13:40

标签: php jquery pdf canvas pdf-generation

我正在尝试使用PHP制作动态PDF生成器,但到目前为止我遇到了一个问题,即我尝试生成PDF的页面有一个由flot生成的条形图使用帆布。

有没有人有这方面的经验或知道如何将画布打印到pdf?

我也很乐意让我的客户端加载一个页面,该页面将报表的每个图表都打破(打印)页面,使用CSS来设置分页符并使用内置的Print to PDF打印机。

2 个答案:

答案 0 :(得分:1)

//Here is the way to generate html into canvas into PDF

1 add can js files
jquery.js
JS/html2canvas.js
JS/jquery.plugin.html2canvas.js

2.get the html content to convert into canvas
        $('.hideDivs').hide(); 
        $('.formdrop').hide();
        $('.block').html2canvas({
            onrendered: function (canvas) {
                 //Set hidden field's value to image data (base-64 string)
                $('#img_val').val(canvas.toDataURL("image/jpg"));
                 $('#img_val3').val($('.block').html()); //html of div
                //Submit the form manualy

            }
        });

3. PHP back end with TC PDF
if(isset($_REQUEST['img_val'])):
        //Get the base-64 string from data
        $filteredData=substr($_POST['img_val'], strpos($_POST['img_val'], ",")+1);
        //Decode the string
        $unencodedData=base64_decode($filteredData);
        //Save the image
        $imgfile=FCPATH.'images/submsnimage_'.$this->session->userdata('admin_id').'.jpg';
        $imagegerated=file_put_contents($imgfile, $unencodedData);
        chmod($imgfile, 0777);
        $pdfImageFile=site_url()."images/submsnimage_".$this->session->userdata('admin_id').'.jpg';
endif;

4 PDF generation
        ini_set('max_execution_time',300);
        require_once (FCPATH.'tcpdf/config/lang/eng.php');
        require_once (FCPATH.'tcpdf/tcpdf.php');
        $exa = new TCPDF ();
        $exa->SetCreator ( PDF_CREATOR );
        $exa->SetAuthor ( 'Clay County Admin' );
        $exa->SetTitle ( 'Clay County Form' );
        $exa->SetSubject ( 'Example of TCPDF' );
        $exa->SetKeywords ( 'TCPDF, PDF, PHP' );
        $exa->SetFont ( 'times', '', 18 ); 
        $exa->AddPage ();
        $exa->Image ($pdfImageFile, 15, 10, 430,630); 
        $exa->AddPage ();
        $exa->Image ($pdfImageFile2, 15, 10, 430,630); 
        $exa->AddPage ();
        $exa->Image ($pdfImageFile3, 15, 10, 430,630); 

        $exa->setImageScale(PDF_IMAGE_SCALE_RATIO);
        $exa->setJPEGQuality (100);
        $root=site_url();
        $exa->setImageScale(1.53);

        $txt ="";
        $exa->WriteHTML ($txt, true, false, true, false, '');
        $exa->Output (FCPATH.'uploads/pdf/clayCommunityBullyReport.pdf', 'F' ); // downloads the pdf

答案 1 :(得分:-4)

我从未使用<canvas>来尝试创建/打印pdf。我建议使用<canvas> NOT ,因为并非所有浏览器都支持此功能。但是在画布中有一个名为toDataURL()的函数,它会将画布显示的内容转换为可以用来保存/打印的图像,但是它将采用图像格式而不是pdf格式。

我建议使用php库创建一个pdf,然后将其显示给用户。我个人使用过FPDF,但这里有一些列表:

http://www.fpdf.org/

http://www.tcpdf.org/

http://www.php.net/manual/en/book.pdf.php