一、簡介
Python PyPDF2 是一個強大的 Python PDF 庫,它可以用於處理 PDF 文件,例如合併、拆分、旋轉、剪切、添加文字水印和圖片水印、加密、解密、統計頁面數量等等。 PyPDF2 可以靈活的操作 PDF 文件,而且可以與其他 Python 庫結合起來實現更多功能。 這裡將介紹 PyPDF2 的常用功能。
二、合併 PDF 文件
合併多個 PDF 文件成一個單獨的 PDF 文件,通過 PyPDF2 很容易實現。使用 PyPDF2.PdfFileMerger() 創建一個 PDF 合併器,並添加要合併的 PDF 文件,最後輸出到目標文件。
from PyPDF2 import PdfFileMerger
pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf'] # 要合併的 PDF 文件列表
merger = PdfFileMerger()
for pdf in pdfs:
merger.append(open(pdf, 'rb'))
with open('merged_file.pdf', 'wb') as output:
merger.write(output)
三、PDF 文件頁數統計
通過 PyPDF2 可以方便地獲得 PDF 文件中頁面的數量。使用 PdfFileReader 類讀取 PDF 文件,獲取頁面數量。
from PyPDF2 import PdfFileReader
pdf_file = 'file.pdf' # 文件路徑
with open(pdf_file, 'rb') as f:
pdf = PdfFileReader(f)
pages = pdf.getNumPages()
print(f'Total pages: {pages}')
四、PDF 文件內容提取
提取 PDF 頁面中的文本內容通常需要用到第三方 OCR(Optical Character Recognition)工具,但是 PyPDF2 可以直接提取已經能夠被識別的文本。使用 PdfFileReader 類讀取 PDF 文件,獲取頁面對象,然後通過 extractText() 方法提取頁面文本內容。
from PyPDF2 import PdfFileReader
pdf_file = 'file.pdf' # 文件路徑
with open(pdf_file, 'rb') as f:
pdf = PdfFileReader(f)
page = pdf.getPage(0) # 獲取第一頁
text = page.extractText()
print(text)
五、PDF 文件頁面剪切
剪切 PDF 文件中的某一頁,通過 PyPDF2 可以方便的實現。使用 PdfFileReader 類讀取 PDF 文件,獲取頁面對象,然後使用 PdfFileWriter 類創建一個新的 PDF 文件,並添加頁面對象,最後輸出到目標文件。
from PyPDF2 import PdfFileReader, PdfFileWriter
pdf_file = 'file.pdf' # 文件路徑
with open(pdf_file, 'rb') as f:
pdf = PdfFileReader(f)
page = pdf.getPage(0) # 獲取第一頁
writer = PdfFileWriter()
writer.addPage(page) # 添加頁面對象
with open('new_file.pdf', 'wb') as output:
writer.write(output)
六、PDF 文件加密
通過 PyPDF2 可以對 PDF 文件進行加密保護。使用 PdfFileWriter 類創建一個新的 PDF 文件,並設置加密選項,最後輸出到目標文件。
from PyPDF2 import PdfFileReader, PdfFileWriter
pdf_file = 'file.pdf' # 文件路徑
with open(pdf_file, 'rb') as f:
pdf = PdfFileReader(f)
writer = PdfFileWriter()
for i in range(pdf.getNumPages()):
writer.addPage(pdf.getPage(i))
writer.encrypt('password', use_128bit=True)
with open('enc_file.pdf', 'wb') as output:
writer.write(output)
七、PDF 文件添加文字水印
通過 PyPDF2 可以在 PDF 文件頁面上添加文字水印。使用 PdfFileWriter 類創建一個新的 PDF 文件,通過 PdfFileReader 類讀取 PDF 文件中的頁面對象,並在頁面上添加水印,添加到新的 PDF 文件中,並輸出到目標文件。
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.pdf import ContentStream
from PyPDF2.pdf import TextStringObject
from PyPDF2.pdf import PageObject
pdf_file = 'file.pdf' # 文件路徑
text_font = 'Arial' # 水印文字字體
text_size = 24 # 水印文字大小
text_color = '#ff0000' # 水印顏色
position_x = 100 # 水印橫坐標位置
position_y = 100 # 水印縱坐標位置
rotate = False # 是否旋轉水印
with open(pdf_file, 'rb') as f:
pdf = PdfFileReader(f)
writer = PdfFileWriter()
for i in range(pdf.getNumPages()):
page = pdf.getPage(i)
# 創建水印
text = TextStringObject('WATERMARK', fontName=text_font, fontSize=text_size, fillColor=text_color)
# 創建水印對象
text_obj = ContentStream([text], page.pdf)
watermark = PageObject.createBlankPage(None)
watermark.mergeContentStreams(text_obj)
# 設置水印位置和旋轉角度
watermark.mediaBox.upperRight = page.mediaBox.upperRight
watermark.translate(position_x, position_y)
if rotate:
watermark.rotateClockwise(45)
# 合併水印和頁面內容
page.mergePage(watermark)
writer.addPage(page)
with open('watermark_file.pdf', 'wb') as output:
writer.write(output)
八、PDF 文件添加圖片水印
通過 PyPDF2 可以在 PDF 文件頁面上添加圖片水印。使用 PdfFileWriter 類創建一個新的 PDF 文件,通過 PdfFileReader 類讀取 PDF 文件中的頁面對象,並在頁面上添加水印,添加到新的 PDF 文件中,並輸出到目標文件。
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.pdf import ContentStream
from PyPDF2.pdf import ImageObject
from PyPDF2.pdf import PageObject
pdf_file = 'file.pdf' # 文件路徑
image_file = 'watermark.png' # 水印圖片路徑
position_x = 100 # 水印橫坐標位置
position_y = 100 # 水印縱坐標位置
scale = 0.5 # 水印大小比例
rotate = False # 是否旋轉水印
with open(pdf_file, 'rb') as f:
pdf = PdfFileReader(f)
writer = PdfFileWriter()
for i in range(pdf.getNumPages()):
page = pdf.getPage(i)
# 創建水印
watermark = ImageObject(image_file)
# 縮放水印
watermark.scale(scale)
# 設置水印位置和旋轉角度
watermark_width = watermark.width
watermark_height = watermark.height
watermark_x = position_x - watermark_width / 2
watermark_y = position_y - watermark_height / 2
if rotate:
watermark.rotate(45)
watermark_x += watermark_height * scale / 2
watermark_y -= watermark_width * scale / 2
# 創建水印對象
image_obj = ContentStream([watermark], page.pdf)
watermark_page = PageObject.createBlankPage(None)
watermark_page.mergeContentStreams(image_obj)
# 合併水印和頁面內容
page.mergePage(watermark_page)
writer.addPage(page)
with open('watermark_file.pdf', 'wb') as output:
writer.write(output)
原創文章,作者:UCVWW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/333265.html