在HTML中为Chrome,资源管理器和单词创建分页符

时间:2012-05-04 21:03:55

标签: html css printing ms-word

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

以下示例(来自Google Chrome Printing Page Breaks)将为Chrome和Internet资源管理器正确创建分页符,但不会在单词中创建分页符。

      <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不是,依此类推。

5 个答案:

答案 0 :(得分: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)中测试过,他们工作得很好。)

答案 1 :(得分: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上应用分页符并理解:不是,你可以添加它,但我不知道任何需要它的浏览器:

br:not(.dummy)
{
    page-break-before: auto;
}

答案 2 :(得分:0)

将相关的CSS放入!IE条件注释中。其他所有东西都可以保留原样。

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

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

答案 3 :(得分:0)

我知道这样的帖子可能会花费我,但是,严肃地说,退一步并重新考虑你想要完成的事情。

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

我按照你的例子和我的(在各个方面都未修改)IE9不会打印使用Word 2010插入的分页符,并且生成的HTML文档与初始HTML文档几乎没有任何相似之处,特别是DIV已经消失,所以假设文档在Word发表言论之后,仍然会打印出相同的内容。

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

  • 根据Word用它做什么,用你的方式编写HTML似乎毫无意义
  • 即使是最近的IE也无法处理使用Word插入分页符的简单示例
  • 保存Word时创建了一个语言设置特定目录和三个新文件,这些文件为任何产品产生了一系列荒谬的必要测试
  • 许多用户知识(产生目录,如何正确保存,如何正确复制整个文档)似乎需要使这项工作即使在静态Microsoft生态系统中也是如此
  • 看来用户定义的设置很容易破坏使用HTML的任何解决方案

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

答案 4 :(得分:0)

可能对处理此类问题的某些人有用的另外一项补充:更改仅适用于块元素。在我们的旧测试中,有人用'span'编码了一个块。我多次测试,无法使Vreality的解决方案起作用。然后我想也许是因为span不是块元素,所以默认情况下将'display:block'添加到不是块元素的元素。

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