首页 > 编程知识 正文

python语言程序设计pdf,python pdf解析

时间:2023-05-05 00:46:26 阅读:131247 作者:227

1. PDF分割受疫情影响,不得不在家上网络课,所以教材也只能用电子版。 但是,一个教材是双联扫描版,在iPad上阅读不友好,所以我决定找一个把PDF分成两半的工具。

我在百度上查看了图1中的预拆分PDF,发现它经常在Adobe Acrobat软件中进行裁剪,因为这完全不是Pythonic,所以我找到了一个在Python中处理PDF文件的方法,最后找到了一个名为PyPDF2的库利用该库实现PDF的分割。

首先,必须使用pip安装此库:

pip install PyPDF2

如果可以测量PDF的长宽比,并将左右裁剪连接起来,剪切PDF的想法很简单,但PyPDF2提供了这些功能。

# PdfFileReader模块用于导入pdf# PdfFileWriter模块,以创建要保存的pdffrompypdf2importpdffilereader。 pdf filewriter #1. pdf pdf _ input=pdf filereader (open (' XXX.pdf ', ' rb ' ) # 2.创建要保存的pdf对象的pdf_output=pdffilewriter(# 3 .选择第一页上的pdf读取纵横比page=pdf_input_left.getPage(0)0) width=height=float (page.media box.getheigght numpages ) )5.修改page.mediabox.lowerleft=(x,y ) page.media box.upper pdf_output.addpage(page ) )7.循环所有页数,然后将文件输出为pdf文件pdf _ output.write open (XXX,pdf )、pdf

图2垂直缩放的PyPDF2坐标,但我们的PDF是水平缩放,如下图所示。

图3长宽比PDF的示例相当于以下内容:

图4横向比例下的PyPDF2坐标:

注意图5旋转后的横向比例下的PyPDF2坐标与图1坐标的不同。

知道PyPDF的坐标后,通过调整四角的坐标可以分别得到左右两个PDF。 对于左侧的PDF,相应的坐标如下:

图6左半部的PyPDF2坐标因此设定如下。

page_ left.media box.lower left=(0,height/2 ) page _ left.media box.lower right=(width,height/2 ) page _。

与图7右半部分的图的PyPDF2坐标相对应的坐标设定如下。

page _ right.media box.lower left=(0,0 ) page _ right.media box.lower right=(width,0 ) page _ right.mediabobot

from py pdf 2导入pdf文件文件生成器, PdfFileWriterinfile='应用多元分析慢鼠标. pdf'outfile='应用多元分析慢鼠标split.pdf ' pdf _ input _ left=pdf filereader (pdf _ input _ right=pdf filereader (打开(infile, ' rb ' ) (pdf_output=PdfFileWriter ) page=pdf_input_left.getpage(0) width=float ) page.media box.getpage

page_left.mediaBox.lowerLeft = (0, height/2) page_left.mediaBox.lowerRight = (width, height/2) page_left.mediaBox.upperLeft = (0, height) page_left.mediaBox.upperRight = (width, height) pdf_output.addPage(page_left) # right page page_right = pdf_input_right.getPage(i) page_right.mediaBox.lowerLeft = (0, 0) page_right.mediaBox.lowerRight = (width, 0) page_right.mediaBox.upperLeft = (0, height/2) page_right.mediaBox.upperRight = (width, height/2) pdf_output.addPage(page_right)pdf_output.write(open(outfile, 'wb'))

看下转换效果,Bingo!

图8 转换后的 PDF 效果 2. 调整边缘

转换后发现,PDF 存在这黑边,因此我们可以通过调整对应的坐标来减少黑边的现象:

图9 PDF 黑边 from PyPDF2 import PdfFileReader, PdfFileWriterdef pdf_split(infile, outfile, left_margin=0, right_margin=0, down_margin=0): pdf_input_left = PdfFileReader(open(infile, 'rb')) # 读取切割为左边的 pdf pdf_input_right = PdfFileReader(open(infile, 'rb')) # 读取切割为右边的 pdf pdf_output = PdfFileWriter() # 定义要保存的 pdf page = pdf_input_left.getPage(0) # 选取第一页 来读取 pdf 的长宽 width = float(page.mediaBox.getWidth()) height = float(page.mediaBox.getHeight()) page_count = pdf_input_left.getNumPages() # 读取 pdf 页数 for i in range(page_count): # 切割左边 pdf page_left = pdf_input_left.getPage(i) page_left.mediaBox.lowerLeft = (0, height/2) page_left.mediaBox.lowerRight = (width, height/2) page_left.mediaBox.upperLeft = (down_margin, height-left_margin) page_left.mediaBox.upperRight = (width, height-left_margin) pdf_output.addPage(page_left) # 切割右边 pdf page_right = pdf_input_right.getPage(i) page_right.mediaBox.lowerLeft = (down_margin, right_margin) page_right.mediaBox.lowerRight = (width, right_margin) page_right.mediaBox.upperLeft = (down_margin, height/2) page_right.mediaBox.upperRight = (width, height/2) pdf_output.addPage(page_right) pdf_output.write(open(outfile, 'wb')) # 保存 pdf print('Done!') infile = '应用多元统计分析 缓慢的老鼠.pdf'outfile = '应用多元统计分析 缓慢的老鼠 split.pdf'left_margin=10right_margin=10down_margin = 20pdf_split(infile, outfile, left_margin, right_margin, down_margin) Done!

看下最后效果:

图10 调整后的 PDF 黑边情况

其他文章推荐

机器学习算法与 Python 实现专栏

SQL 入门教程专栏

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。