mpdf игнорирует javascript

у меня тут вопрос..

Я использовал буферизацию для получения файлов PDF с помощью mpdf.

но тут я немного запутался..

У меня есть javascript на странице, которую я буферизировал... но сгенерированный контент из javascript не преобразуется в pdf...

позвольте мне получить это прямо ..

скажем, у меня есть этот элемент

<div id='text'></div>

и на моей странице у меня есть код javascript для добавления текста в этот div.. и результаты...

[открыть страницу через браузер]

<div id='text'>TEXT I ADDED USING JAVASCRIPT</div>

но когда я конвертирую его в pdf...

<div id='text'></div> (I DIDNT GET THAT TEXT)

Это скрипт, который используется... template.php

ob_start();

// content of page (included inline javascript code)

$yourfile = ob_get_content();
$_SESSION[forms] = $yourfile;
echo $yourfile;

конвертировать.php

session_start();
include("MPDF54/mpdf.php");

$mpdf=new mPDF('c','A4','','' , 0 , 0 , 0 , 0 , 0 , 0); 

$mpdf->SetDisplayMode('fullpage');

$mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list

$mpdf->WriteHTML($_SESSION[forms]);

$mpdf->Output();

Кто-нибудь может помочь мне с этим???


person Wawan Brutalx    schedule 12.12.2012    source источник
comment
Я предполагаю, что он не поддерживает JavaScript.   -  person ceejayoz    schedule 12.12.2012


Ответы (2)


mpdf поддерживает базовый JavaScript.

Читатели PDF понимают основные функции javascript.

как print();, вы можете добавить его, используя функцию SetJS() библиотеки mpdf.

include("MPDF54/mpdf.php");

$mpdf=new mPDF('c','A4','','' , 0 , 0 , 0 , 0 , 0 , 0); 

$mpdf->SetDisplayMode('fullpage');

$mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list

$mpdf->WriteHTML($_SESSION[forms]);

$mpdf->SetJS('print();')  //JS code with <script></script> tags.

$mpdf->Output();
person Maulik Vora    schedule 26.02.2013

Библиотеки PHP *PDF (tcpdf, fpdf, mpdf и т. д.) не могут запускать код javascript, потому что для этого потребуются возможности интерпретатора javascript и возможности рендеринга браузера, или, если он поддерживает javascript, он не будет запускать его так, как вы привыкли использовать его в программирование на стороне клиента. Наряду с этим интерпретация CSS и разметки также очень плохая.

Однако, если вы ищете альтернативы, способные отображать javascript и css, как обычный браузер, я предлагаю wkhtmltopdf.

wkhtmltopdf — это утилита оболочки для преобразования html в pdf с использованием механизма рендеринга webkit и qt. Он запускается как консольная программа с параметрами, указывающими, что отображать, и имеет множество опций. По сути, вы можете сказать ему загрузить страницу, подождать 5 секунд до завершения javascript, а затем создать pdf. Доступны версии для Linux и Windows, хотя для Linux требуется установка библиотеки X11.

Я уверен, что есть некоторые другие варианты, но я использую wkhtmltopdf в течение многих лет, и он создает PDF-файл, который выглядит точно так же, как веб-страница будет выглядеть в браузерах Chrome или Safari, а также выполнение javascript работает отлично.

person Ivan Hušnjak    schedule 12.12.2012
comment
tcpdf включает javascript, проверьте документацию. Включая this.print(); например, файл pdf запускает диалоговое окно печати после загрузки. - person Yassir Ennazk; 01.02.2013
comment
@YassirEnnazk да, в документах указаны методы публикации некоторого кода XHTML + CSS, Javascript и Forms;, но движок javascript ужасен, поэтому не ожидайте, что вы сможете делать все то, что вы привыкли делать в обычном браузере - person Ivan Hušnjak; 01.02.2013
comment
Правильный. По крайней мере, это делает работу для автоматической печати. - person Yassir Ennazk; 01.02.2013