6

我正在做噩梦,弄清楚如何正确设置 CSS 和 HTML 布局以在我们的网络应用程序中打印文档。我们有不同的文件进入系统(订单、发票、交货单……)。文件包括:

  • 静态标题(公司徽标、联系信息)
  • 身体
    • 客户数据(送货、账单地址)
    • items 表(有几行的表,可以分布在几页中)
  • 静态页脚(免责声明)

我想要的是以下打印功能:

  • 如果正文分布在几页上,我希望静态页眉和页脚在每页上打印
  • 如果项目表分布在更多页面中,则在每页中打印一个表头

目前我的 HTML 布局是这样的:

<!-- STATIC HEADER -->
<div id="pageHeader">
    <table class="table">
        <tr>
            <td>Static header content here</td>
        </tr>
    </table>
</div>

<!-- DOCUMENT CONTENT -->
<div id="pageBody">

    <!-- Customer data -->
    <table class="table">
        <tr>
            <td>Customer data here</td>
        </tr>
    </table>

    <!-- Items table -->
    <table class="table table-condensed table-print">
        <thead style="display:table-header-group;">
            <tr>
                <th>Table header here</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Rows here</td>
            </tr>
        </tbody>
    </table>

</div>

<!-- STATIC FOOTER -->
<div id="pageFooter">
    <table class="table">
        <tr>
            <td>Static footer content here</td>
        </tr>
    </table>
</div>

我正在阅读关于在这个问题的答案之后运行页眉和页脚的信息,但我没有得到想要的结果。目前我的 CSS 设置如下:

#pageHeader, #pageFooter { display: none; }

@media print {
    #pageHeader { display: block; position: running(pageHeader); width: 100%; }
    #pageFooter { display: block; position: running(pageFooter); width: 100%; }
}

@page {
    @top-center {
        content: element(pageHeader);
    }

    @bottom-center {
        content: element(pageFooter);
    }
}

Firefox 给了我完全奇怪的结果。它首先打印一个空白页,如果是单页文档,则第二页可以,如果是多页文档,则只打印第一页,其他页面被忽略。

谷歌浏览器稍微好一点。它打印所有页面,但不会在每一页上打印静态页眉和页脚。页眉仅打印在第一页上,而页脚仅打印在最后一页上。

另一个问题是,如果表格分布在多个页面中,则可以分布在多个页面中的主表不会在每个页面中打印表头。我以为应该这样display:table-header-group;<thead>

这只是不可能实现还是我做错了什么?如果您能就如何处理这个问题给我任何建议或策略,我将非常高兴。由于这个应用程序在受控环境中运行,我可以专注于一两个浏览器(Chrome 和 Firefox 会很棒)。如果它适用于两者是奖金!

4

3 回答 3

4

针对同一个问题,我做了一些研究。这是我的结果:

display:table-header-group;chromium/chrome/webkit/.. 中不起作用,因为它没有实现。自 4 年以来有一个未解决的问题。 https://code.google.com/p/chromium/issues/detail?id=24826

你想使用@top-centerand @bottom-center。这将是一个很棒的想法。它在这里声明 h ttp://www.w3.org/TR/2013/NOTE-css-print-20130314/#at-rules 但参考http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets)# Grammar_and_rules它没有被任何布局引擎实现。我不知道为什么这里提到它http://alistapart.com/article/boom。有人知道吗?

将页眉放在第一页,将页脚放在最后一页的原因很简单:只要剪掉@page部分,你就会看到:@media print { ... display:block ... 如果你声明页脚在顶部,它就不起作用。

于 2013-11-30T20:18:22.173 回答
0

Firefox 在打印某些在屏幕上正常显示的 HTML 页面中的样式时遇到问题,但由于这是机密信息,因此很难就尝试什么给出任何建议,而且建议入侵页面可能没有帮助。以下是一般性建议。

当您对某个特定站点有问题时,“首先要尝试”是清除您的 Firefox 缓存并删除您为该站点保存的 cookie。

  1. 绕过 Firefox 的缓存

    使用 Ctrl+Shift+r 从服务器重新加载页面。

    或者,您也可以使用以下方法完全清除 Firefox 的缓存:

    • 橙色 Firefox 按钮(或工具菜单)> 选项 > 高级
    • 在网络小选项卡 > 缓存的 Web 内容上:“立即清除”

    如果您有一个大硬盘驱动器,这可能需要几分钟。

  2. 删除网站的 cookie(先保存任何待处理的工作)。

    查看网站上的页面时:

    • 右键单击并选择查看页面信息 > 安全 > “查看 Cookie”
    • Alt+t(打开经典工具菜单)> 页面信息 > 安全 > “查看 Cookie”

然后尝试重新加载页面并再次登录。这有帮助吗?

于 2013-05-29T10:09:43.297 回答
0

Could you try Firefox's Safe Mode? That's a standard diagnostic tool to bypass interference by extensions (and some custom settings). More info: Troubleshoot Firefox issues using Safe Mode.

You can restart Firefox in Safe Mode using

Help > Restart with Add-ons Disabled

In the dialog, click "Start in Safe Mode" (not Reset)

Safe mode does not automatically disable plugins. Flash should be fine, but you could disable the others here:

orange Firefox button (or Tools menu) > Add-ons > Plugins category

Any difference?

于 2013-05-29T10:21:09.633 回答