說(shuō)明:本文部分內(nèi)容參考w3cschool
在日常工作中,我們經(jīng)常需要給PDF文檔添加一些標(biāo)識(shí),比如公司的圖章或水印圖章。
使用Python可以很方便地實(shí)現(xiàn)這個(gè)功能。添加圖章或水印是操作 PDF 文件的兩種常用方法。圖章是在文檔頂部添加內(nèi)容,水印是在文檔的背景中。
在這兩種情況下,您可能都希望確保原始內(nèi)容的媒體框/裁剪框保持不變。
本文將介紹如何使用PyPDF2、pathlib和typing模塊來(lái)給PDF文檔添加圖章或水印圖章。
PyPDF2是一個(gè)用于處理PDF文件的Python庫(kù),它可以讀取、寫(xiě)入和操作PDF文件。
pathlib是Python 3中用于處理文件和目錄路徑的模塊,它提供了一種簡(jiǎn)單而直觀的方式來(lái)操作文件系統(tǒng)。
typing模塊是Python 3.5中引入的一個(gè)模塊,它提供了一種用于類型注釋的方式,可以增強(qiáng)代碼的可讀性和可維護(hù)性。
首先,我們需要安裝PyPDF2庫(kù)。可以使用pip命令來(lái)安裝:
pip install PyPDF2
接下來(lái),我們需要?jiǎng)?chuàng)建一個(gè)Python腳本,并導(dǎo)入所需的模塊:
import PyPDF2
from pathlib import Path
from typing import Tuple
然后,我們定義一個(gè)函數(shù)stamp()
來(lái)添加覆蓋原有文字的圖章。
from pathlib import Path
from typing import Union, Literal, List
from PyPDF2 import PdfWriter, PdfReader
def stamp(
content_pdf: Path,
stamp_pdf: Path,
pdf_result: Path,
page_indices: Union[Literal["ALL"], List[int]] = "ALL",
):
reader = PdfReader(stamp_pdf)
image_page = reader.pages[0]
writer = PdfWriter()
reader = PdfReader(content_pdf)
if page_indices == "ALL":
page_indices = list(range(0, len(reader.pages)))
for index in page_indices:
content_page = reader.pages[index]
mediabox = content_page.mediabox
content_page.merge_page(image_page)
content_page.mediabox = mediabox
writer.add_page(content_page)
with open(pdf_result, "wb") as fp:
writer.write(fp)
下面是將圖章覆蓋模式添加到文字上面的效果圖,具體可以根據(jù)自身的需求進(jìn)行調(diào)整。
現(xiàn)在,我們可以調(diào)用watermark()
這個(gè)函數(shù)來(lái)給PDF文檔添加水印圖章。
下面是一個(gè)示例:
from pathlib import Path
from typing import Union, Literal, List
from PyPDF2 import PdfWriter, PdfReader
def watermark(
content_pdf: Path,
stamp_pdf: Path,
pdf_result: Path,
page_indices: Union[Literal["ALL"], List[int]] = "ALL",
):
reader = PdfReader(content_pdf)
if page_indices == "ALL":
page_indices = list(range(0, len(reader.pages)))
writer = PdfWriter()
for index in page_indices:
content_page = reader.pages[index]
mediabox = content_page.mediabox
# You need to load it again, as the last time it was overwritten
reader_stamp = PdfReader(stamp_pdf)
image_page = reader_stamp.pages[0]
image_page.merge_page(content_page)
image_page.mediabox = mediabox
writer.add_page(image_page)
with open(pdf_result, "wb") as fp:
writer.write(fp)
處理過(guò)程相差不大,最后通過(guò)PdfWriter
將結(jié)果寫(xiě)入到文檔中,下面是水印圖章的效果圖:
總結(jié)一下,本文介紹了如何使用Python給PDF文檔添加圖章或水印圖章。
我們使用了PyPDF2、pathlib和typing模塊來(lái)實(shí)現(xiàn)這個(gè)功能。
通過(guò)這種方法,你可以方便地給PDF文檔添加標(biāo)識(shí),提高文檔的可讀性和可信度。
希望本文對(duì)你有所幫助!