Создать PDF из определенного div

Добрый день!

Мне нужно создать PDF-файл из HTML-страницы, но из определенного div

<div id="canvas">
   all content is here
</div>

У меня есть эта функция как плагин в CodeIgniter, использующий mPDF

function pdf($html, $filename=null)
{
    require_once("mpdf_lib/mpdf.php");

    $mpdf = new mPDF();
    $mpdf->WriteHTML($html);

    if($filename == null){
        $filename = date("Y-m-d").'_test.pdf';
    }

    $mpdf->Output($filename, 'I');
}

Мне просто нужно знать, как я могу получить html-контент из этого конкретного div для передачи в качестве параметра в функции pdf ($html).

Я нашел много примеров, но практически все они используют «статический» html-код.

Заранее спасибо!


person CainaSouza    schedule 14.08.2013    source источник
comment
Во-первых, сейчас около полуночи! Во-вторых, этот твой конкретный div, где он? это в другом файле на сервере? это сгенерированный php html?...   -  person undone    schedule 14.08.2013
comment
Тогда добрый вечер! ха-ха. Этот div находится в представлении (newproject.php), загруженном из контроллера (codeigniter)   -  person CainaSouza    schedule 14.08.2013


Ответы (2)


Сначала убедитесь, что ваша функция php находится в контроллере codeigniter, чтобы доступ к веб-странице /controllername/pdf вызывал эту функцию.

Затем используйте javascript для POST содержимого div на ваш сервер. Если вы используете jquery, см. jquery.post. Это вызовет функцию контроллера через ajax и создаст pdf.

$.post('/controller/php', {html: $("#canvas").html()})

Затем измените функцию php, чтобы собрать аргумент через $this->input->post('html');

function pdf()
{
    require_once("mpdf_lib/mpdf.php");

    $html = $this->input->post('html');
    $mpdf = new mPDF();
    $mpdf->WriteHTML($html);

    $filename = date("Y-m-d").'_test.pdf';

    $mpdf->Output($filename, 'I');
}
person Lyn Headley    schedule 14.08.2013
comment
Функция найдена корректно. Мне нужно знать, как опубликовать содержимое div. Я не очень хорошо знаю javascript. - person CainaSouza; 14.08.2013

Это не чистый способ, но он работает

пример, у меня есть макет html в «представлениях/тестах»

это внутри views/test.php

<!--
   Check if $print variable is set
   if it is set then the request is for printing if not the request is for veiwing
-->
<?if(isset($print)):?>

     <!--
       if canvas is set a specific part of the html is only selected
       i did not put an else condition you can supply it if you want
     -->
     <?if($isset($canvas)):?>
           <?if($canvas == 'canvas'):?>
               <div id="canvas">
                  <!--content-->
               </div>

           <?elseif($canvas == 'canvas_two'):?>
               <div id="canvas_two">
                  <!--content-->
              </div>
           <?elseif($canvas == 'canvas_three'):?>
               <div id="canvas_three">
                  <!--content-->
               </div>
           <?endif;?>
     <?endif;?>
<?else:?>
 <div id="canvas">
      <!--content-->
  </div>

 <div id="canvas_two">
      <!--content-->
  </div>

<div id="canvas_three">
      <!--content-->
  </div>
<?endif;?>

И на вашем контроллере:

function pdf()
{
    require_once("mpdf_lib/mpdf.php");
    //gives of the variable print and canvas on what id
    $html = $this->load->view('test',array('print'=>TRUE,'canvas'=>'canvas'),TRUE);
    $mpdf = new mPDF();
    $mpdf->WriteHTML($html);

    if($filename == null){
        $filename = date("Y-m-d").'_test.pdf';
    }

    $mpdf->Output($filename, 'I');
}
person tomexsans    schedule 18.08.2013