9

我似乎找不到一种一致的方法来创建一个可以跨 word、internet explorer 和 chrome 工作的分页符。

以下示例(来自Google Chrome Printing Page Breaks)将为 Chrome 和 Internet Explorer 正确创建分页符,但在 word 中没有分页符。

      <head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <title>Paginated HTML</title>
    <style type="text/css" media="print">
      div.page
      {
        page-break-after: always;
        page-break-inside: avoid;
      }
    </style>
  </head>
  <body>
    <div class="page">
      <h1>This is Page 1</h1>
    </div>
    <div class="page">
      <h1>This is Page 2</h1>
    </div>
    <div class="page">
      <h1>This is Page 3</h1>
    </div>
  </body>

在弄乱了单词之后,我发现您可以使用以下内容添加分页符:

<br style="ms-special-character:line-break;page-break-before:always" />

这里的问题是 Internet Explorer 也将其视为分页符,因此如果您将这些方法结合起来,Chrome 和 Word 会正确分页符,但 Internet Explorer 会插入两个分页符。如果您只使用一个,那么 chrome 和 explorer 中的任何一个都是正确的,而 word 则不是等等。

4

5 回答 5

4

试试这个:

<!--[if IE]>
<br>
<![endif]-->
<!--[if !IE]>
<br style="ms-special-character:line-break;page-break-before:always" />
<br>
<![endif]-->

这符合您的需求吗?(注意,这些在普通的旧 html 中工作。我在 Chrome 和 MS Word(以及 IE)中进行了测试,它们运行良好。)

于 2012-05-04T21:30:42.807 回答
1

这是 IE8 和 IE9 之间的区别(前提是 IE9 处于标准模式),因此您需要以某种方式区分这些浏览器 - 使用条件注释或 CSS hack,例如:

div.page:not(.dummy)
{
    page-break-after: always;
    page-break-inside: avoid;
}

(在 Chrome、Firefox、OpenOffice Writer [希望能充分替代 Word] 和 IE 7、8、9 中测试)

为了防止浏览器在 br 上应用分页符并理解:not,您可以添加这个,尽管我不知道有任何浏览器需要它:

br:not(.dummy)
{
    page-break-before: auto;
}
于 2012-05-11T00:11:03.557 回答
0

将相关的 CSS 放在 !IE 条件注释中。其他一切都可以保持原样。

<style type="text/css" media="print">
<!--[if !IE]>
      div.page
      {
        page-break-after: always;
        page-break-inside: avoid;
      }
<![endif]-->
   </style>

Explorer 将<!--[if !IE]><![endif]-->标记之间的所有内容视为注释,Word 不会对其作出反应。所有其他浏览器将继续像以前一样显示。

于 2012-05-09T09:02:52.523 回答
0

我知道这样的帖子会让我付出代价,但是,说真的,退后一步,重新考虑你想要完成的事情。

可以使用 Word 查看和打印报告的用户也可以使用 IE,并且很可能可以轻松访问 Chrome。所以我的猜测是 Word 不只是用于查看和打印,尤其是用于编辑。

我遵循了您的示例,并且我的(在各个方面都未修改)IE9 不会打印使用 Word 2010 插入的分页符,并且生成的 HTML 文档与初始文档几乎没有任何相似之处,尤其是 DIV 消失了,因此假设文档仍然打印同样在 Word 有发言权之后几乎是漫不经心的乐观。

这整个想法似乎被打破了:

  • 考虑到 Word 的处理方式,以您的方式编写 HTML 似乎毫无意义
  • 即使是最近的 IE 也无法处理使用 Word 插入分页符的简单示例
  • 保存 Word 时,创建了一个语言设置特定目录和三个新文件,这为任何产品产生了大量可笑的必要测试
  • 即使在静态的 Microsoft 生态系统中,也需要大量用户知识(生成目录、如何正确保存、如何正确复制整个文档)才能使这项工作
  • 看来用户定义的设置很容易破坏任何使用 HTML 的解决方案

我建议最初将您的报告编写为 Word 文档。即使经过压缩,Word 文档仍然像 HTML 一样是标记,因此如果您已经可以生成 HTML,则可以轻松生成 Word。因为您可以为几乎所有基于 x86 或 ARM 的设备获得 Word 查看器,这似乎比在即使简单示例都失败的方向上探索更合理。

于 2012-05-15T10:38:03.427 回答
0

另一个可能对处理此类问题的某些人有所帮助的补充:该更改仅适用于块元素。在我们的旧测试中,有人使用“span”编写了一个块。我进行了多次测试,但无法让 Vreality 的解决方案发挥作用。然后我想可能是因为 span 不是块元素,所以默认添加 'display:block' 到不是块元素的元素。

另一件事:我正在使用最新的 Chrome (v.25),“page-break-inside:避免;” 修复似乎不再需要。

于 2013-03-05T20:30:52.433 回答