Python給PDF添加水印的代碼步驟
步驟 1:安裝必要的庫(kù)
首先,確保你已經(jīng)安裝了 PyPDF2 和 reportlab 庫(kù)。如果尚未安裝,可以使用以下命令通過(guò) pip 安裝它們:
pip install PyPDF2 reportlab
步驟 2:準(zhǔn)備字體文件
由于我們要在水印中使用中文,因此需要準(zhǔn)備一個(gè)支持中文的字體文件,例如 SimHei.ttf(黑體)。確保這個(gè)字體文件與你的 Python 腳本位于同一目錄下,或者你知道它的完整路徑。
步驟 3:編寫 Python 腳本
接下來(lái),我們編寫一個(gè) Python 腳本來(lái)生成水印并將其添加到現(xiàn)有的 PDF 文檔中。
import io
from PyPDF2 import PdfWriter, PdfReader
from reportlab.lib import pagesizes
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
# 注冊(cè)字體,以便在 PDF 中使用中文
pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))
# 生成水印文件的函數(shù)
def create_water_mark(text):
packet = io.BytesIO()
# 創(chuàng)建一個(gè)新的 PDF 頁(yè)面作為水印
my_canvas = canvas.Canvas(packet, pagesizes.A4)
# 設(shè)置水印字體和大小
my_canvas.setFont("SimHei", 20)
# 設(shè)置填充色為黑色
my_canvas.setFillColorRGB(0, 0, 0)
# 設(shè)置透明度(0.0 完全透明,1.0 完全不透明)
my_canvas.setFillAlpha(0.1)
# 旋轉(zhuǎn)字體以增加水印效果
my_canvas.rotate(30)
# 在頁(yè)面上多次繪制水印文本,以形成水印圖案
for i in range(3, 24, 10):
for j in range(-5, 30, 5):
my_canvas.drawString(i * cm, j * cm, text)
my_canvas.save()
packet.seek(0)
# 返回水印頁(yè)面的 PdfReader 對(duì)象
return PdfReader(packet)
# 將水印添加到 PDF 文件的函數(shù)
def add_watermark(input_pdf_path, output_pdf_path, watermark_text):
# 創(chuàng)建水印
watermark = create_water_mark(watermark_text)
# 讀取輸入 PDF 文件
pdf_reader = PdfReader(input_pdf_path)
pdf_writer = PdfWriter()
# 遍歷輸入 PDF 的每一頁(yè),并添加水印
for page in pdf_reader.pages:
page.merge_page(watermark.pages[0])
pdf_writer.add_page(page)
# 將帶有水印的 PDF 寫入輸出文件
with open(output_pdf_path, "wb") as output_pdf:
pdf_writer.write(output_pdf)
# 主程序
if __name__ == '__main__':
# 輸入和輸出 PDF 文件的路徑
input_pdf = r"input.pdf" # 替換為你的輸入 PDF 路徑
output_pdf = r"output_with_watermark.pdf" # 期望的輸出 PDF 路徑
watermark_text = "添加水印測(cè)試文本" # 水印文本內(nèi)容
# 調(diào)用函數(shù)添加水印
add_watermark(input_pdf, output_pdf, watermark_text)
步驟 4:運(yùn)行腳本
將上述腳本保存為一個(gè) .py 文件,并確保 SimHei.ttf 字體文件與腳本位于同一目錄下。然后,在命令行中運(yùn)行該腳本:
python your_script_name.py
將 your_script_name.py 替換為你保存腳本的文件名。
步驟 5:檢查結(jié)果
腳本運(yùn)行完成后,檢查指定的輸出目錄,你應(yīng)該會(huì)看到一個(gè)名為 output_with_watermark.pdf 的新文件。打開(kāi)它,你將看到每一頁(yè)都添加了指定的水印文本。
注意事項(xiàng)
- 確保
SimHei.ttf字體文件與你的腳本在同一目錄下,或者正確指定其路徑。 reportlab庫(kù)用于生成水印頁(yè)面,而PyPDF2庫(kù)用于讀取和寫入 PDF 文件以及合并頁(yè)面。- 水印的透明度和旋轉(zhuǎn)角度可以根據(jù)需要進(jìn)行調(diào)整。
- 本教程中的代碼是一個(gè)基本示例,可能需要根據(jù)具體情況進(jìn)行修改和優(yōu)化。
到此這篇關(guān)于Python給PDF添加水印的代碼步驟的文章就介紹到這了,更多相關(guān)Python PDF添加水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?pandas中read_csv參數(shù)示例詳解
使用pandas做數(shù)據(jù)處理的第一步就是讀取數(shù)據(jù),數(shù)據(jù)源可以來(lái)自于各種地方,csv文件便是其中之一,下面這篇文章主要給大家介紹了關(guān)于Python?pandas中read_csv參數(shù)詳解的相關(guān)資料,需要的朋友可以參考下2023-01-01
python3使用matplotlib繪制散點(diǎn)圖
這篇文章主要為大家詳細(xì)介紹了python3使用matplotlib繪制散點(diǎn)圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
python在windows和linux下獲得本機(jī)本地ip地址方法小結(jié)
這篇文章主要介紹了python在windows和linux下獲得本機(jī)本地ip地址方法,實(shí)例分析了Python獲得IP地址的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
用Python生成藝術(shù)之分形與算法繪圖實(shí)踐
這篇文章主要介紹了用Python生成藝術(shù)之分形與算法繪圖實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2026-03-03
python開(kāi)發(fā)中module模塊用法實(shí)例分析
這篇文章主要介紹了python開(kāi)發(fā)中module模塊用法,以實(shí)例形式較為詳細(xì)的分析了Python中模塊的功能、定義及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Python?Matplotlib繪制箱線圖boxplot()函數(shù)詳解
箱線圖一般用來(lái)展現(xiàn)數(shù)據(jù)的分布(如上下四分位值、中位數(shù)等),同時(shí)也可以用箱線圖來(lái)反映數(shù)據(jù)的異常情況,下面這篇文章主要給大家介紹了關(guān)于Python?Matplotlib繪制箱線圖boxplot()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-07-07
python實(shí)現(xiàn)跨進(jìn)程(跨py文件)通信示例
本文主要介紹了python實(shí)現(xiàn)跨進(jìn)程(跨py文件)通信示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
python實(shí)現(xiàn)SMTP郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)SMTP郵件發(fā)送功能的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
flask-socketio實(shí)現(xiàn)WebSocket的方法
這篇文章主要介紹了flask-socketio實(shí)現(xiàn)WebSocket的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

