解决某些Typora主题导出PDF分页拦腰截断文字或图片等问题的方法

typora是一个轻量级的所见几乎即所得的Markdown书写浏览工具。css主题可定制性强,但定制的很多主题总有各种问题。如果碰到下面问题。

大模型的方法都是修修补补,按下葫芦浮起瓢

真正核心的方案其实是换一个成熟主题,分页控制我觉得比较好的是github.css主题;而喜欢其它风格,可以让大模型来一个不同主题的杂交

Typora添加CSS解决PDF分页问题详细教程

第一步:打开主题文件夹

  1. 启动Typora软件
  2. 打开偏好设置
    • Windows/Linux:点击顶部菜单栏的 文件偏好设置
    • Mac:点击顶部菜单栏的 Typora偏好设置
  3. 找到主题文件夹
    • 在偏好设置窗口中,点击左侧的 外观 选项
    • 点击右侧的 打开主题文件夹 按钮
    • 此时会打开一个文件资源管理器(Windows)或Finder(Mac)窗口,显示Typora的主题文件夹

第二步:创建自定义主题

  1. 复制现有主题

    • 在打开的主题文件夹中,找到你喜欢的主题文件(通常以 .css 结尾)
    • 右键点击该文件,选择 复制
    • 粘贴一个副本,并重命名为 custom-pdf.css(名称可以自定义,但建议使用英文)
  2. 编辑CSS文件

    • 右键点击你刚创建的 custom-pdf.css 文件
    • 选择 打开方式 → 用文本编辑器打开(推荐使用VS Code、Notepad++或系统自带的记事本/文本编辑)

第三步:添加分页控制CSS代码

  1. 在文件末尾添加以下CSS代码
css 复制代码
/* PDF导出分页控制 */
@media print {
    /* 防止段落、标题、表格等在中间被分页 */
    p, h1, h2, h3, h4, h5, h6, ul, ol, table, pre, blockquote, figure {
        page-break-inside: avoid;
        break-inside: avoid;
    }
    
    /* 为标题设置分页前空间 */
    h1, h2, h3 {
        page-break-after: avoid;
        page-break-before: auto;
    }
    
    /* 为代码块添加特殊处理 */
    pre {
        page-break-inside: avoid;
        break-inside: avoid;
        white-space: pre-wrap;
    }
    
    /* 为图片添加保护 */
    img {
        page-break-inside: avoid;
        break-inside: avoid;
    }
    
    /* 设置页面边距 */
    @page {
        margin: 1.5cm;
    }
    
    /* 为表格行添加保护 */
    tr {
        page-break-inside: avoid;
        break-inside: avoid;
    }
    
    /* 为列表项添加保护 */
    li {
        page-break-inside: avoid;
        break-inside: avoid;
    }
}

/* 在屏幕显示时也应用部分规则 */
p, h1, h2, h3, h4, h5, h6, ul, ol, table, pre, blockquote {
    orphans: 3;    /* 段落末尾至少保留3行 */
    widows: 3;     /* 段落开头至少保留3行 */
}
  1. 保存文件
    • Ctrl + S(Windows)或 Cmd + S(Mac)保存文件
    • 关闭文本编辑器

第四步:应用自定义主题

  1. 重启Typora

    • 完全关闭Typora应用程序
    • 重新启动Typora
  2. 选择自定义主题

    • 点击顶部菜单栏的 主题 选项
    • 在下拉菜单中找到并选择你创建的 custom-pdf 主题
    • 如果没有看到,可以尝试重启Typora

第五步:设置PDF导出

  1. 配置导出设置

    • 点击 文件偏好设置
    • 选择 导出 选项卡
    • PDF 部分,确保 使用当前主题 选项被选中
  2. 测试PDF导出

    • 打开一个包含多页内容的Markdown文档
    • 点击 文件导出PDF
    • 选择保存位置,点击 保存
    • 检查生成的PDF文件,确认分页是否正常

备用方案:创建专门的PDF导出CSS

如果上述方法不完全解决问题,可以创建专门用于PDF导出的CSS:

  1. 在主题文件夹中创建新文件pdf-export.css
  2. 添加以下内容
css 复制代码
/* 专门用于PDF导出的样式 */
@media print {
    body {
        font-size: 12pt;
        line-height: 1.5;
    }
    
    /* 强制分页控制 */
    .page-break {
        page-break-after: always;
        break-after: always;
    }
    
    /* 重要内容保护 */
    .no-break {
        page-break-inside: avoid;
        break-inside: avoid;
    }
}
  1. 在Markdown文档中手动添加分页标记
markdown 复制代码
<!-- 在需要分页的地方添加 -->
<div class="page-break"></div>

<!-- 包裹重要内容防止分页 -->
<div class="no-break">
这是一个不会被分页打断的重要段落...
</div>

常见问题解决

  • 如果主题不显示:重启Typora,或者检查文件名是否包含中文或特殊字符
  • 如果CSS不生效:检查CSS语法是否正确,特别是括号和分号是否匹配
  • 如果PDF仍然分页异常 :尝试调整 orphanswidows 的值,或者增加页面边距

这个方案已经帮助很多用户解决了Typora导出PDF时的分页问题。如果仍有问题,可以考虑在Typora官方GitHub仓库提交issue反馈这个bug。

css 复制代码
/* PDF导出分页控制 */
@media print {
    /* 防止段落、标题、表格等在中间被分页 */
    p, h1, h2, h3, h4, h5, h6, ul, ol, table, pre, blockquote, figure {
        page-break-inside: avoid;
        break-inside: avoid;
    }
    
    /* 为标题设置分页前空间 */
    h1, h2, h3 {
        page-break-after: avoid;
        page-break-before: auto;
    }
    
    /* 为代码块添加特殊处理 */
    pre {
        page-break-inside: avoid;
        break-inside: avoid;
        white-space: pre-wrap;
    }
    
    /* 为图片添加保护 */
    img {
        page-break-inside: avoid;
        break-inside: avoid;
    }
    
    /* 设置页面边距 */
    @page {
        margin: 1.5cm;
    }
    
    /* 为表格行添加保护 */
    tr {
        page-break-inside: avoid;
        break-inside: avoid;
    }
    
    /* 为列表项添加保护 */
    li {
        page-break-inside: avoid;
        break-inside: avoid;
    }
}

/* 在屏幕显示时也应用部分规则 */
p, h1, h2, h3, h4, h5, h6, ul, ol, table, pre, blockquote {
    orphans: 3;    /* 段落末尾至少保留3行 */
    widows: 3;     /* 段落开头至少保留3行 */
}
相关推荐
Java面试题总结1 天前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
傻啦嘿哟1 天前
Python操作PDF页面详解:删除指定页的完整方案
开发语言·python·pdf
m5655bj2 天前
使用 C# 修改 PDF 页面尺寸
java·pdf·c#
geovindu2 天前
python: 简单提取PDF文档内文字
开发语言·python·pdf
m0_694845572 天前
HandBrake 是什么?视频转码工具使用与服务器部署教程
服务器·前端·pdf·开源·github·音视频
yivifu3 天前
使用PyMuPdf删除PDF文档中的水印
pdf·pymupdf·去水印
ComPDFKit3 天前
ComPDF的产品升级:从工具包到PDF服务
pdf
占疏3 天前
pdf文件解析
pdf
开开心心_Every3 天前
音频视频转文字工具,离线语音识别免费
人工智能·游戏·微信·pdf·excel·语音识别·memcache
开开心心_Every3 天前
电脑网速加速工具,无线有线叠加网络
网络·游戏·微信·pdf·电脑·excel·语音识别