首页 > 其他分享 >Typora导出的PDF目录标题自动加编号

Typora导出的PDF目录标题自动加编号

时间:2023-10-27 14:35:22浏览次数:31  
标签:__ title bookmark Typora 导出 reader tab pdf PDF

Typora导出的PDF目录标题自动加编号

在Typora主题文件夹增加如下文件后,标题便自动加上了编号:

https://gitcode.net/as604049322/blog_data/-/blob/master/base.user.css

例如:

Typora导出的PDF目录标题自动加编号_Python

但是导出的PDF中,目录却没有编号:

这是我使用Python处理该文件,使其具有编号,完整代码如下:


__author__ = '小小明-代码实体'
__date__ = '2023/8/31'

from PyPDF2 import PdfReader, PdfWriter


def get_pdf_Bookmark(filename):
    if isinstance(filename, str):
        pdf_reader = PdfReader(filename)
    else:
        pdf_reader = filename
    pagecount = len(pdf_reader.pages)
    # 用保存每个标题id所对应的页码
    idnum2pagenum = {}
    for i in range(pagecount):
        page = pdf_reader.pages[i]
        idnum2pagenum[page.indirect_ref.idnum] = i
    # 保存每个标题对应的标签数据,包括层级,标题和页码索引(页码-1)
    bookmark = []

    def get_pdf_Bookmark_inter(outlines, tab=0):
        for outline in outlines:
            if isinstance(outline, list):
                get_pdf_Bookmark_inter(outline, tab + 1)
            else:
                bookmark.append(
                    (tab, outline['/Title'], idnum2pagenum[outline.page.idnum]))

    get_pdf_Bookmark_inter(pdf_reader.outline)
    return bookmark


def pdf_write_bookmark(bookmark, pdf_file, compress=True):
    pdf_reader = PdfReader(pdf_file)
    num_pages = len(pdf_reader.pages)
    pdf_writer = PdfWriter()
    for page in pdf_reader.pages:
        if compress:
            page.compress_content_streams()
        pdf_writer.add_page(page)
    # pdf_reader.
    last_cache = [None] * (max(bookmark, key=lambda x: x[0])[0] + 1)
    for tab, title, pagenum in bookmark:
        if pagenum >= num_pages:
            continue
        parent = last_cache[tab - 1] if tab > 0 else None
        indirect_id = pdf_writer.add_outline_item(title, pagenum, parent=parent)
        last_cache[tab] = indirect_id
    pdf_writer.page_mode = "/UseOutlines"
    with open(pdf_file, "wb") as out:
        pdf_writer.write(out)
    print("已成功将书签写入到", pdf_file)


if __name__ == '__main__':
    file = r"C:\Users\sj\Desktop\集团管理层培训.pdf"
    bookmark = get_pdf_Bookmark(file)
    num_cache = [0] * 7
    last_tab = 0
    new_bookmark = []
    for tab, title, pagenum in bookmark:
        if tab > last_tab:
            num_cache[tab] = 1
        else:
            num_cache[tab] += 1
        new_title = title
        if not title[0].isdigit():
            new_title = ".".join(map(str, num_cache[:tab + 1])) + " " + title
        # print(tab, new_title, pagenum)
        new_bookmark.append((tab, new_title, pagenum))
        last_tab = tab
    pdf_write_bookmark(new_bookmark, file)

处理后的PDF目录就有编号了:

Typora导出的PDF目录标题自动加编号_Python_02

标签:__,title,bookmark,Typora,导出,reader,tab,pdf,PDF
From: https://blog.51cto.com/u_13389043/8056174

相关文章

  • 【专题】2023年中国工业互联网平台行业研究报告PDF合集分享(附原数据表)
    这份报告合集是基于中国工业产业升级和智能制造的大背景而展开的。报告合集分析了工业互联网平台市场的发展阶段、平台玩家的产品和服务的底层逻辑以及变化趋势,并探讨了补贴减少、数据归属权之争、标准化与盈利模式、ChatGPT等因素对工业互联网平台企业的影响。此外,报告合集还展示......
  • PDF库 libharu 简单操作
    libharu官网:http://libharu.org/直接下载下来编译就可以使用了(*:我下载的版本是:libharu-libharu-v2.4.3-0-g8dbcfe4.tar) 一、编译1.解压tar-zxvflibharu-libharu-v2.4.3-0-g8dbcfe4.tar2.在解压出来文件夹中创建一个build文件夹mkdirbuild3.进入build文件夹cdbu......
  • Typora使用教程
    目录markdown的使用说明一、标题这是一级标题这是二级标题二、段落1、换行2、分割线三、文字显示1、字体2、上下标四、列表1、无序列表2、有序列表3、任务列表五、区块显示六、代码显示1、行内代码2、代码块七、链接八、脚注九、图片插入十、表格十一、流程图1、横向流程图2、竖向......
  • 《精通Linux.第2版》PDF高清高质量电子书
    下载:https://pan.quark.cn/s/8c7434ccba69......
  • 《HTML5秘籍.第2版》高清高质量 原版电子书PDF
    下载:https://pan.quark.cn/s/0284694919cc......
  • GUI_DOWNLOAD函数导出EXCEL内容出现了串列
    请教个问题 ,我现在ZPA400这个程序, 用 GUI_DOWNLOAD 下载的EXCEL文件,内容出现了串列,结果如下 导致串列的具体字段为:ZHR018301字段内容为:应安保管控调整要求,员工进入厂区禁止携带智能手机,警卫自行拆除闸机、移位监控、搬运手机柜节省RMB1200元,按奖惩规定5.3.4.25节省费用......
  • Easy Excel 导出存在绿色角标问题[返回字段类型是数字,当时使用String来接收]
     一、背景EasyExcel导出,发现excel存在大量的绿色角标,很影响美观,如果个人使用可以设置wps或office忽略检测警告,但是我是对业主的,所以这一方式对我不适用,只能通过代码的方式解决. 二、实现通过以下创建一个 ExcelWriter,实现去绿色角标的关键是使用easyExc......
  • Stirling-PDF 开源在线PDF处理系统(可解密PDF)
    Stirling-PDF是一个本地托管的Web应用程序,允许您对PDF文件执行各种操作命令行安装#运行容器dockerrun-d\--restartunless-stopped\--namespdf\-p8077:8080\frooodle/s-pdf运行在浏览器中输入http://IP:8077就能看到主界面......
  • 《Erlang程序设计(第2版)》高清高质量PDF电子书+源码
    下载:https://pan.quark.cn/s/81c3d7f6f070......
  • 【专题】2023数字孪生世界白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34041原文出处:拓端数据部落公众号本次报告合集分为数字孪生综述、技术架构建设、核心技术分享、新型技术成果展示以及重点行业应用五大内容版块。从数字孪生应用建设路径的角度出发,着重提出了“数智视融合,虚实人联动”的观点,并提供数字孪生应用技......