【python實用小腳本-194】Python一鍵給PDF加水印:輸入文字秒出防偽文件——再也不用開Photoshop

Python一鍵給PDF加水印:輸入文字秒出防偽文件——再也不用開Photoshop

PDF加水印, 本地腳本, 零會員費, 防偽標記, 瑞士軍刀

故事開場:一把瑞士軍刀救了投標的你

周五下午,你把 100 頁標書 PDF 發給客戶,卻擔心被同行盜用。
想加水印,打開 Photoshop 導出再合并?圖層爆炸,電腦風扇狂轉。
這時,你從桌面掏出“小白瑞士軍刀”——main.py
終端里輸入:

PDF file: bid.pdf
Enter the watermark text here: CONFIDENTIAL - 2024

30 秒后,finalDraft.pdf 生成,每頁都斜著灰字“CONFIDENTIAL - 2024”,盜用者無從下手。
痛點解決:再也不用龐大設計軟件,一句命令給 PDF 打防偽標簽。


完整代碼(≤1000字符,直接展示)

from reportlab.pdfgen import canvas
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from PyPDF2 import PdfFileReader, PdfFileWriterdef make_watermark(text):c = canvas.Canvas("watermark.pdf", pagesize=A4)c.translate(inch, inch)c.setFillColor(colors.grey, alpha=0.6)c.setFont("Helvetica", 50)c.rotate(45)c.drawCentredString(400, 100, text)c.save()def add_watermark(pdf_file):watermark = 'watermark.pdf'merged = "finalDraft.pdf"with open(pdf_file, "rb") as inp, open(watermark, "rb") as wm:reader = PdfFileReader(inp)writer = PdfFileWriter()wm_page = PdfFileReader(wm).getPage(0)for i in range(reader.numPages):page = reader.getPage(i)page.mergePage(wm_page)writer.addPage(page)with open(merged, "wb") as out:writer.write(out)if __name__ == "__main__":text = input("水印文字: ")pdf_file = input("PDF 路徑: ")make_watermark(text)add_watermark(pdf_file)

代碼解析

功能塊 1:快速畫水印

reportlab 三行生成帶旋轉角度的透明水印 PDF,字體大小顏色可調。

c.setFillColor(colors.grey, alpha=0.6)
c.rotate(45)
c.drawCentredString(400, 100, text)

功能塊 2:逐頁合并

PyPDF2 把水印頁當作圖層,循環合并到每一頁,順序不變。

page.mergePage(wm_page)

功能塊 3:零殘留輸出

合并完直接生成 finalDraft.pdf,無臨時文件,干凈清爽。

writer.write(out)

如果還想更厲害

擴展點子 1:批量文件夾

reports/ 里所有 PDF 一鍵加統一水印。

import glob
for pdf in glob.glob("reports/*.pdf"):add_watermark(pdf)

擴展點子 2:GUI拖放+預覽

tkinter 做窗口,拖文件+實時預覽水印位置。

import tkinter.filedialog as fd
pdf_file = fd.askopenfilename()

總結

main.py 這把 30 行瑞士軍刀,把“打開PS→畫水印→導出→合并”四步壓縮成“輸入文字+回車”。
你無需會員、無需聯網,就能把任意 PDF 打上專屬防偽水印。
再加兩行批量或 GUI,它就從腳本升級成版權工廠。
下次再怕文件被轉發,直接跑腳本,30 秒給 PDF 上鎖!


源碼獲取

完整代碼已開源,包含詳細的注釋文檔:
🔗 [GitCode倉庫] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [備用下載] https://pan.quark.cn/s/654cf649e5a6 提取碼:f5VG

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93921.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源 C++ QT Widget 開發(四)文件--二進制文件查看編輯

文章的目的為了記錄使用C 進行QT Widget 開發學習的經歷。臨時學習,完成app的開發。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。 相關鏈接: 開源 C QT Widget 開發(一)工程文件結構-CSDN博客 開源 C…

【密碼學實戰】X86、ARM、RISC-V 全量指令集與密碼加速技術全景解析

前言 CPU 指令集是硬件與軟件交互的核心橋梁,其設計直接決定計算系統的性能邊界與應用場景。在數字化時代,信息安全依賴密碼算法的高效實現,而指令集擴展則成為密碼加速的 “隱形引擎”—— 從服務器端的高吞吐量加密,到移動端的…

2025-08-21 Python進階2——數據結構

文章目錄1 列表(List)1.1 列表常用方法1.2 列表的特殊用途1.2.1 實現堆棧(后進先出)1.2.2 實現隊列(先進先出)1.3 列表推導式1.4 嵌套列表推導式2 del 語句3 元組(Tuple)4 集合&…

告別手工編寫測試腳本!Claude+Playwright MCP快速生成自動化測試腳本

在進行自動化測試時,前端頁面因為頻繁迭代UI 結構常有變動,這往往使得自動化測試的腳本往往“寫得快、廢得也快”,維護成本極高。在大模型之前大家往往都會使用錄制類工具,但錄制類工具生成的代碼靈活性較差、定位方式不太合理只能…

一款更適合 SpringBoot 的API文檔新選擇(Spring Boot 應用 API 文檔)

SpringDoc:Spring Boot 應用 API 文檔生成的現代化解決方案 概述 SpringDoc 是一個專為 Spring Boot 應用設計的開源庫,能夠自動生成符合 OpenAPI 3 規范的 API 文檔。它通過掃描項目中的控制器、方法注解及相關配置,動態生成 JSON/YAML/HTML…

文獻閱讀 250821-When and where soil dryness matters to ecosystem photosynthesis

When and where soil dryness matters to ecosystem photosynthesis 來自 <When and where soil dryness matters to ecosystem photosynthesis | Nature Plants> ## Abstract: Background: Projected increases in the intensity and frequency of droughts in the twen…

React學習(九)

目錄&#xff1a;1.react-進階-antd-新增2.react-進階-antd-刪除選中1.react-進階-antd-新增新增代碼&#xff0c;跟需改的代碼類似&#xff0c;直接copy修改組件代碼進行修改userEffect可以先帶著&#xff0c;沒啥用A6組件用到的函數跟修改的也類似&#xff1a;這個useEffect函…

零基礎從頭教學Linux(Day 17)

三層交換機一、三層交換機的配置1.關于如何配置三層交換機&#xff0c;首先我們應該先創建VLANSwitch>en Switch#vlan database % Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocument…

任務十四 推薦頁面接口開發

一、接口準備 在對接qq音樂接口之前,首先要將之前的項目,一定要記得備份一份; 備份完成之后,首先要在vscode終端安裝axios,這個是請求后端的工具,和之前的ajax一樣,都是請求后端的工具。只不過axios更專業化,跟強大 至于qq音樂接口怎么獲取,一般有兩個途徑,第一個是…

醫療AI與醫院數據倉庫的智能化升級:異構采集、精準評估與高效交互的融合方向(下)

核心功能創新詳解: 統一門戶與角色化工作臺: 統一入口: 用戶通過單一URL登錄,系統根據其角色和權限自動呈現專屬工作臺。 角色化工作臺: 臨床醫生工作臺: 首屏展示常用患者查詢入口、快速統計(如“我的患者檢驗異常趨勢”)、相關臨床文獻推薦、待處理任務(如報告審核)…

數據庫面試常見問題

數據庫 Delete Truncate Drop 區別 答:這三個操作都是針對數據庫的表進行操作,都有刪除表的功能,其中的區別在于: Delete:只將表中的數據進行刪除,不刪除定義不釋放空間,是dml語句,需要提交事務,如果不想刪除可以回滾。delete每次刪除一行,并在事務日志中為所刪除…

用nohup setsid繞過超時斷連,穩定反彈Shell

在We滲透過程中&#xff0c;我們常常會利用目標系統的遠程代碼執行&#xff08;RCE&#xff09;漏洞進行反彈Shell。然而&#xff0c;由于Web服務器&#xff08;如PHP、Python后端&#xff09;的執行環境通常存在超時限制&#xff08;如max_execution_time或進程管理策略&#…

Java設計模式-模板方法模式

Java設計模式-模板方法模式 模式概述 模板方法模式簡介 核心思想&#xff1a;定義一個操作中的算法骨架&#xff08;模板方法&#xff09;&#xff0c;將算法中某些步驟的具體實現延遲到子類中完成。子類可以在不改變算法整體結構的前提下&#xff0c;重定義這些步驟的行為&…

Centos7物理安裝 Redis8.2.0

Centos7物理安裝 Redis8.2.0一、準備依賴環境首先安裝編譯 Redis 所需的依賴&#xff1a;# CentOS/RHEL系統 yum install -y gcc gcc-c make wget 二、下載并編譯 Redis 8.2.0# 1. 下載Redis 8.2.0源碼包 wget https://download.redis.io/releases/redis-8.2.0.tar.gz# 2. 解壓…

牛津大學xDeepMind 自然語言處理(3)

條件語言模型無條件語言模型 概率計算&#xff1a;通過鏈式法則分解為預測下一詞概率&#xff08;將語言建模問題簡化為建模給定前面詞語歷史的下一個詞的概率&#xff09;基于循環神經網絡的無條件語言模型&#xff1a;根據歷史詞語預測下一個詞的概率條件語言模型 定義&#…

Vue2.x核心技術與實戰(一)

目錄 一、Vue2.x:快速上手+插值表達式+指令上 1.1 Vue快速上手 1.1.1 Vue概念 1.1.2 創建實例 1.1.3 插值表達式 { { }} 1.1.4 響應式特性 1.1.5 開發者工具 1.2 Vue指令 1.2.1 v-html 1.2.3 v-show / v-if v-show v-if 1.2.4 v-else / v-else-if 1.2.5 v-on v…

SCAU學習筆記 - 自科三面前端方向實戰演示

本來是準備寫完二面直接開始寫算法三面的&#xff0c;maimai那個封面圖我都做好了。但是可惡的出題人說要等我出完解析再針對性避開出題&#xff0c;所以swan決定把那個先擱置&#xff0c;本文我們先以2023年的自科三面前端方向題為例帶各位快速入門前端三件套&#xff08;因為…

前后端聯合實現文件上傳,實現 SQL Server image 類型文件上傳

1、前端 Vue3QualityFileInfoDialog.vue<script setup lang"ts" name"QualityFile"> ...... // 上傳&#xff0c;防抖 const onUploadClick debounce(() > {// 模擬點擊元素if (fileInputRef.value) {// 重置以允許重復選擇相同文件fileInputRef…

使用安卓平板,通過USB數據線(而不是Wi-Fi)來控制電腦(版本1)

這是一個對延遲和穩定性要求很高的場景。 核心原理是&#xff1a;利用USB數據線&#xff0c;在手機和電腦之間創建一個高速的“虛擬網絡連接”&#xff0c;然后在這個穩定的網絡通道上運行遠程控制軟件。 方案1&#xff1a; 在完全沒有無線網絡&#xff08;Wi-Fi&#xff09;和…

linux報permission denied問題

linux報permission denied問題 一般是沒有可執行權限&#xff0c;需要先添加執行權限 1. 確認文件權限 在你的項目目錄下執行&#xff1a; ls -l ./folder你可能會看到類似&#xff1a; -rw-r--r-- 1 user user 1234 Aug 18 12:00 script.sh注意&#xff1a;這里缺少 x&#xf…