在 PDF 中执行 Javascript
Execute Javascript in PDF
我正在使用 wkhtmltopdf 将 html 转换为 pdf,使用以下代码转换工作完全正常:
shell_exec('wkhtmltopdf http://www.example.com/Haryana.htm Haryana.pdf');
现在,假设 html
文件中隐藏了一些 DIV。说,
在Haryana.htm
<div style="display:none;">Hello</div>
因此,单词 'Hello' 也不会在转换后的 PDF 中打印(这是显而易见的)。
我需要做的是将所有隐藏文本显示到转换后的 PDF 中。
到目前为止我尝试的是,创建了一个 JS 文件说 external-js.js
,其中包含显示所有隐藏的 DIV 的代码
var elements = document.getElementsByTagName('DIV')
for (var i = 0; i < elements.length; i++){
if (elements[i].style.display == 'none') {
elements[i].style.display = 'block';
}
}
并在创建 PDF 时应用此 JS 文件,如下所示:
shell_exec('wkhtmltopdf --enable-javascript --run-script /var/www/html/search/external-js.js http://www.example.com/Haryana.htm Haryana.pdf');
PDF 仍然可以正常转换,但隐藏文本不可见。
请帮我显示pdf中所有隐藏的文字。我希望我能够解决这个问题。
注意:我无法在 html 文件中进行更改,因为我们有数千个这样的文件。
UPDATE : 当添加 debug-javascript
选项和 运行 putty
中的以下代码时
wkhtmltopdf --debug-javascript --enable-javascript --run-script /var/www/html/search/external-js.js http://www.example.com/Haryana.htm Haryana.pdf;
我得到以下输出:
Loading pages (1/6)
Warning: undefined:0 SyntaxError: Invalid flags supplied to RegExp constructor.
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
其中有一些警告。我确定此警告是由于 --run-script /var/www/html/search/external-js.js
而出现的,但为什么呢?我已经按照官方文档添加了这个。
我被这个问题困住了...有人可以帮我吗?
最后,经过大量的研发,我得到了解决方案:-)。
我走在正确的轨道上,我所做的不是传递 JS 脚本 url,而是将整个脚本内容传递给 wkhtmltopdf。
代码如下:
$script = 'var elements = document.getElementsByTagName(\'DIV\');
for (var i = 0; i < elements.length; i++)
{
if (elements[i].style.display == \'none\')
{
elements[i].style.display = \'block\';
}
}';
shell_exec('wkhtmltopdf --run-script "'.$script.'" http://www.example.com/Haryana.htm Haryana.pdf');
就是这样:-)
可能其他用户将来会遇到同样的问题,所以我将此作为答案发布。
我正在使用 wkhtmltopdf 将 html 转换为 pdf,使用以下代码转换工作完全正常:
shell_exec('wkhtmltopdf http://www.example.com/Haryana.htm Haryana.pdf');
现在,假设 html
文件中隐藏了一些 DIV。说,
在Haryana.htm
<div style="display:none;">Hello</div>
因此,单词 'Hello' 也不会在转换后的 PDF 中打印(这是显而易见的)。
我需要做的是将所有隐藏文本显示到转换后的 PDF 中。
到目前为止我尝试的是,创建了一个 JS 文件说 external-js.js
,其中包含显示所有隐藏的 DIV 的代码
var elements = document.getElementsByTagName('DIV')
for (var i = 0; i < elements.length; i++){
if (elements[i].style.display == 'none') {
elements[i].style.display = 'block';
}
}
并在创建 PDF 时应用此 JS 文件,如下所示:
shell_exec('wkhtmltopdf --enable-javascript --run-script /var/www/html/search/external-js.js http://www.example.com/Haryana.htm Haryana.pdf');
PDF 仍然可以正常转换,但隐藏文本不可见。
请帮我显示pdf中所有隐藏的文字。我希望我能够解决这个问题。
注意:我无法在 html 文件中进行更改,因为我们有数千个这样的文件。
UPDATE : 当添加 debug-javascript
选项和 运行 putty
wkhtmltopdf --debug-javascript --enable-javascript --run-script /var/www/html/search/external-js.js http://www.example.com/Haryana.htm Haryana.pdf;
我得到以下输出:
Loading pages (1/6)
Warning: undefined:0 SyntaxError: Invalid flags supplied to RegExp constructor.
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
其中有一些警告。我确定此警告是由于 --run-script /var/www/html/search/external-js.js
而出现的,但为什么呢?我已经按照官方文档添加了这个。
我被这个问题困住了...有人可以帮我吗?
最后,经过大量的研发,我得到了解决方案:-)。 我走在正确的轨道上,我所做的不是传递 JS 脚本 url,而是将整个脚本内容传递给 wkhtmltopdf。
代码如下:
$script = 'var elements = document.getElementsByTagName(\'DIV\');
for (var i = 0; i < elements.length; i++)
{
if (elements[i].style.display == \'none\')
{
elements[i].style.display = \'block\';
}
}';
shell_exec('wkhtmltopdf --run-script "'.$script.'" http://www.example.com/Haryana.htm Haryana.pdf');
就是这样:-)
可能其他用户将来会遇到同样的问题,所以我将此作为答案发布。