PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-相关的知识,希望对你有一定的参考价值。

用PyDPF2实现pdf文件的裁剪

背景故事

我们老师给我们了一些很不错的PDF,为了便于我们打印,把PDF做成了一张上有4页的形式。
1张4页
但是可能不太方便阅读。于是,想到用python处理一下。

环境准备

使用PyPDF2,如果没有需要先安装。网上教程很多,这里简单说一下:

可以Win+R,输入cmd并回车,弹出小黑框,输入pip install PyPDF2即可。

过程

首先导入PyPDF2

import PyPDF2

然后定义要处理的PDF文件的路径和要输出的PDF文件的路径

input_file_path = 'C:\\\\Users\\\\LetMeFly\\\\Desktop\\\\lec1_1.pdf'
output_file_path = 'C:\\\\Users\\\\LetMeFly\\\\Desktop\\\\lec1_1-sp.pdf'
output_file = PyPDF2.PdfFileWriter()

获取要处理的PDF的信息

input_file = PyPDF2.PdfFileReader(open(input_file_path, 'rb'))
page_info = input_file.getPage(0)  # 这里假设每一页PDF都一样大
width = float(page_info.mediaBox.getWidth())  # 宽度
height = float(page_info.mediaBox.getHeight())  # 高度
page_count = input_file.getNumPages()  # 页数

然后先尝试裁剪一个 200 ∗ 200 200*200 200200的小PDF(看不懂先别着急,等会会讲)

this_page = input_file.getPage(0)  # 获取第1页
this_page.mediaBox.lowerLeft=(0,0)
this_page.mediaBox.lowerRight=(200,0)
this_page.mediaBox.upperLeft = (0,200)
this_page.mediaBox.upperRight = (200,200)

把裁剪出来的小块添加到要输出的PDF中并输出

output_file.addPage(this_page)
output_file.write(open(output_file_path, 'wb'))

总体就是:

import PyPDF2
input_file_path = 'C:\\\\Users\\\\LetMeFly\\\\Desktop\\\\lec1_1.pdf'
output_file_path = 'C:\\\\Users\\\\LetMeFly\\\\Desktop\\\\lec1_1-sp.pdf'
output_file = PyPDF2.PdfFileWriter()
input_file = PyPDF2.PdfFileReader(open(input_file_path, 'rb'))

page_info = input_file.getPage(0)  # 这里假设每一页PDF都一样大
width = float(page_info.mediaBox.getWidth())  # 宽度
height = float(page_info.mediaBox.getHeight())  # 高度
page_count = input_file.getNumPages()  # 页数

this_page = input_file.getPage(0)  # 获取第1页
this_page.mediaBox.lowerLeft=(0,0)
this_page.mediaBox.lowerRight=(200,0)
this_page.mediaBox.upperLeft = (0,200)
this_page.mediaBox.upperRight = (200,200)

output_file.addPage(this_page)
output_file.write(open(output_file_path, 'wb'))

可以看到桌面上多出了一个lec1_1-sp.pdf,打开张这样
200-200
像素正好是 200 ∗ 200 200*200 200200

接下来讲解lowerLeft、lowerRight、upperLeft、upperRight为什么是这些参数。

PyPDF2中,获取pdf的时,的是的是。就像第一张图片,
宽和高

然而lowerLeft、lowerRight、upperLeft、upperRight中的8个值(其实有4对相同的)不好记,于是我打包了一个函数:

def split(page, tup):
    page.mediaBox.lowerLeft=(tup[0],tup[1])
    page.mediaBox.lowerRight=(tup[2],tup[1])
    page.mediaBox.upperLeft = (tup[0], tup[3])
    page.mediaBox.upperRight = (tup[2], tup[3])

使用这个函数时,你只需要把要裁剪的Page、矩形左上角、右下角两个点的xy坐标传入就行了。
如图,坐标只需要传入(1,1,2,3)就行了,分别是左上角的xy和右下角的xy
坐标
split(this_page, (1,1,2,3))

所以假如要做如下裁剪
裁剪示例

只需要split(this_page, (100,60,180,310))即可
完成代码:

import PyPDF2
input_file_path = 'C:\\\\Users\\\\LetMeFly\\\\Desktop\\\\lec1_1.pdf'
output_file_path = 'C:\\\\Users\\\\LetMeFly\\\\Desktop\\\\lec1_1-sp.pdf'
output_file = PyPDF2.PdfFileWriter()
input_file = PyPDF2.PdfFileReader(open(input_file_path, 'rb'))

def split(page, tup):
    page.mediaBox.lowerLeft=(tup[0],tup[1])
    page.mediaBox.lowerRight=(tup[2],tup[1])
    page.mediaBox.upperLeft = (tup[0], tup[3])
    page.mediaBox.upperRight = (tup[2], tup[3])

page_info = input_file.getPage(0)  # 这里假设每一页PDF都一样大
width = float(page_info.mediaBox.getWidth())  # 宽度
height = float(page_info.mediaBox.getHeight())  # 高度
page_count = input_file.getNumPages()  # 页数

this_page = input_file.getPage(0)  # 获取第1页
split(this_page, (100,60,180,310))

output_file.addPage(this_page)
output_file.write(open(output_file_path, 'wb'))

那么如何批量处理一张4页的PDF呢?
篇幅限制,请看这里

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/117637420

以上是关于PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-的主要内容,如果未能解决你的问题,请参考以下文章

PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-

PDF分割?有了这把魔法剪,PDF任你裁剪(PyPDF2)-

如何使用pyPdf沿中间分割/裁剪pdf

iText - 裁剪出 pdf 文件的一部分

PDF怎么裁剪页面,PDF裁剪页面的操作步骤

如何修改PDF文件,PDF页面怎么裁剪