我似乎找不到一种一致的方法来创建一个可以跨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不是,依此类推。
答案 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文档。即使是压缩文件,Word文档仍然像HTML一样标记,因此如果您已经可以生成HTML,则可以轻松生成Word。因为几乎每个基于x86或ARM的设备都可以获得Word查看器,这似乎比在简单示例失败的方向上探索更合理。
答案 4 :(得分:0)
可能对处理此类问题的某些人有用的另外一项补充:更改仅适用于块元素。在我们的旧测试中,有人用'span'编码了一个块。我多次测试,无法使Vreality的解决方案起作用。然后我想也许是因为span不是块元素,所以默认情况下将'display:block'添加到不是块元素的元素。
另一件事:我正在使用最新的Chrome(第25版),“page-break-inside:avoid;”似乎不再需要修复。