写在前面
最近有小伙伴问我怎么把 PDF 文档切分成两个大小相近的 PDF文档, 要是在 mac 上, 直接无脑预览就行了, 但是这样不够跨平台, 之后我也尝试过 pymupdf, 但是奈何不支持 arm 架构, 后来还是用 Python 原生的 pypdf 了.
有 AI 加持还是很方便
方法 1:mac 预览
使用预览左边的缩略图栏就可以方便地切分(删除页面)然后保存了. 纯手工操作.
方法 2: pypdf
先安装
python -m pip install pypdf
pypdf 和 PyPDF2 以及 PyPDF3 都是如出一辙, 但是后来 PyPDF2 合并到了 pypdf, 所以用 pypdf 即可.
上代码
#!/opt/homebrew/Caskroom/miniforge/base/envs/py3x/bin/python
import pypdf
import sys
def split_and_save(filename, split_num):
pdf = pypdf.PdfReader(filename)
pdf1 = pypdf.PdfWriter()
pdf2 = pypdf.PdfWriter()
page_count = len(pdf.pages)
for i in range(split_num):
pdf1.add_page(pdf.pages[i])
for i in range(split_num, page_count):
pdf2.add_page(pdf.pages[i])
# save output pdf on current path
pdf1.write(f'{filename[:-4]}-part1.pdf')
pdf2.write(f'{filename[:-4]}-part2.pdf')
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: split-pdf.py <filename> <split_page_num>")
exit(-1)
filename = sys.argv[1]
split_num = int(sys.argv[2])
split_and_save(filename, split_num)
API还是很清晰的, 配合python 强大的表达力, 搞个 PDF 不在话下.
使用方法就是
python split.py input.pdf 10
参数是待切分 PDF 的文件名和从哪一页开始切分, 例如我传入参数是 10, 那就是前 10 页为一个新 PDF, 后面的是一个新的 PDF.