前段时间买了一个kindle 电子书阅读器、我想用它来读的pdf文档、当然最主要是用来读python标准库&mysql的官方文档。

问题就来了、这两个都是大头书、之前用mac看还好、用kindle就真的不方便了;主要是kindle对pdf的支持不太好、不能

目录导航;于是我就想把大的pdf文件按章节分解成小的pdf文件

一、安装PyPDF2这个python包

pip3 install PyPDF2

二、从源pdf文件中抽取页面

#/usr/local/python/bin/python3

from PyPDF2 import PdfFileReader,PdfFileWriter
"""
抽取pdf页面
""" if __name__=="__main__":
reader=PdfFileReader('/Users/jianglexing/Documents/linux/python/python-3.6/library.pdf')
writer=PdfFileWriter()
#开始的页面号
start=108
#结束的页面号
stop=126
with open('/Users/jianglexing/Documents/python-std-re.pdf','wb') as wstream:
for page in range(start,stop):
temp=reader.getPage(page)
writer.addPage(temp)
writer.write(wstream)
print("对抽取完成了")

三、功能我们已经实现了、但是还太友好、下面对代码进行改进

#/usr/local/python/bin/python3

from PyPDF2 import PdfFileReader,PdfFileWriter
import argparse """
抽取pdf页面
""" if __name__=="__main__":
parser=argparse.ArgumentParser()
parser.add_argument('--source-file',default=r'/Users/jianglexing/Documents/linux/python/python-3.6/library.pdf',help='源文件全路径')
parser.add_argument('--target-file',default=r'/tmp/target.pdf',help='目标路径的全路径')
parser.add_argument('--start-page',default=,type=int,help='开始的页号')
parser.add_argument('--stop-page',default=,type=int,help='结束的页号')
args=parser.parse_args()
reader=PdfFileReader(args.source_file)
writer=PdfFileWriter()
with open(args.target_file,'wb') as wstream:
for page in range(args.start_page,args.stop_page):
temp=reader.getPage(page)
writer.addPage(temp)
writer.write(wstream)
print("对抽取完成了")

四、还有一些没有解决的问题、如果源文件太大的话会报错、由于还没有看PyPDF2的源码、所以目前还不知道怎么解决

JianglexingdeMacBook-Pro:Desktop jianglexing$ python3 splitpdf.py --source-file='/Users/jianglexing/Desktop/refman-5.7.18-en.a4.pdf' --target-file=/Users/jianglexing/Desktop/temp.pdf --start-page= --stop-page=
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/generic.py", line , in __new__
return decimal.Decimal.__new__(cls, utils.str_(value), context)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/utils.py", line , in str_
if sys.version_info[] < :
RecursionError: maximum recursion depth exceeded in comparison During handling of the above exception, another exception occurred: Traceback (most recent call last):
File "splitpdf.py", line , in <module>
writer.write(wstream)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/pdf.py", line , in write
self._sweepIndirectReferences(externalReferenceMap, self._root)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/pdf.py", line , in _sweepIndirectReferences
self._sweepIndirectReferences(externMap, realdata)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/pdf.py", line , in _sweepIndirectReferences
value = self._sweepIndirectReferences(externMap, value)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/pdf.py", line , in _sweepIndirectReferences
self._sweepIndirectReferences(externMap, realdata)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/pdf.py", line , in _sweepIndirectReferences
value = self._sweepIndirectReferences(externMap, value)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/pdf.py", line , in _sweepIndirectReferences
value = self._sweepIndirectReferences(externMap, data[i])
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PyPDF2/pdf.py", line , in _sweepIndirectReferences
self._sweepIndirectReferences(externMap, realdata)

----

学习交流

从pdf 文件中抽取特定的页面的更多相关文章

  1. 怎样在PDF文件中查找某个特定的词?

    不得不说中国的修饰词太多了例如:“滚”可以这样说,请你以一种圆润的方式离开:上次小编在路上听到某男子打电话,好像是给女孩子,那口才,是真的牛,夸人不带重复的.要不是我男孩子,我都想以身相许了.人们常常 ...

  2. 另类爬虫:从PDF文件中爬取表格数据

    简介   本文将展示一个稍微不一样点的爬虫.   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...

  3. 怎样把PDF文件中的一页提取出来

    现在随着网络科技的发展在网上找资源找文件就像家常便饭一样,但是有很多文件下载完成之后只有几页是需要的这时候就很困惑了,这么多怎么才能看完啊.这样为了不浪费时间可以将有用的一页提取出来,进行使用,那怎样 ...

  4. java 用PDFBox 删除 PDF文件中的某一页

    依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app ...

  5. 使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载

    使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载 2018年06月07日 10:42:26 守望dfdfdf 阅读数:235 标签: jav ...

  6. 读取同一文件夹下多个txt文件中的特定内容并做统计

    读取同一文件夹下多个txt文件中的特定内容并做统计 有网友在问,C#读取同一文件夹下多个txt文件中的特定内容,并把各个文本的数据做统计. 昨晚Insus.NET抽上些少时间,来实现此问题,加强自身的 ...

  7. 借助python工具从word文件中抽取相关表的定义,最后组装建表语句-非常好

    借助python工具从word文件中抽取表的定义,最后组装建表语句-非常好 --如有转载请以超链接的方式注明原文章出处,谢谢大家.请尊重每一位乐于分享的原创者 1.python脚本 ## -*- co ...

  8. 怎样批量删除PDF文件中的注释

    日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释?   操作教程: ...

  9. 使用Python从PDF文件中提取数据

    前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...

随机推荐

  1. ssl 复制

    http://www.ttlsa.com/mysql/mysql-replication-base-on-ssl/ http://www.tuicool.com/articles/mi2iaq htt ...

  2. g++ 链接*.a静态库 方法

    g++在链接*.a静态库时,直接作为object使用,不需要使用-l ,但是需要注意调整顺序,被依赖的文件放在后面. 如: g++  -g  -o0 -Wno-deprecated  -I$(INCL ...

  3. vue项目条形码和二维码生成工具试用

    项目开发需要,优惠券分不同类型,简单的使用id生成条形码供店铺使用,麻烦点的需要多个字段的就需要使用二维码来展示了,对应的效果如下 条形码(一维码)使用工具code128 需引入code128.js ...

  4. Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connectio

    严重: StandardWrapper.Throwableorg.springframework.transaction.CannotCreateTransactionException: Could ...

  5. Eclipse里web的依赖工程部署的简便方法

    用Eclipse开发项目,曾经为依赖工程的部署问题头疼过,用了MyEclipse之后就没有仔细去研究,最近研究了下,还真找到了比较简便的方法,之前都是采用Ant打jar包,copy到web工程,或者通 ...

  6. 搭建java开发环境:安装JDK

    一:下载安装JDK,java7相对稳定成熟 (下载地址>>) 必须选择同意,然后根据自己的系统版本选择对应的jdk 如: 装完jdk就会提示安装jre,一般放同一目录下 配置系统变量: w ...

  7. Sound.loadCompressedDataFromByteArray

    前不久Adobe发布了Flash Player 11的release版本, Flash Player 11 带来了很多新特性, 最最红火的就是Stage3D了,但是这里讲的是这个版本的另一个新特性, ...

  8. Source Insight 源代码查看工具

    在开发的过程中,有时候我们需要研究源代码,查看源码是一个好的习惯,能帮我们学到很多的东西,比如JDK可以帮助我们理解很多设计模式在实际开发中的应用,又或者android开发者,源代码更是必不可少的,当 ...

  9. openssl https 单向认证连接成功示例

    研究这个玩意也有几天的时间了,刚学C 因为不熟悉编译折腾了不少时间,终于弄通了,发个随笔给研究openssl https的同学一点提示吧. 环境: ========================== ...

  10. 对开源库使用 AutoCAD 文件格式[转]

    https://www.ibm.com/developerworks/cn/opensource/os-autocad/ 对开源库使用 AutoCAD 文件格式 读取 DWG 和 DXF 文件格式 C ...