分页后重新显示当前标题

2024-06-11

我正在使用 Wea​​syPrint 创建文档。 我有一些带有名称的部分,其中一些可能跨越多个页面。 当节太长时,就会出现分页符。我想做的是重新显示当前部分的名称,最好使用相同的格式。

以下 MWE 显示了分页符后如何不显示节标题:

<html>
    <body>
        <h1>First section</h1>
        <p>Lorem ipsum...</p>
        <p>Lorem ipsum...</p>
        <p>Lorem ipsum...</p>
        <p>Lorem ipsum...</p>

        <p style="break-after: always;"></p>

        <p>Lorem ipsum...</p>
    </body>
</html>

输出weasyprint example.html example.pdf:

I want First section显示为<h1>标签,位于左侧页面的顶部。

我想做这个 tex.stackexchange https://tex.stackexchange.com/questions/47646/re-displaying-section-headings-after-page-breaks据我了解,post 基本上包括检查当前页码是否超过当前总页数,如果超过,则插入遇到的最后一个部分标题。

我不知道在 HTML 中这样做的可能性,它存在吗? 有什么解决方法可以做到这一点吗?如果没有,是否可以让 WeasyPrint 在某些设备上执行自定义 Python 代码?page-break hook?


虽然目前不可能,但您仍然可以使用很棒的解决方法。

打印时,每页上仅自动复制三种元素:

  • 具有固定位置的元素
  • 标头,声明为@左上方 https://www.w3.org/TR/css-page-3/#margin-boxes, @顶部中心 https://www.w3.org/TR/css-page-3/#margin-boxes, @右上 https://www.w3.org/TR/css-page-3/#margin-boxes etc.
  • 页脚,声明为@左下方 https://www.w3.org/TR/css-page-3/#margin-boxes etc.

我们必须使用其中之一来构建纯 CSS 解决方案:我们将选择标头。 所以,问题的第一部分是:如何为每个页面设置不同的标题?或者,换句话说,如何设置章节标题?

实现这个目标非常简单:一旦决定哪个标签或类应该包含章节标题,设置一个新的CSS 字符串 https://www.w3.org/TR/css-gcpm-3/#setting-named-strings-the-string-set-pro for it:

h1 {
  string-set: doctitle content();
}

然后在标题中显示该字符串:

@page {
  size: A4;
  margin: 1.6cm .6cm 1.2cm .6cm;

  @top-center {
    content: string(doctitle);
  }
}

现在你会得到这样的东西:

让我向您添加一些代码:

<html>
    <body>
        <h1>First section</h1>
        <p>Lorem ipsum...</p>
        <p>Lorem ipsum...</p>
        <p>Lorem ipsum...</p>
        <p>Lorem ipsum...</p>

        <p style="break-after: always;"></p>

        <p>Lorem ipsum...</p>

        <h1>Second section</h1>
        <p>Lorem ipsum 2...</p>
        <p>Lorem ipsum 2...</p>
        <p>Lorem ipsum 2...</p>
        <p>Lorem ipsum 2...</p>

        <p style="break-after: always;"></p>

        <p>Lorem ipsum 2...</p>
    </body>
</html>

在这种情况下,您的标头将是:

  • 第一页:“第一部分”
  • 第二页:“第一部分”...然后将在同一页中开始第二部分,并带有他自己的标题
  • 第三页:“第二部分”

下一步:为标题和章节标题设置相同的样式,因此标题可以与标题具有相同的外观:

h1 {
  string-set: doctitle content();
  font-family: 'Liberation Serif';
  font-size: 28pt;
  line-height: 1.2em;
}

@page {
  size: A4;
  margin: 1.6cm .6cm 1.2cm .6cm;

  @top-left {
    content: string(doctitle);
    font-family: 'Liberation Serif';
    font-size: 28pt;
    line-height: 1.2em;
  }
}

然后你会得到这样的东西:

现在,我们需要修复最新的问题:首页的标题看起来重复,因为标题和标题都存在。

修复它非常简单:

body h1:first-of-type {
  position: absolute;
  left: -30cm;
}

我已将第一个标题放置在打印区域之外。不幸的是设置为display: none会导致连标题都不会显示。您还有其他选择,例如visibility: hidden or font-size: 0 or color: transparent,但这三个选项总是会在标题和第一段之间留一些空白。

现在可能是时候增加标题的高度了,将顶部填充添加到@top-left; 结果应该是这样的:

这种技术并不是 100% 安全:如果不是第一章的章节碰巧在新页面中开始,则标题和标题都会显示,一个靠近另一个。无论如何,这种情况并不常见。

进一步的改进可以考虑采用不同的分页方法。

<html>
    <body>
        <section class="chapter">
            <h1>First section</h1>
            <p>Lorem ipsum...</p>
            <p>Lorem ipsum...</p>
            <p>Lorem ipsum...</p>
            <p>Lorem ipsum...</p>
            <p>Lorem ipsum...</p>

            <h1>Second section</h1>
            <p>Lorem ipsum 2...</p>
            <p>Lorem ipsum 2...</p>
            <p>Lorem ipsum 2...</p>
        </section>
        <section class="chapter">
            <h1>Third section</h1>
            <p>Lorem ipsum 3...</p>
            <p>Lorem ipsum 3...</p>
            <p>Lorem ipsum 3...</p>
            <p>Lorem ipsum 3...</p>
        </section>
    </body>
</html>

设置章节分页符的样式,并管理任何章节第一个子项的标题隐藏:

section.chapter {
    break-after: always;
}
section.chapter h1:first-of-type {
    position: absolute;
    left: -30cm;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分页后重新显示当前标题 的相关文章

  • OpenCV - 我需要将彩色图像插入黑白图像并且

    我用以下代码将黑白图像插入彩色图像 没问题 face grey cv cvtColor face cv COLOR RGB2GRAY for row in range 0 face grey shape 0 for column in ra
  • 了解 asyncio 已经运行的永久循环和挂起的任务

    我在理解如何将新任务挂起到已经运行的事件循环中时遇到问题 这段代码 import asyncio import logging asyncio coroutine def blocking cmd while True logging in
  • python 脚本中 os.system 的 256 和 512 响应代码是什么

    当我在 python 中使用 os system ping 服务器时 我得到多个响应代码 使用的命令 os system ping q c 30 s SERVERANME 0 在线 256 离线 512 512 是什么意思 Per the
  • LESS CSS 在媒体查询中设置变量?

    我正在开发一个专门针对 iPad 的网站 为了使我的网站能够在视网膜显示屏 iPad 和旧版本 iPad 上运行 我想在媒体查询中的 LESS CSS 中设置一个变量 例如 media all and max width 768px rat
  • 如何删除 pandas 数据框中的唯一行?

    我遇到了一个看似简单的问题 在 pandas 数据框中删除唯一的行 基本上 相反drop duplicates https pandas pydata org pandas docs stable generated pandas Data
  • 检查多个 pd.DataFrame 是否相等

    是否有一种 Pythonic 方式 无循环或递归 来检查是否超过两个pd DataFrames 例如 pd DataFrames 列表 彼此相等吗 就像是 all x equals dfs 0 for x in dfs with dfs数据
  • 如何测试列表中多个值的成员资格

    我想测试两个或多个值是否在列表中具有成员资格 但我得到了意外的结果 gt gt gt a b in b a foo bar a True 那么 Python 可以同时测试列表中多个值的成员资格吗 这个结果意味着什么 See also How
  • 如何在 Sublime 2 REPL Mac 中运行 Python 3

    我的问题如下 我安装了 sublime 2 和 sublime repl 插件 一切正常 我唯一需要的是更改在控制台内置的 sublimerepl 上运行的 python 版本 我的意思是 我有 python 2 7 5 预先安装了 mav
  • 如何修改 contenteditable 元素的innerHTML

    我使用 Selenium 与 Chrome driver 和 python3 6 来测试网站 我在网页中有代码片段如下 div class 3F6QL 2WovP div class 39LWd Type a message div div
  • Python:帮助(numpy)在退出时导致段错误

    我遇到了一个奇怪的现象 在 python 解释器中 我执行以下操作 gt gt gt import numpy gt gt gt help numpy 帮助显示正确 但一旦我按 q 返回解释器 Segmentation fault core
  • 使用 statsmodels.formula.api 中的 ols - 如何删除常数项?

    我正在遵循第一个例子statsmodels教程 http statsmodels sourceforge net devel http statsmodels sourceforge net devel 如何指定在 ols 中不使用常数项进
  • 如何限制scrapy请求对象?

    所以我有一个蜘蛛 我认为它正在泄漏内存 结果当我检查 telnet 控制台 gt gt gt prefs 时 它只是从链接丰富的页面中抓取了太多链接 有时它会超过 100 000 个 现在我已经一遍又一遍地浏览文档和谷歌 但我找不到一种方法
  • Bootstrap下拉菜单文本颜色

    所以我第一次使用 Twitter 的 Bootstrap 我试图在下拉菜单折叠后更改其文本的颜色 如果有道理的话 I used 当您压缩网页以显示折叠菜单并转到下拉列表时 您会看到蓝色背景转移到下拉菜单项 但字体颜色为黑色 使其很难阅读 我
  • Flask 扩展未在 app.extensions 中注册

    我想访问在我的 Flask 应用程序上注册的一些扩展 我尝试使用app extensions 但我初始化的一些扩展不在字典中 from flask import current app current app extensions get
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • 在至少 7 天内连续三天登录该产品的用户

    我有一个用于用户参与的数据框 df 如下所示 time stamp user id 2013 01 01 10 05 23 1 2013 01 03 16 35 23 1 2013 01 06 11 06 35 1 2013 01 10 1
  • HTML标题属性样式[重复]

    这个问题在这里已经有答案了 如何在不使用 javascript 或 CSS 的情况下更改以下标记中标题属性的样式 因为我将 HTML 插入到原本无法编辑的文档中的特定位置 span title This is information Thi
  • 通过 ManyToManyField = Value 对 django 查询集进行排序

    如果有一些模型 例如 class Tag models Model name models CharField class Thing models Model title models CharField tags models Many
  • CSS3 背景渐变未验证,有人可以告诉我为什么吗?里面的代码示例

    有人能告诉我为什么下面的 css 没有验证吗 我一直在尝试自己研究这个问题 但没有运气 我读过的所有文档都说这是在 css3 中进行渐变的正确原因 header color white font size 12px font family
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • 事件处理程序中的“对 SetCurrentCellAddressCore 的可重入调用” - 仅当单元格行索引和列索引相等时

    我正在制作一个 WinForms 应用程序 其中包含一个使用DataGridView处理简单的数据操作 确保准确输入 同时减少混乱 阅读 不使用DataGridViewComboBoxColumn 我有几个事件处理程序可以暂时将DataGr
  • 无法在 Gradle 中创建 Zip 存档

    我正在尝试创建一个简单的 Zip 存档 其中包含资源目录中的所有 javascript 文件 这是代码 task zip type Zip from resources include js into resources 由于某种原因 这似
  • 如何从laravel 5.1中的公共文件夹中删除文件

    我想从数据库中删除新闻 当我点击删除按钮时 数据库中的所有数据都会被删除 但图像仍保留在上传文件夹中 那么 我该如何工作呢 谢谢 这又是我的功能 但不会从公共目录的 images news 文件夹中删除图像 gt public functi
  • JQuery 在提交之前需要复选框和单选按钮

    我很难弄清楚这一点 现在我们已经花了 3 个多小时来研究 JQuery 验证的示例和工具 我想做的只是要求选中一个复选框和一个单选按钮 但我不在乎需要哪一个
  • 在 CentOS 6.4 上将 git 升级到最新版本时遇到问题

    我有带有 git 1 7 1 的 Centos 虚拟机 我想升级到最新版本的git 但是 当我尝试使用 yum 进行升级时 它表示无需执行任何操作 并且不会升级版本 以下是 yum 命令的输出 yum install git Loaded
  • PHPStorm - 如何设置实时编辑[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我刚刚安装 PHPStorm 但在实
  • 第二个内联块 div 上方的空白

    我确信我在这里忽略了一些东西 但无法解决 我的第二个内联块 div 上方有空白 只有当右侧 div 中的 文本此处 长度小于左侧 div 时 才会发生这种情况 js小提琴 http jsfiddle net B2S4r 2 http jsf
  • 内存栅栏:获取/加载和释放/存储

    我的理解std memory order acquire and std memory order release如下 Acquire意味着没有出现内存访问after获取栅栏可以重新排序到栅栏之前 Release意味着没有出现内存访问bef
  • 全局常量是反模式吗?

    我一直认为仅仅为了保持常量而创建一个类是一个糟糕的设计 但最近 我尝试用谷歌搜索它 发现只有一个界面作为常量是不好的反模式 没有提到使用一类常量 我认为 由于常量类实际上与全局变量没有太大区别 这就是我反对它并倾向于重构此类类的原因 它创建
  • 无法在 Crashlytics/fabric 中获取崩溃报告。显示错误:“看起来我们缺少 dSYM 来处理以下版本的崩溃。”

    我的 iOS 应用程序的 Fabric crashlytics 中未生成崩溃报告 Fabric 仪表板上显示错误 如屏幕截图所示 按照fabric的指示 我尝试从安装fabric mac应用程序的机器 我创建应用程序的版本 中搜索聚光灯下给
  • 努力理解 Python 需要虚拟环境的原因

    我来自 JavaScript 所以熟悉 NPM 在那里 您可以全局安装包 通过使用 g 标志 或在项目中本地安装包 在 Python 中 他们有这些虚拟环境 我仍然有点不确定为什么需要它们 我知道这是为了在一台机器上拥有不同版本的相同包 是
  • 如何在 PHP 中获取用户代理

    我使用这个 JS 代码来了解用户使用的浏览器 我想将此 navigator appName 获取到 php 代码以像这样使用它 if appName Internet Explorer blabla 我该怎么做 使用原生 PHP SERVE
  • 如何从 TCA 中的“showitems”中删除字段?

    TYPO3有这个功能TYPO3 CMS Core Utility ExtensionManagementUtility addToAllTCAtypes 向记录的 BE 形式添加或替换一个或多个字段 我们如何删除字段 替换为 不起作用 解释
  • 根据维基百科,为什么“call super”被视为反模式? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • 在一个查询中加载关联实体

    我有以下有效的代码 但我相信它执行多次查找只是为了获取与我的自定义 项目 实体关联的 帐户 实体 是否可以指定您想要填充哪些关联实体 而不必循环遍历初始结果集 public IList
  • PHP ArrayAccess 设置多维

    EDIT 我意识到文本量可能令人生畏 这个问题的本质是 如何以可以设置多维值的方式实现 ArrayAccess 我知道这个问题已经被讨论过here https stackoverflow com questions 2881431 arra
  • Protobuf-net 对字节数组进行序列化/反序列化

    我在 GC 敏感的环境中工作 并且对从预分配的字节数组而不是内存流序列化 反序列化 protobuf 感兴趣 protobuf net 库可以实现这一点吗 您可以初始化一个MemoryStream使用预先分配的缓冲区 请参阅this htt
  • 如何链接两个 Kotlin 函数参数的泛型类型?

    我想写一些类似的东西 fun
  • 分页后重新显示当前标题

    我正在使用 Wea syPrint 创建文档 我有一些带有名称的部分 其中一些可能跨越多个页面 当节太长时 就会出现分页符 我想做的是重新显示当前部分的名称 最好使用相同的格式 以下 MWE 显示了分页符后如何不显示节标题 h1 First