wkhtmltopdf 能直接将登录后(后台页面)的某一网页生成pdf文件吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wkhtmltopdf 能直接将登录后(后台页面)的某一网页生成pdf文件吗相关的知识,希望对你有一定的参考价值。

我的系统是php的,wkhtmltopdf 一般前台页面可直接通过命令生成,但是登录后的网页比如管理中心的网页因为有权限判断无法直接生成,想问下该如何处理这类问题,麻烦知道的提供下思路或详细解决办法,谢谢了!

参考技术A 没用过wkhtmltopdf,但是你可以试试用curl()模拟登陆,然后生成页面。。具体的你可以查一下手册。网上有很多curl使用的例子。

使用 wkhtmltopdf 将 Twitter 引导页面转换为 PDF:跨度问题

【中文标题】使用 wkhtmltopdf 将 Twitter 引导页面转换为 PDF:跨度问题【英文标题】:Converting Twitter bootstrap page into PDF with wkhtmltopdf : span issue 【发布时间】:2013-11-11 10:06:36 【问题描述】:

我正在使用 Symfony2 Bundle KnpSnappyBundle 将 html 树枝模板转换为 pdf。

KnpSnappyBundle 基于 Snappy 包装器,使用 wkhtmltopdf。

我的模板像这样使用twitter bootstrap 2.3.2 css:

<div class="container">
    <div class="row">
        <div class="span12">
            <h4>TITLE</h4>
        </div>
    </div>
    <div class="row">
        <div class="span6" id="customers">
            <h5>TITLE</h5>

            <p>TEXT</p>

            <ul class="unstyled">
                <li>LIST ITEM</li>
                <li>LIST ITEM</li>
                <li>LIST ITEM</li>
                <li>LIST ITEM</li>
            </ul>
        </div>
        <div class="span6" id="estimate">
            <h5>TITLE</h5>

            <ul class="unstyled">
                <li>LIST ITEM</li>
                <li>LIST ITEM</li>
                <li>LIST ITEM</li>
                <li>LIST ITEM</li>
            </ul>
        </div>
    </div>
</div>

问题:客户和估计跨度不在应有的同一线上。 不知道怎么回事。

【问题讨论】:

【参考方案1】:

这是 Bootstrap3 的解决方案:始终使用 .col-xs-n。

原因是 wkhtmltopdf 不支持 @media 块中的 css。在 bootstrap3 中,@media 块外只有 col-xs-n 规则。

我检查了 bootstrap2.3.2 css,似乎 spanN 规则总是在 @media 块内。

因此,一个丑陋的解决方案是将所有 spanN 规则复制到顶层到另一个 css 文件并将其包含到 html 中。

【讨论】:

我发现了这个问题,因为我面临一个问题,即我的引导页面位于 3 列 (3-6-3) 中,当我通过 wkhtml2pdf 运行它时,它会将其全部呈现为 12 列。你能详细说明这个复制规则的场景吗?我正在使用 2.3.2 对我不起作用,所以我进一步搜索。 flex css 属性被忽略。所以我写了一个额外的.col-md-3 类,增加了浮点数和宽度,而不是它的工作。 Found issue here 将 viewport-size: '1024x768' 添加到 wkhtml2pdf 选项中,您可以使用 col-md-* 类。 它适用于 bootstrap 4,您只需要使用 .col-n 而不是 .col-xs-n 由于 Bootstrap 4.1 这不再有效,请参阅此处的说明:github.com/twbs/bootstrap/issues/27642#issuecomment-450479741【参考方案2】:

我知道这个问题很老,但这个问题仍然出现。在最近的 Laravel 5.8Twitter Bootstrap 4.0.0 项目中。我设法使用.col-md .col 并通过执行以下操作获得了完美的结果:

config/snappy.php

上添加 --viewport-size 1024x768 参数
     'pdf' => array(
        'enabled' => true,
        'binary' => "C:\wkhtmltopdf\bin\wkhtmltopdf --viewport-size 1024x768",
        'timeout' => false,
        'options' => array(),
        'env' => array(),
    )

那么在你看来使用.col-md.col 没有任何问题。

注意,使用 public path 将 Bootstrap 4 包含到您的 HTML 中。

//Laravel
<link rel="stylesheet" href="public_path('css/bootstrap4/bootstrap.min.css')">

【讨论】:

【参考方案3】:

如果您只是想创建托管网页的 PDF,您可以使用 Internet Explorer 免费进行。

我不得不为一些需要以 PDF 格式查看其网页和电子邮件布局以获得批准的客户执行此操作。

    在 Internet Explorer 中打开网页。 按键盘上的 F12,它将打开检查工具。 选择'Emulation'的图标,它是一个小电脑/电话图标。 这允许您选择要模拟的 IE 版本 你的页面。我选择 IE8 来获取响应页面和电子邮件 像在完整的桌面视图上一样呈现。 然后在浏览器的右上角应该有一个图标(地球旁边有一个小的 PDF 文档),单击该下拉菜单并选择 '将网页转换为 PDF'

这应该会自动为您的网页创建尽可能准确的 PDF,即使使用响应式 CSS。

【讨论】:

我正在尝试在服务器端生成 pdf。如果我试图按照你说的做,我不会使用 Internet Explorer ;)

以上是关于wkhtmltopdf 能直接将登录后(后台页面)的某一网页生成pdf文件吗的主要内容,如果未能解决你的问题,请参考以下文章

使用wkhtmltopdf工具生成pdf

如何实现后台管理系统中的权限管理?

后台管理系统

使用 wkhtmltopdf 将 Twitter 引导页面转换为 PDF:跨度问题

使用$.ajax调用接口,返回登录页面,所以我想先用ajax将用户名密码传给登录接口。返回成功但没有记住登录

后台跳转页的实现