使用wkhtmltopdf --run-script选项时JavaScript未执行求助
问题描述
使用wkhtmltopdf 0.12.6(含patched qt)将简单HTML页面生成PDF时,指定的JavaScript代码未执行。
关联代码
HTML代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Hello World</title> <style> body {background-color: powderblue;} h1 {color: blue;} p {color: red;} </style> </head> <body> <h1>Hello World</h1> <p class="myParagraph">my paragraph</p> <script> </script> </body> </html>
执行的ZSH命令
wkhtmltopdf \ --run-script " window.onload = function() { document.body.style.background = 'pink'; document.getElementsByClassName('myParagraph')[0].style.display = 'none'; } " \ --javascript-delay 1000 \ programma.html \ programma.pdf
解决办法
修正命令行脚本的格式问题
ZSH对多行引号的解析可能出错,把脚本压缩成单行并用单引号包裹,避免转义问题:wkhtmltopdf \ --run-script 'window.onload = function(){document.body.style.background="pink";document.getElementsByClassName("myParagraph")[0].style.display="none";}' \ --javascript-delay 1000 \ programma.html \ programma.pdf将脚本嵌入HTML内部
把JavaScript直接写在HTML的<script>标签里,绕开命令行传递的格式限制:
修改后的HTML:<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Hello World</title> <style> body {background-color: powderblue;} h1 {color: blue;} p {color: red;} </style> </head> <body> <h1>Hello World</h1> <p class="myParagraph">my paragraph</p> <script> window.onload = function() { document.body.style.background = 'pink'; document.getElementsByClassName('myParagraph')[0].style.display = 'none'; } </script> </body> </html>执行简化命令:
wkhtmltopdf --javascript-delay 1000 programma.html programma.pdf显式启用JavaScript
虽然0.12.6默认启用JS,但可以添加--enable-javascript参数确保功能生效:wkhtmltopdf \ --enable-javascript \ --javascript-delay 1000 \ --run-script 'window.onload = function(){document.body.style.background="pink";document.getElementsByClassName("myParagraph")[0].style.display="none";}' \ programma.html \ programma.pdf延长脚本执行延迟
尝试把--javascript-delay调整为2000(2秒),确保页面完全加载后再执行脚本:wkhtmltopdf \ --run-script 'window.onload = function(){document.body.style.background="pink";document.getElementsByClassName("myParagraph")[0].style.display="none";}' \ --javascript-delay 2000 \ programma.html \ programma.pdf
内容的提问来源于stack exchange,提问作者TunaFFish
相关产品推荐
相关产品推荐

