mpdf无视javascript

时间:2012-12-12 17:39:55

标签: php javascript mpdf

我在这里有一个问题..

我使用缓冲来使用mpdf获取pdf文件..

但我在这里有点困惑..

我在页面上有一些我被缓冲的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;

convert.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();

任何人都可以帮我这个???

2 个答案:

答案 0 :(得分:9)

mpdf支持基本的javascript。

PDF阅读器了解基本的javascript功能。

print();类似,您可以使用mpdf库的SetJS()函数添加它。

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();

答案 1 :(得分:3)

PHP * PDF库(tcpdf,fpdf,mpdf等...)无法运行javascript代码,因为这需要javascript解释器和浏览器呈现功能,或者如果它支持javascript它将不会像你习惯的那样运行它在客户端编程中使用它。除此之外,CSS和标记解释也很差。

但是,如果您正在寻找能够像普通浏览器一样呈现javascript和css的替代品,我建议 wkhtmltopdf

wkhtmltopdf是使用webkit渲染引擎和qt将html转换为pdf的shell实用程序。它作为控制台程序运行,其中的参数指定要呈现的内容并具有大量选项。基本上你可以告诉它加载页面等待5秒javascript完成然后创建pdf。有Linux和Windows版本可用,但对于Linux,它需要安装X11库。

我确定还有一些其他选项,但我使用wkhtmltopdf多年,它生成的PDF文件看起来与Chrome或Safari浏览器中的网页完全一样,而且javascript执行效果也很好。