javascript - 在 PDF 中执行 Javascript

标签 javascript php html linux wkhtmltopdf

我正在使用 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 文件中进行更改,因为我们有数千个这样的文件。

更新 :添加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');

就是这样:-)

可能其他用户将来会遇到同样的问题,所以我将此作为答案发布。

关于javascript - 在 PDF 中执行 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36640074/

相关文章:

javascript - 移动嵌套对象并从中构建平面对象

javascript - 将文本字符串插入 href 链接(特定位置)

PHP5.3 在 VIM 中关闭缩进

html - 水平对齐链接,使它们在导航中均匀分布

c# - 注销后删除历史记录或禁用后退按钮

javascript - Silverstripe 要求组合文件 CSS 和 JS

php - 在 PHP 中的 foreach 中使用多个数组

php - require_once 可以和符号链接(symbolic link)一起使用吗?

javascript - 检查视频是否正在流式传输

css - 直接包含 SVG 时的辅助功能