You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:35:34