页面布局:分页与法律文书编号
两个面向文档类工作的插件——合同、规格说明、报告、制度文件。一个是实时的分页页面视图,显示真实的分页边界、页眉、页脚和页码;另一个是用于条款编号文档的多级法律文书编号(1、1.1、1.1.1)。两者都包含在标准授权中。关于连续的 DOM 如何投射到真实的纸张尺寸上,请参阅浏览器编辑器中的分页页面视图如何工作;编号部分请参阅用 CSS 计数器实现法律文书编号。
分页页面视图
页面视图把可编辑区域渲染为与真实页宽一致的纸张栏,并为每一页绘制分页边界、页码以及可选的页眉/页脚——也就是文字处理软件提供的打印布局视图。它纯粹是显示层面的:它绘制的任何内容都不会写入您的内容中,无论页面视图开启与否,保存的 HTML 都逐字节相同。
在编辑器之后加载该插件,然后通过您自己的界面切换它:
<script src="richtexteditor/rte.js"></script>
<script src="richtexteditor/plugins/pagination.js"></script>
<script>
var editor = new RichTextEditor("#editor");
editor.setPageView(true); // turn page view on
editor.togglePageView(); // flip it
editor.isPageView(); // -> true | false
editor.getPageCount(); // -> number of pages
editor.getPageGeometry(); // -> { pageWidth, pageHeight, margins..., contentHeight }
</script>分页发生在块边界上,因此段落、表格行或图片永远不会被从中间截断。强制分页——即 insertpagebreak 工具栏命令插入的内容——总是从新的一页开始,与导出时完全一致。
页面设置
如果您的应用提供了文档自身的页面设置,页面尺寸就取自其中,因此屏幕上看到的内容与 PDF 和 Word 导出的结果一致。也可以在运行时设置:
editor.setPageSetup({
format: "Letter", // A4 | Letter | Legal | A3 | A5 | Tabloid
orientation: "portrait", // portrait | landscape
margins: { top: 1, right: 1, bottom: 1, left: 1 } // inches, or "25mm" / "2cm" / "72pt" / "96px"
});| 配置项 | 默认值 | 用途 |
|---|---|---|
paginationEnabled | false | 启动时开启页面视图。 |
pageFormat | "A4" | 文档没有页面设置时使用的纸张大小。 |
pageOrientation | "portrait" | 纵向或横向。 |
pageMargins | 1in all round | 页边距,以英寸或任意 CSS 长度表示。 |
paginationShowPageNumbers | true | 绘制每页的页码标记。 |
paginationShowPageCount | true | 显示 Page 3 of 12 还是 Page 3。 |
页眉和页脚
页眉和页脚 HTML 会在每一页上重复,并支持 {page} 和 {total} 占位符:
editor.setPageSetup({
headerHtml: "Master Services Agreement — Acme Corp",
footerHtml: "Page {page} of {total} · Confidential"
});多级/法律文书列表编号
法律文书编号把嵌套的有序列表变成层级式的条款编号——1、1.1、1.1.1——这正是合同、规格说明和制度文件所采用的格式。
<script src="richtexteditor/plugins/multilevellist.js"></script>
<script>
// Acts on the ordered list containing the caret.
editor.setLegalNumbering(true);
editor.toggleLegalNumbering();
editor.isLegalNumbering(); // -> true | false
// The stylesheet, so your public page / print template can match the editor.
editor.getLegalListCss();
</script>编号由 CSS 计数器生成,而不是把数字写进文本。您的标记仍然是干净的语义化 <ol> / <li>——只在根列表上保存一个类名——因此插入、删除或重新排序条款时,编号永远不会错乱。由于它是真正的 CSS,浏览器的打印管道会渲染它,这意味着 PDF 导出和打印预览都能还原编号。
<ol class="rte-legal-list">
<li>Definitions <!-- 1. -->
<ol>
<li>Agreement <!-- 1.1. -->
<li>Parties <!-- 1.2. -->
<ol><li>Discloser <!-- 1.2.1. -->
<li>Recipient <!-- 1.2.2. -->
</ol>
</ol>
<li>Obligations <!-- 2. -->
</ol>分隔符和后缀可以通过 legalListSeparator 和 legalListSuffix 配置——例如 "1-1-1" 或 "1.1)"——类名本身则通过 legalListClass 配置。