【问题标题】:CSS and HTML print setup for multi-page documents with running header and footer带有运行页眉和页脚的多页文档的 CSS 和 HTML 打印设置
【发布时间】:2013-05-22 00:49:43
【问题描述】:

我正在做噩梦,弄清楚如何正确设置 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>

我正在阅读有关在this question 上回答后运行页眉和页脚的信息,但我没有得到想要的结果。目前我的 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 给了我完全奇怪的结果。它首先打印一个空白页,然后如果是单页文档则可以打印第二页,如果是多页文档则只打印第一页,其他页面将被忽略。

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

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

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

【问题讨论】:

  • 我发布了一种与 Chrome 兼容的方法来模拟正在运行的页眉 here(但不支持页脚),以及重复表头的解决方案 @ 987654323@.

标签: html css printing


【解决方案1】:

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

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

您想使用@top-center@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 ... 如果你声明你的页脚在顶部,它就不起作用。

【讨论】:

  • @top-center@bottom-centerPrince 支持。
【解决方案2】:

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

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

  1. 绕过 Firefox 的缓存

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

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

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

    如果您的硬盘很大,这可能需要几分钟时间。

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

    查看网站上的页面时:

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

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

【讨论】:

    【解决方案3】:

    你能试试 Firefox 的安全模式吗?这是一个标准诊断工具,可以绕过扩展(和一些自定义设置)的干扰。更多信息:使用安全模式解决 Firefox 问题。

    您可以在安全模式下使用

    重新启动 Firefox

    帮助 > 禁用加载项后重新启动

    在对话框中,单击“以安全模式启动”(不是重置)

    安全模式不会自动禁用插件。 Flash 应该没问题,但你可以在这里禁用其他的:

    橙色 Firefox 按钮(或工具菜单)> 附加组件 > 插件类别

    有什么不同吗?

    【讨论】:

    • @当我选择禁用附加组件的情况下重新启动时,我没有“以安全模式启动”选项?我在 OS X 上使用 Firefox 21.0。这是对话框 dl.dropboxusercontent.com/u/1207859/…
    • 您提供给我的链接在我的公司被屏蔽了。无论如何,当我回到家时,我会打开链接。直到尝试这个链接kb.mozillazine.org/Safe_mode#Mac_OS_X。将帮助您在 OS X 中激活安全模式。并尝试一下。
    猜你喜欢
    • 2013-09-18
    • 2012-10-31
    • 2020-07-29
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2011-11-01
    • 2020-02-06
    • 2012-10-29
    相关资源
    最近更新 更多