python:PyPDF2 从PDF文件中提取目录
我发现 pypdf 和 pypdf2 的作者是同一人:Mathieu Fenniak
pip install pypdf2 ;
pypdf2-3.0.1-py3-none-any.whl (232 kB)
编写 pdf_read_dir.py 如下
# -*- coding: utf-8 -*-
""" pypdf2==3.0.1 从PDF中提取目录 """
import os
import sys
from PyPDF2 import PdfReader#每个书签的索引格式
#{'/Title': '书签名', '/Page': '指向的目标页数', '/Type': '类型'}# 查找指定的字符出现次数
def find_char(str1, char):cs = 0for c in str1:if c == char:cs += 1return csdirectory_str = ''
def bookmark_listhandler(list):global directory_strfor message in list:if isinstance(message, dict):title = message['/Title'].strip()if title.startswith("Chapter"): directory_str += '\n' + title + '\n'elif title[0:2] in ("序章","前言") or title.startswith("序"):directory_str += '\n' + title + '\n'elif title.startswith("第") and title.split()[0][-1] =="章":directory_str += '\n' + title + '\n'elif title.startswith("第") and title.split()[0][-1] =="节":directory_str += ' ' + title + '\n'elif title.startswith("第"):directory_str += '\n' + title + '\n'elif title[0] in ('一','二','三','四','五','六','七','八','九','十'):directory_str += ' ' + title + '\n'elif title[0] in "1234567890":cs = find_char(title, '.')directory_str += ' '*cs + title + '\n'else:directory_str += ' ' + title + '\n'else:bookmark_listhandler(message)# main()
if len(sys.argv) ==2:file1 = sys.argv[1]
else:print('usage: python pdf_read_dir.py file.pdf')sys.exit(1)if not os.path.exists(file1):print(f"{file1} is not exists.")sys.exit(2) fn,ext = os.path.splitext(file1)
if ext.lower() != '.pdf':print("Please specify a valid pdf file")sys.exit(3)with open(file1, 'rb') as f1:pdf = PdfReader(f1)# 检索文档中存在的文本大纲,返回的对象是一个嵌套的列表bookmark_listhandler(pdf.outline)if len(directory_str) >0:fname = fn.split('\\')[-1]file2 = fn + '.txt'with open(file2, 'w', encoding='utf-8') as fp:fp.write(fname +'\n')fp.write(directory_str)
else:print("it no directory.")
运行 python pdf_read_dir.py your_ebook.pdf
生成 your_ebook.txt
由于算法优劣原因,生成的结果正确性始终比不过 java : pdfbox 读取 PDF文件内书签
相关文章:
python:PyPDF2 从PDF文件中提取目录
我发现 pypdf 和 pypdf2 的作者是同一人:Mathieu Fenniak pip install pypdf2 ; pypdf2-3.0.1-py3-none-any.whl (232 kB) 编写 pdf_read_dir.py 如下 # -*- coding: utf-8 -*- """ pypdf23.0.1 从PDF中提取目录 """ import os…...
Java 2:运算符、表达式和语句
2.1 运算符与表达式 Java提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。Java语言中的绝大多数运算符和C语言相同,基本语句如条件分支语句,循环语句等,也和C语言类似。 2.1.1算术运算符与算术表达式 1…...
批量提取word文件中文本框内容的三种方法
一、问题的提出 在日常的办公中,有时需要提取多个word文件中的文字框的内容。有时,文字框的数量比较多,而且处于文档的不同位置,手工提取比较耗时耗力,同时也可能会产生遗漏。 我们也可以通过VBA和Python来解决这个问…...
Leecode之合并两个有序链表
一.题目及剖析 https://leetcode.cn/problems/merge-two-sorted-lists/description/ 二.思路引入 用指针遍历两个链表并实时比较,较小的元素进行尾插,然后较小元素的指针接着向后遍历 三.代码引入 /*** Definition for singly-linked list.* struct ListNode {* int va…...
陶建国教授谈中西方文化的差异与交融
龙年到来,这个春节里,“龙”字的英文翻译引发关注,冲上了热搜,网友发现,“龙”不再翻译为“dragon”,而是龙字的谐音“loong”。原来,在西方人的眼里,龙是凶猛的怪兽,具有…...
Ps:画笔选项
画笔选项 Brush Options提供了对画笔(圆形笔刷)基本属性的控制,比如大小、硬度、间距、角度和圆度等。 Photoshop 中的快速选择工具、污点修复画笔工具、修复画笔工具、颜色替换工具、背景橡皮擦工具等的工具选项栏上提供了这种圆形笔刷选项。…...
嵌入式——Flash(W25Q64)
目录 一、初识W25Q64 1. 基本认识 2. 引脚介绍 编辑 二、W25Q64特性 1. SPI模式 2. 双输出SPI方式 三、状态寄存器 1. BUSY位 2. WEL位 3. BP2、BP1、 BP0位 4. TB位 5. 保留位 6. SRP位 四、常用操作指令 1. 写使能指令(06h) 2. 写禁…...
stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)
我是实现了输出pwm波,频率固定,占空比可以不断调整的方法,将PA0接到示波器上,可以看到是一个标准的PWM波,如图下面示波器图。 1,首先是ioc的配置 我刚开始设置的分频的倍数是7199,使得分频的太大了,示波器显示不了,最后修改为71就可以,我之前设置读取pwm也是一样的…...
phpstrom创建thinkphp项目
安装php和composer 参考 安装phpstrom 创建项目 查看thinkphp版本 https://packagist.org/packages/topthink/think 打开所在项目编辑配置 即可调试运行...
【Linux】线程同步
线程同步 一、条件变量1. 同步概念2. 条件变量概念3. 条件变量接口(1)pthread_cond_init()(2)pthread_cond_destroy()(3)pthread_cond_wait()(4)pthread_cond_signal()(5…...
如何在多头自注意力机制的交叉学习中引入对于物理、生理、心理世界客观规律的对照验证...
要在多头自注意力机制的交叉学习中引入对于物理世界客观规律的对照验证,可以考虑以下方法: 1、引入物理模型 首先,建立一个物理模型,该模型能够描述物理世界中的客观规律。这个模型可以是已知的科学理论,也可以是通过实…...
智慧公厕:让智慧城市的公共厕所焕发“智慧活力”
智慧城市的建设已经进入了一个新的阶段,不仅仅是智慧交通、智慧环保,如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢,正在通过信息化、数字化和智慧化的方式,实现全方位的精细化管理。本文以智慧公厕源头专…...
vue导出word文档(图文示例)
第076个 查看专栏目录: VUE 本文章目录 示例说明示例效果图导出的文件效果截图示例源代码参数说明:重要提示:API 参考网址 示例说明 在Vue中导出Word文档,可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库: npm …...
【C Primer Plus第六版 学习笔记】 第十七章 高级数据表示
有基础,进阶用,个人查漏补缺 链表:假设要编写一个程序,让用户输入一年内看过的所有电影,要储存每部影片的片名和评级。 #include <stdio.h> #include <stdlib.h> /* 提供malloc()的原型 */ #include <s…...
租用一个服务器需要多少钱?2024阿里云新版报价
2024年最新阿里云服务器租用费用优惠价格表,轻量2核2G3M带宽轻量服务器一年61元,折合5元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年,2核4G4M轻量服务器165元一年,2核4G服务器30元3…...
python-产品篇-游戏-成语填填乐
文章目录 准备代码效果 准备 无需其他文件,复制即用 代码 import random list["春暖花开","十字路口","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往",&…...
数据库数据加密的 4 种常见思路的对比
应用层加解密方案数据库前置处理方案磁盘存取环节:透明数据加密DB 后置处理 最近由于工作需要,我对欧洲的通用数据保护条例做了调研和学习,其中有非常重要的一点,也是常识性的一条,就是需要对用户的个人隐私数据做好加…...
HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-PWM
目录 一、PWM 概述二、PWM 模块相关API三、接口调用实例四、PWM HDF驱动开发4.1、开发步骤(待续...) 坚持就有收获 一、PWM 概述 PWM(Pulse Width Modulation)又叫脉冲宽度调制,它是通过对一系列脉冲的宽度进行调制,等效出所需要…...
001kafka源码项目gradle报错UnsupportedClassVersionError-kafka-报错-大数据学习
1 报错提示 java.lang.UnsupportedClassVersionError: org/eclipse/jgit/lib/AnyObjectId has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 如…...
单片机学习笔记---直流电机驱动(PWM)
直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器…...
MySQL存储图片旋转元数据的最佳实践
MySQL存储图片旋转元数据的最佳实践 1. 引言 在日常应用中,我们经常遇到这样的场景:用户上传的图片在显示时方向不正确,需要根据EXIF信息中的旋转角度进行自动校正。比如手机拍摄的照片,由于设备方向不同,可能包含90…...
告别手动上传!RAGFlow 0.22.0 数据源同步实战:以S3和Notion为例的保姆级配置
告别手动上传!RAGFlow 0.22.0 数据源同步实战:以S3和Notion为例的保姆级配置 如果你还在为知识库维护中频繁的手动上传文件而烦恼,RAGFlow 0.22.0版本的数据源功能将成为你的效率救星。这个功能彻底改变了传统文件管理方式,让数据…...
SmolVLA效果展示:三视角图像对齐误差对最终动作精度影响分析
SmolVLA效果展示:三视角图像对齐误差对最终动作精度影响分析 1. 项目概述 SmolVLA是一个专门为经济实惠的机器人技术设计的紧凑高效视觉-语言-动作模型。这个模型最大的特点是能够在有限的硬件资源下实现高质量的机器人控制,让更多开发者和研究者能够接…...
霞鹜文楷GB:为什么选择这款免费开源的中文国标字体?
霞鹜文楷GB:为什么选择这款免费开源的中文国标字体? 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB 霞鹜文楷GB是一款基于日本Klee O…...
保姆级教程:在Ubuntu 20.04上为ZYNQ配置Linaro GCC 10.3交叉编译环境(含阿里云源和依赖库避坑)
从零构建ZYNQ嵌入式开发环境:Linaro GCC 10.3全流程实战指南 在嵌入式开发领域,为特定硬件平台搭建高效的交叉编译环境往往是项目成功的第一步。对于Xilinx ZYNQ系列这种集成了ARM Cortex-A系列处理器和FPGA的异构计算平台而言,选择合适的工…...
终极指南:如何让Nautilus、Dolphin等Linux文件管理器拥有macOS Finder般流畅的快捷键体验
终极指南:如何让Nautilus、Dolphin等Linux文件管理器拥有macOS Finder般流畅的快捷键体验 【免费下载链接】kinto Mac-style shortcut keys for Linux & Windows. 项目地址: https://gitcode.com/gh_mirrors/kin/kinto 你是否厌倦了在Linux文件管理器中不…...
[具身智能-125]:RQT(Robot Qt),一个可以全方位监控ROS2系统内部节点工作状态的可视化超级终端!!!
如果说 RViz2 是机器人的“眼睛”(看 3D 世界),那么 RQT 就是机器人的“听诊器”和“控制台”。它基于 Qt 框架开发,采用插件化架构,让你能在一个窗口里完成对 ROS2 系统内部状态的全方位监控与调试。为了让你更好地利…...
ArcGIS模型构建器实战:一键加载上百个SHP文件(含子文件夹),告别手动拖拽
ArcGIS模型构建器实战:一键加载上百个SHP文件(含子文件夹),告别手动拖拽 当你的硬盘里散落着数百个SHP文件,它们像秋天的落叶一样分布在几十层子文件夹中时,传统的手动拖拽加载方式简直是一场噩梦。上周我接…...
Html2Pdf高性能转换引擎:PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案
Html2Pdf高性能转换引擎:PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案 【免费下载链接】html2pdf OFFICIAL PROJECT | HTML to PDF converter written in PHP 项目地址: https://gitcode.com/gh_mirrors/ht/html2pdf 在当今企业数字化转型浪潮中…...
告别模糊概念:用ESP32 iperf例程和电脑热点,5分钟搞定无线模块压力测试
5分钟极简方案:用ESP32和电脑热点构建无线性能测试环境 在嵌入式开发中,无线模块的性能测试往往需要复杂的网络环境支持。但现实情况是,大多数开发者并不具备专业的测试设备或实验室环境。想象一下这样的场景:你正在咖啡厅调试一个…...
