Python 是一种全能性编程语言,拥有许多工具和库,经常被用于数据处理、网络爬虫、人工智能等领域。其中,关于 PDF 的操作也是 Python 中一个被广泛关注和应用的方向。这篇文章将从多个方面介绍如何使用 Python 进行 PDF 的裁剪,帮助读者更好地实现自身需求。
一、PDF 裁剪介绍
PDF(Portable Document Format)文件是一种广泛应用于文档交流和存储的文件格式。在日常工作和学习中,我们经常需要对 PDF 文件进行裁剪,以便筛选出自己所需的部分,或者分割成不同的文件等。Python 提供了许多库,使得 PDF 文件的裁剪变得容易。下面是使用 PyPDF2 和 PyMuPDF 两个库对 PDF 进行裁剪的示例。
# 使用 PyPDF2
from PyPDF2 import PdfFileReader, PdfFileWriter
def crop_pdf(file_path):
# 打开 PDF 文档
input_pdf = PdfFileReader(open(file_path, "rb"))
# 新建一个 PDF 文档,用来存储裁剪后的内容
output_pdf = PdfFileWriter()
# 获取第一页
page = input_pdf.getPage(0)
# 裁剪出指定矩形区域
page.cropBox.setLowerLeft((72, 72))
page.cropBox.setUpperRight((500, 500))
# 将裁剪后的页添加到输出文档中
output_pdf.addPage(page)
# 将输出文档保存
output_pdf_stream = open("output.pdf", "wb")
output_pdf.write(output_pdf_stream)
output_pdf_stream.close()
# 使用 PyMuPDF
import fitz
def crop_pdf_mupdf(file_path):
# 打开 PDF 文档
pdf_doc = fitz.open(file_path)
# 获取第一页
first_page = pdf_doc.loadPage(0)
# 设置裁剪区域,并裁剪出指定矩形区域
rect = fitz.Rect(72, 72, 500, 500)
cropped_page = first_page.crop(rect)
# 将裁剪后的页保存到输出文档
output_pdf = fitz.open()
output_pdf.insertPDF(pdf_doc)
# 写入新的 PDF 文档
output_pdf.save("cropped.pdf")
二、裁剪特定页面
有时候,我们并不需要对整个 PDF 文档进行裁剪,而是只需要裁剪其中的某几页。为此,我们可以使用 PyPDF2 和 PyMuPDF 两个库提供的函数,实现对特定页面的裁剪。
# 使用 PyPDF2 进行特定页面裁剪
def crop_specific_pages(input_file, output_file, page_numbers, lower_left, upper_right):
with open(input_file, 'rb') as infile:
reader = PdfFileReader(infile)
writer = PdfFileWriter()
for i in range(page_numbers):
page = reader.getPage(i)
page.mediaBox.lowerLeft = lower_left
page.mediaBox.upperRight = upper_right
writer.addPage(page)
with open(output_file, 'wb') as outfile:
writer.write(outfile)
# 使用 PyMuPDF 进行特定页面裁剪
def crop_specific_pages_mupdf(input_file, output_file, page_numbers, rect):
pdf_doc = fitz.open(input_file)
output_pdf = fitz.open()
for i in range(page_numbers):
page = pdf_doc[i]
cropped_page = page.crop(rect)
output_pdf.insertPDF(cropped_page)
output_pdf.save(output_file)
三、裁剪指定区域
除了裁剪指定页面,有时候我们还需要进一步裁剪出页面的指定区域。也就是说,我们需要获取到一个页面上的子区域,并将其留下放弃其余部分。为了实现此功能,我们可以使用 PyPDF2 和 PyMuPDF 提供的函数。
# 使用 PyPDF2 进行指定矩形区域裁剪
def crop_rectange_on_page(input_file, output_file, page_number, rectange):
with open(input_file, 'rb') as infile:
reader = PdfFileReader(infile)
writer = PdfFileWriter()
page = reader.getPage(page_number)
page.mediaBox.lowerLeft = rectange[0]
page.mediaBox.upperRight = rectange[1]
writer.addPage(page)
with open(output_file, 'wb') as outfile:
writer.write(outfile)
# 使用 PyMuPDF 进行指定矩形区域裁剪
def crop_rectange_on_page_mupdf(in_file, out_file, page_number, rect):
pdf_doc = fitz.open(in_file)
output_pdf = fitz.open()
page = pdf_doc[page_number]
cropped_page = page.crop(rect)
output_pdf.insertPDF(cropped_page)
output_pdf.save(out_file)
四、使用示例
下面的示例代码实现了 PDF 文件内第一页裁剪成指定大小的操作,代码中用到了 PyPDF2 实现裁剪,读取和写新 PDF 文档文件,实现了具体流程。实际中,我们可以根据需要选择所需库,实现对应的 PDF 文件裁剪操作
from PyPDF2 import PdfFileReader, PdfFileWriter
def crop_and_save_pdf(input_path, output_path):
# 打开 PDF 文档
input_pdf = PdfFileReader(open(input_path, "rb"))
# 新建一个 PDF 文档,用来存储裁剪后的内容
output_pdf = PdfFileWriter()
# 获取第一页
page = input_pdf.getPage(0)
# 裁剪出指定矩形区域
page.cropBox.setLowerLeft((72, 72))
page.cropBox.setUpperRight((500, 500))
# 将裁剪后的页添加到输出文档中
output_pdf.addPage(page)
# 将输出文档保存
output_pdf_stream = open(output_path, "wb")
output_pdf.write(output_pdf_stream)
output_pdf_stream.close()
if __name__ == '__main__':
crop_and_save_pdf('test.pdf', 'test_crop.pdf')
总结
本文介绍了 Python 对 PDF 文件进行裁剪的操作,使用了 PyPDF2 和 PyMuPDF 两个库,并示范了如何裁剪指定页面和指定区域,以及实现了具体的示例。通过本文的学习,读者可以更好地了解 Python 中 PDF 文件的裁剪操作,满足自己的实际需求。