Python如何快速在PDF中添加文字或者圖片水印
在 PDF 文件中添加水印,是保護(hù)文檔內(nèi)容的一種常見方式。無論是為文件加上公司 Logo、版權(quán)聲明,還是保密標(biāo)識,水印都能有效標(biāo)注內(nèi)容歸屬,并提醒讀者注意文檔的機(jī)密性。不過,手動添加水印往往既費(fèi)時又繁瑣。幸運(yùn)的是,在今天的教程中,你將學(xué)習(xí)如何使用 Python 快速為 PDF 添加文字或圖片水印,讓這一切變得簡單高效!
在本篇教程中,我們使用 Spire.PDF for Python 來演示。這是一個專業(yè)的 PDF 庫,可以幫助開發(fā)者高效處理 PDF 相關(guān)的各種任務(wù)。該組件還為小型項(xiàng)目提供了免費(fèi)版,你可以導(dǎo)航到官網(wǎng)進(jìn)行下載。
使用 Python 在 PDF 中添加文字水印
一般來說,水印分為文字和圖片兩種,文字水印多為()類的信息,可以有效....。在 Spire.PDF 中,我們主要使用 Canvas.DrawString() 方法來繪制,通過該方法你可以在 PDF 頁面上的指定位置添加任意文本水印。下面是詳細(xì)的代碼步驟和代碼示例。
一般來說,PDF 水印分為文字水印和圖片水印兩種。文字水印通常用于標(biāo)注文檔屬性或版權(quán)信息,例如“內(nèi)部資料”“版權(quán)所有”等,不僅能起到警示作用,還能有效防止文件被未經(jīng)授權(quán)使用。在 Spire.PDF 中,我們可以通過 Canvas.DrawString() 方法在 PDF 頁面上的指定位置繪制文字,實(shí)現(xiàn)靈活的文本水印效果。接下來我們看看具體的實(shí)現(xiàn)步驟和示例代碼。
在 PDF 中添加文字水印的步驟:
- 創(chuàng)建一個 PdfDocument 類的對象,并加載 PDF 文件。
- 創(chuàng)建 PdfTrueTypeFont 實(shí)例。
- 自定義水印的文本,并指定水印的位置。
- 遍歷所有 PDF 頁面。
- 獲取當(dāng)前頁面。
- 通過 PdfPageBase.Canvas.SetTransparency() 方法設(shè)置水印透明度。
- 使用 PdfPageBase.Canvas.TranslateTransform() 方法將頁面坐標(biāo)系平移到指定位置,并使用 PdfPageBase.Canvas.RotateTransform() 方法將坐標(biāo)系逆時針旋轉(zhuǎn)45度,從而使水印位于頁面中央且逆時針傾斜45度。
- 使用 PdfPageBase.Canvas.DrawString() 方法在頁面上繪制水印文本。
- 將修改后的 PDF 保存為新的文檔。
下方的代碼展示了怎樣在 PDF 文件中添加“禁止復(fù)制”的文本水印:
from spire.pdf import *
from spire.pdf.common import *
import math
# 創(chuàng)建PdfDocument類的對象
pdf = PdfDocument()
# 加載PDF文檔
pdf.LoadFromFile("/input/示例文檔.pdf")
# 創(chuàng)建PdfTrueTypeFont類的對象
font = PdfTrueTypeFont("KaiTi", 48.0, 0, True)
# 指定水印文本并計算水印位置
text = "禁止復(fù)制"
set1 = float (font.MeasureString(text).Width * math.sqrt(2) / 4)
set2 = float (font.MeasureString(text).Height * math.sqrt(2) / 4)
# 遍歷文檔中的頁面
for i in range(pdf.Pages.Count):
# 獲取頁面
page = pdf.Pages.get_Item(i)
# 設(shè)置水印的透明度
page.Canvas.SetTransparency(0.5)
# 將頁面坐標(biāo)系平移至指定位置
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - set1 - set2,
page.Canvas.Size.Height / 2 + set1 - set2)
# 逆時針旋轉(zhuǎn)坐標(biāo)系45度
page.Canvas.RotateTransform(-45.0)
# 在頁面上繪制水印
page.Canvas.DrawString(text, font, PdfBrushes.get_BlueViolet(), 0.0, 0.0)
# 保存文檔
pdf.SaveToFile("/output/文本水印.pdf")
pdf.Close()
添加文本水印后的 PDF 文件預(yù)覽:

通過 Python 在 PDF 中添加圖片水印
圖片水印在實(shí)際工作中的應(yīng)用十分廣泛,比如在報告、發(fā)票或合同中加入公司 Logo、水印背景圖或簽章圖像,不僅能提升文檔的專業(yè)度,還能起到防偽與品牌識別的作用。在 Spire.PDF 中,同樣可以通過 Canvas 類來實(shí)現(xiàn)這一功能。不同于繪制文字水印,這里我們將使用 DrawImage() 方法,將圖片精確地添加到 PDF 頁面中。下面就讓我們看看具體的代碼實(shí)現(xiàn),了解圖片水印是如何被靈活嵌入到 PDF 中的。
在 Python 中添加圖片水印的步驟:
- 創(chuàng)建一個 PdfDocument 類的對象,并加載 PDF 文件。
- 通過 PdfImage.FromFile() 方法加載水印圖片,然后獲取該圖片的寬度和高度。
- 遍歷 PDF 中的每一頁。
- 獲取當(dāng)前頁面。
- 使用 PdfPageBase.Canvas.SetTransparency() 方法設(shè)置水印的透明度。
- 使用 PdfPageBase.Canvas.DrawImage() 方法在頁面中央繪制水印圖像。
- 保存修改后的 PDF 文件。
下方是實(shí)現(xiàn)在 PDF 中添加圖片水印的完整代碼:
from spire.pdf import *
from spire.pdf.common import *
# 創(chuàng)建 PdfDocument 類的對象
pdf = PdfDocument()
# 加載 PDF 文檔
pdf.LoadFromFile("/input/示例文檔.pdf")
# 加載水印圖像
image = PdfImage.FromFile("\禁止.png")
# 獲取圖像的寬度和高度
imageWidth = float(image.Width)
imageHeight = float(image.Height)
# 循環(huán)遍歷文檔中的頁面
for i in range(pdf.Pages.Count):
# 獲取頁面
page = pdf.Pages.get_Item(i)
# 設(shè)置水印的透明度
page.Canvas.SetTransparency(0.3)
# 獲取頁面的寬度和高度
pageWidth = page.ActualSize.Width
pageHeight = page.ActualSize.Height
# 在頁面上繪制水印圖像
page.Canvas.DrawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight)
# 保存文檔
pdf.SaveToFile("/output/圖像水印.pdf")
pdf.Close()
添加圖片水印的 PDF 文件預(yù)覽:

常見問題與解決辦法
問題 1:添加水印后,PDF 文件體積明顯增大?
解決辦法: 如果使用的是高分辨率圖片作為水印,文件體積可能會增加。建議在添加前適當(dāng)壓縮圖片大小,或使用矢量格式的 Logo,以減少文件占用。
問題 2:水印位置不正確或超出頁面范圍?
解決辦法: 檢查繪制水印時設(shè)置的坐標(biāo)參數(shù),確保其位于頁面的有效區(qū)域內(nèi)。可以通過 PdfPageBase.GetClientSize() 方法獲取頁面寬高,根據(jù)尺寸動態(tài)計算合適的水印位置。
問題 3:水印內(nèi)容太明顯,遮擋了正文?
解決辦法: 調(diào)整文字水印的透明度或顏色,使其更柔和。對于圖片水印,可設(shè)置較低的不透明度值(如 0.2~0.4),既能標(biāo)示信息,又不影響閱讀。
問題 4:多頁 PDF 只顯示了部分頁面的水???
**解決辦法: **請確保在循環(huán)中為每一頁都調(diào)用了繪制方法。可通過遍歷 PDF 中的頁面,在每頁的 Canvas 上分別繪制水印,以保證整個文檔的一致性。
問題 5:生成的 PDF 打不開或顯示異常?
**解決辦法: **這通常是由于文件未正確保存或在寫入時被占用造成的。請確認(rèn)保存路徑有效,且在保存之前關(guān)閉其他占用該文件的程序。
總結(jié)
通過以上方法,我們可以輕松地在 PDF 文件中添加文字或圖片水印,無論是用于版權(quán)保護(hù)、信息標(biāo)識,還是提升文件的專業(yè)性。借助 Spire.PDF for Python,你無需繁瑣操作,就能高效實(shí)現(xiàn)各種水印效果,讓文檔管理更加安全、便捷。
到此這篇關(guān)于Python如何快速在PDF中添加文字或者圖片水印的文章就介紹到這了,更多相關(guān)Python PDF添加水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在PyCharm中打包Python項(xiàng)目并將其運(yùn)行到服務(wù)器上的方法(推薦)
在PyCharm中打包Python項(xiàng)目并運(yùn)行到服務(wù)器上,主要步驟包括:創(chuàng)建并設(shè)置項(xiàng)目、編寫項(xiàng)目代碼、打包項(xiàng)目、配置服務(wù)器環(huán)境、上傳可執(zhí)行文件到服務(wù)器以及運(yùn)行項(xiàng)目,通過這些步驟,可以將Python項(xiàng)目打包并部署到服務(wù)器上2024-11-11
python Django里CSRF 對應(yīng)策略詳解
這篇文章主要介紹了python Django里CSRF 對應(yīng)策略詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08
將labelme格式數(shù)據(jù)轉(zhuǎn)化為標(biāo)準(zhǔn)的coco數(shù)據(jù)集格式方式
今天小編就為大家分享一篇將labelme格式數(shù)據(jù)轉(zhuǎn)化為標(biāo)準(zhǔn)的coco數(shù)據(jù)集格式方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python 判斷是否為正小數(shù)和正整數(shù)的實(shí)例
這篇文章主要介紹了python 判斷是否為正小數(shù)和正整數(shù)的實(shí)例的相關(guān)資料,這里提供實(shí)例,實(shí)例注釋說明很清楚,需要的朋友可以參考下2017-07-07
Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解
這篇文章主要為大家介紹了OpenCV中的幾個形態(tài)學(xué)運(yùn)算,例如:腐蝕&膨脹、開&閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算黑帽運(yùn)算,感興趣的可以了解一下2022-04-04
Python學(xué)習(xí)之shell腳本的使用詳解
這篇文章主要為大家分析一個python庫–sh(系統(tǒng)調(diào)用),主要內(nèi)容包括其使用實(shí)例、應(yīng)用技巧、基本知識點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價值,需要的朋友可以參考一下2023-04-04
Python進(jìn)程間通信Queue消息隊(duì)列用法分析
這篇文章主要介紹了Python進(jìn)程間通信Queue消息隊(duì)列用法,結(jié)合實(shí)例形式分析了基于Queue的進(jìn)程間通信相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-05-05

