【问题标题】:Printing the current page to pdf using wkhtmltopdf使用 wkhtmltopdf 将当前页面打印为 pdf
【发布时间】:2013-04-13 10:14:29
【问题描述】:

最近安装了wkhtmltopdf。试图以当前状态捕获整个页面,但是,下面的方法似乎导航到该页面的初始状态,而没有用户输入的所有输入字段。

PHP

shell_exec('wkhtmltopdf http://localhost/www/bolt/invoice.php invoice.pdf');

我想知道是否有人知道wkhtmltopdf 的实现,它捕获页面的当前状态,包括在文本字段中输入的任何文本??

感谢任何建议。

非常感谢!

【问题讨论】:

    标签: php webkit wkhtmltopdf


    【解决方案1】:

    wkhtmltopdf 独立于您当前的浏览会话访问页面。如果你这样点击它,你会得到任何人第一次访问你的页面时会看到的内容。可能您想要做的是使用输出缓冲区保存当前页面,然后在保存的页面上运行 wkhtmltopdf。下面是一些示例代码:

    sub.php

    <?php
    $documentTemplate = file_get_contents ("template.html");
    foreach ($_POST as $key => $postVar)
    {
        $documentTemplate = 
        preg_replace ("/name=\"$key\"/", "value=\"$postVar\"", $documentTemplate);
    }
    file_put_contents ("out.html", $documentTemplate);
    shell_exec ("wkhtmltopdf out.html test.pdf");
    ?>
    

    模板.php

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1>This is a page</h1>
        <form action="sub.php" method="post" accept-charset="utf-8">
            My Test Field:
            <input type="text" name="test_field" value="">
            <input type="submit" value = "submit">
        </form>
    </body>
    </html>
    

    可能从长远来看,您应该有某种基本模板,两个页面都将使用,其中一个在您的输入字段中有一些标记,例如 value='%valueOfThisVariable%',您可以在显示字段时将其替换为空白给用户,并在创建要写入 pdf 的页面时填写用户数据。现在它只是通过并将所有 name='this_name' 替换为 value='this_name->value'。

    【讨论】:

    • 感谢您的回复。请做。我真的不明白使用输出缓冲区如何帮助我捕获用户可能在输入字段中输入的文本。
    • 啊,我第一次错过了那部分。在提交之前,Php 对字段的输入值一无所知。代码的实际应用是什么?一旦实现了值,您也许可以将页面提交回 php,然后输出缓冲页面。
    • 是的,没关系,它们将被提交,因此 PHP 将“知道”这些值。代码的应用一般是为了让用户能够将发票信息打印成PDF。
    • 如果手动设置,wkhtmltopdf 是否会读取输入字段的值?无论如何,如果您要将值提交回服务器,那么您可以在后端重新创建页面,从提交中手动设置文本字段的值。不是最优雅的解决方案,但如果 wkhtmltopdf 兼容,它可能会起作用。
    • 是的,它是初始加载页面的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 2013-08-01
    • 2017-04-11
    • 2015-04-03
    • 2021-09-27
    相关资源
    最近更新 更多