PDF 拆分/合并/插入/删除
这篇文章会介绍使用 Python 的 pikepdf 第三方函数库,实作将拆分、合并、插入、删除、取代和反转 pdf 的功能,也会介绍如何将有密码保护的 pdf 储存为没有密码的 pdf,或将 pdf 储存为有密码保护的 pdf。
快速导览:
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
安装 pikepdf 函数库
输入下列指令安装 pikepdf 函数库,根据个人环境使用 pip 或 pip3。
!pip install pikepdf
打开与储存 pdf
加载 pikepdf 后,使用 open 方法打开 PDF 文件,加入 password 参数也能打开需要密码的 pdf。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf = Pdf.open('oxxostudio.pdf', password='1234') # 開啟 pdf
pdf_pwd = Pdf.open('oxxostudio-pwd.pdf', password='1234') # 開啟需要密碼的 pdf
print(pdf)
print(pdf_pwd)
使用 save 方法可以储存 pdf 文件,搭配 pikepdf 里 Permissions, Encryption 两个模组,也能将 pdf 储存为具有密码保护的 pdf,下方程序码会打开一个密码为 1234 的 pdf,并将其储存为密码是 qqqq 的 pdf。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf, Permissions, Encryption
pdf = Pdf.open('oxxostudio-pwd.pdf', password='1234') # 開啟密碼為 1234 的 pdf
no_extracting = Permissions(extract=False)
# 儲存為密碼是 qqqq 的 pdf
pdf.save('new.pdf', encryption = Encryption(user="qqqq", owner="qqqq", allow=no_extracting))
拆分 pdf
如果要取出 pdf 的“某一页”,可以参考下方的程序码,先使用 new() 的方法建立全新 pdf,接着使用串列的 append 方法将指定的页面 ( 范例为 pages[0] ) 加入新的 pdf 中,存档后就会变成一份单页的 pdf。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf = Pdf.open('oxxostudio.pdf') # 開啟 pdf
pages = pdf.pages # 將每一頁的內容變成串列
output = Pdf.new() # 建立新的 pdf 物件
output.pages.append(pages[0]) # 添加頁面內容
output.save('new.pdf') # 儲存為新的 pdf
搭配 for 循环,就能将一份 pdf 的每一页拆成各自独立的 pdf。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf = Pdf.open('oxxostudio.pdf')
pages = pdf.pages
n = 1
for i in pages:
output = Pdf.new()
output.pages.append(i)
output.save(f'new_{n}.pdf') # 格式化檔案名稱
n = n + 1 # 編號加 1
如果要从 pdf 取出“特定范围”的页面,只要将串列的 append 方法改成 extend,就能加入特定串列范围的页面。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf = Pdf.open('test.pdf')
pages = pdf.pages
output = Pdf.new()
output.pages.extend(pages[1:3]) # 改用 extend,放入特定範圍的頁面
output.save('new.pdf')
合并 pdf
如果要合并“单一页面”,可以使用 new 建立一份全新的 pdf 对象后,使用串列的 append 方法将读取的页面加入,就能将多个页面组合成一个新的 pdf。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf1 = Pdf.open('oxxo_1.pdf') # 讀取第一份 pdf
pdf2 = Pdf.open('oxxo_2.pdf') # 讀取第二份 pdf
pdf3 = Pdf.open('oxxo_3.pdf') # 讀取第三份 pdf
output = Pdf.new() # 建立新的 pdf 物件
output.pages.append(pdf1.pages[0]) # 添加第一頁到第一份
output.pages.append(pdf2.pages[0]) # 添加第一頁到第二份
output.pages.append(pdf3.pages[0]) # 添加第一頁到第三份
output.save('output.pdf')
如果要合并的 pdf 为“多页面”,将串列的 append 方法换成 extend 就能将多页面的 pdf 进行合并。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf1 = Pdf.open('oxxo_more_1.pdf') # 讀取第一份多頁面 pdf
pdf2 = Pdf.open('oxxo_more_2.pdf') # 讀取第一份多頁面 pdf
pdf3 = Pdf.open('oxxo_more_1.pdf') # 讀取第一份多頁面 pdf
output = Pdf.new()
output.pages.extend(pdf1.pages) # 添加所有頁面到第一份
output.pages.extend(pdf2.pages) # 添加所有頁面到第二份
output.pages.extend(pdf3.pages) # 添加所有頁面到第三份
output.save('output.pdf')
插入 pdf
如果要在某一份 pdf 的指定页数插入其他 pdf,可以使用串列的 insert 方法,在指定的页数后方插入 pdf。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf1 = Pdf.open('oxxostudio.pdf') # 開啟第一份 pdf
pdf2 = Pdf.open('new.pdf') # 開啟第二份 pdf
pdf1.pages.insert(1, pdf2.pages[0]) # 在第一份的第一頁後方,插入第二份的第一頁
pdf1.save('output.pdf')
删除 pdf
如果要在删除 pdf 里的指定页面,可以使用串列的 del 方法,删除 pdf 中的指定页面。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf = Pdf.open('oxxosudio.pdf') # 開啟 pdf
del pdf.pages[1:2] # 刪除第二頁
pdf.save('output.pdf')
取代 pdf
如果要在将 pdf 里的指定页面替换成另外一页,可以使用串列的操作,取代 pdf 中的指定页面。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf1 = Pdf.open('oxxosudio.pdf') # 開啟第一份 pdf
pdf2 = Pdf.open('new.pdf') # 開啟第二份 pdf
pdf1.pages[2] = pdf2.pages[0] # 將第一份的第三頁,換成第一份的第一頁
pdf1.save('output.pdf')
反转 pdf
使用串列的 reverse 方法,就能反转 pdf 中的所有页面。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pikepdf import Pdf
pdf = Pdf.open('output.pdf')
pdf.pages.reverse() # 反轉 pdf
pdf.save('output2.pdf')
微信扫码关注
抖音扫码关注