精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何批量給PDF添加水印?

開發(fā)
批量給PDF添加水印的工作如果手動操作肯定要累死人,但是如果用Python來做,就非常簡單,代碼不超過30行。

我們有時候需要把一些機密文件發(fā)給多個客戶,為了避免客戶泄露文件,會在機密文件中添加水印。每個客戶收到的文件內容相同,但是水印都不相同。這樣一來,如果資料泄露了,通過水印就知道是從誰手上泄露的。

今天,一個做市場的朋友找我咨詢PDF加水印的問題,如下圖所示:

他有一個Excel文件,文件里面有10000個經銷商的名字,他要把價目表PDF發(fā)給這些經銷商,每個經銷商收到的PDF文件上面的水印都是這個經銷商自己的名字。

這個需求手動操作肯定要累死人。但是如果用Python來做,就非常簡單。代碼不超過30行。

準備環(huán)境

要完成這個需求,需要安裝兩個模塊,分別叫做reportlab和pikepdf。使用Pip安裝就可以了:

python3 -m pip install reportlab pikepdf

然后,需要找到一個.ttf或者.ttc格式的中文字體。你可以直接從網上下載中文字體文件。也可以使用系統(tǒng)自帶的中文字體。這里以尋找macOS系統(tǒng)默認的宋體為例。

macOS系統(tǒng)字體在/System/Library/Fonts,宋體對應的.ttc文件地址是/System/Library/Fonts/Supplemental/Songti.ttc。對于系統(tǒng)默認的字體,我們只需要知道它的對應的文件名叫做Songti.ttc就可以了。如果是從網上下載的第三方字體,需要使用絕對路徑或者相對于項目代碼的相對路徑。

獲得經銷商名字對應的列表

由于這位朋友不會使用pandas,那么我們就盡量使用Python原生的方法來獲得經銷商名字列表。假設經銷商信息對應的Excel如下圖所示:

我們首先把這個Excel文件導出成csv文件:

然后,我們用Python讀取這個csv文件,獲得經銷商名字列表:

import csv
with open('經銷商信息.csv') as f:
reader = csv.DictReader(f)
name_list = [x['經銷商名字'] for x in reader]

print(name_list)

運行效果如下圖所示:

生成水印PDF

一般來說,我們不能直接把一段文字作為水印添加到另一個PDF文件中。我們只有先把這段文字生成圖片或者生成水印PDF文件,然后把這個圖片或者水印PDF作為『圖層』覆蓋到目標PDF上面。

因此,現在需要給每一個經銷商生成對應的水印PDF文件。這個PDF中只含有水印文字。效果如下圖所示:

對應的代碼create_watermark.py如下:

import csv
from pathlib import Path
from reportlab.lib import units
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont


with open('經銷商信息.csv') as f:
reader = csv.DictReader(f)
name_list = [x['經銷商名字'] for x in reader]

pdfmetrics.registerFont(TTFont('Songti', 'Songti.ttc')) # 加載中文字體

water_mark_folder = Path('water_pdf') # 用一個文件夾存放所有的水印PDF
water_mark_folder.mkdir(exist_ok=True)

for name in name_list:
path = str(water_mark_folder / Path(f'{name}.pdf'))
c = canvas.Canvas(path, pagesize=(200 * units.mm, 200 * units.mm)) # 生成畫布,長寬都是200毫米
c.translate(0.1 * 200 * units.mm, 0.1 * 200 * units.mm)
c.rotate(45) # 把水印文字旋轉45°
c.setFont('Songti', 35) # 字體大小
c.setStrokeColorRGB(0, 0, 0) # 設置字體顏色
c.setFillColorRGB(0, 0, 0) # 設置填充顏色
c.setFillAlpha(0.3) # 設置透明度,越小越透明
c.drawString(0, 0, f'{name}專用價目表,嚴禁泄露!')
c.save()

代碼的具體作用,已經寫到注釋中了。運行以后會在當前項目根目錄生成water_pdf文件夾,里面就是生成的水印PDF。

合并水印與目標PDF

最后一步,把每一個經銷商的水印PDF與目標PDF進行合并。水印PDF作為一個圖層覆蓋到目標PDF上面。

使用pikepdf完成這個工作非常簡單,編寫一個combine.py文件,代碼如下:

import glob
from pathlib import Path
from pikepdf import Pdf, Page, Rectangle


water_pdf_list = glob.glob('water_pdf/*.pdf')
result = Path('result')
result.mkdir(exist_ok=True)

col = 2 # 每頁多少列水印
row = 3 # 每頁多少行水印

for path in water_pdf_list:
target = Pdf.open('./PythonisinstanceGolang.pdf') # 必須每次重新打開PDF,因為添加水印是inplace的操作
file = Path(path)
name = file.stem
water_mark_pdf = Pdf.open(path)
water_mark = water_mark_pdf.pages[0]

for page in target.pages:
for x in range(col): # 每一行顯示多少列水印
for y in range(row): # 每一頁顯示多少行PDF
page.add_overlay(water_mark,
Rectangle(page.trimbox[2] * x / col,
page.trimbox[3] * y / row,
page.trimbox[2] * (x + 1) / col,
page.trimbox[3] * (y + 1) / row))

result_name = Path('result', f'{name}_添加水印.pdf')
target.save(str(result_name))

運行以后,會在項目根目錄生成一個result文件夾,里面就是添加了水印的PDF文件了,如下圖所示:

這里有必要對代碼中的一些地方進行解釋。帶上行號的代碼如下圖所示:

代碼第21行和22行,有兩個for循環(huán),他們的作用是給一個頁面上添加多個水印。請大家注意下圖我畫圈的地方:

每一頁都有6個水印,分成3行2列。其中的3行對應了變量row的值。2列對應了變量col的值。大家也可以根據自己的需要修改這兩個數字。甚至每一頁的水印隨機變換位置,防止被去水印的程序移除。

page.trimbox是PDF頁面的寬度,page.trimbox是PDF頁面的高度。

總結

大家注意在這篇文章中,我把任務分成了三個部分,分別是:

  • Excel轉CSV,讓Python方便讀取
  • Python讀取CSV生成水印PDF
  • 水印PDF與目標PDF文件合并

這三個部分的代碼是可以合并在一個.py文件里面的,但是我沒有這樣做,是考慮到問這個問題的同學不是程序員,Python水平只是入門,如果合并在一起,代碼量多了以后,出問題都不知道錯在哪里。

在計算機領域,所有問題都可以通過把問題拆分成多個部分分別單獨運行或者增加若干個中間層來解決。今天用的方法就是把問題拆分的方法。對于初學者來說,每一步都是相對獨立的,都能立刻看到效果。第二步只需要依賴第一步的結果,第三步只需要依賴第二步的結果,這樣每一步的輸入輸出非常清楚,可以顯著降低問題的復雜度。如果報錯了,也更容易知道是哪個地方有問題。

責任編輯:趙寧寧 來源: 未聞Code
相關推薦

2024-08-01 08:37:46

vue圖片性能

2021-11-09 06:55:03

水印圖像開發(fā)

2024-01-09 16:02:44

Python開源

2025-04-09 08:00:00

2024-03-19 08:35:30

Vue3添加水印維護版權標識

2022-05-13 09:36:06

Python水印命令

2021-04-22 11:27:24

Python命令水印

2023-09-27 12:11:08

Python水印Pillow

2023-08-30 13:24:00

AI工具

2009-11-24 15:43:17

PHP給圖片加水印

2019-08-15 15:00:31

Linux命令行PDF

2025-02-04 10:23:56

C#視頻版權

2009-12-07 15:41:51

PHP圖片加水印

2021-09-02 15:25:54

技術視頻摳圖

2016-09-06 21:09:35

Phpgd庫圖片水印

2020-09-01 16:56:58

華為云

2024-06-12 08:36:32

PyPDF2Python庫文件處理

2023-07-25 09:54:00

谷歌科技

2025-04-08 09:10:00

PillowPython圖像處理

2019-12-19 15:12:37

AI 數據人工智能
點贊
收藏

51CTO技術棧公眾號

久久777国产线看观看精品| 精品久久久中文| 91在线观看免费观看| 国产高清在线免费观看| 日韩丝袜视频| 欧美久久一二三四区| 国产a级片网站| caoporn国产精品免费视频| 狠狠色狠狠色综合系列| 欧美亚洲成人网| 九九精品视频免费| 香蕉视频一区二区三区| 日韩一区二区在线看| 日本三区在线观看| 免费网站在线观看人| 久久亚洲精品国产精品紫薇| 亚洲精品日韩av| 精品久久久久久久久久久久久久久久| 中文字幕免费一区二区| 日韩成人性视频| 成人不卡免费视频| 播放一区二区| 五月激情丁香一区二区三区| 亚洲第一免费网站| 欧美亚洲tv| 亚洲激情 欧美| 自拍日韩亚洲一区在线| 国产高潮在线观看| 三级亚洲高清视频| 久久久亚洲天堂| 激情高潮到大叫狂喷水| 蜜桃一区二区三区| 欧美精品一区二区三区很污很色的 | 日本一区二区三区久久| 亚洲精品1区| 欧美精品在线网站| 国产在线免费av| 国产精品免费大片| 亚洲精品视频二区| 亚洲调教欧美在线| 亚洲天堂资源| 日韩精品dvd| 日韩精品中文字| 国产黑丝在线观看| 91蝌蚪精品视频| 日韩丝袜美女视频| 99日在线视频| 91麻豆精品国产综合久久久| 欧美日韩视频在线第一区 | 国产综合色精品一区二区三区| 日本一区二区三区四区视频| 国产毛片aaa| 99精品视频免费观看视频| 久久久久亚洲精品成人网小说| 免费视频一二三区| 韩国av一区| 久久频这里精品99香蕉| 日本在线观看视频网站| 亚洲国产一区二区三区a毛片| 欧美极品美女视频网站在线观看免费 | 高清欧美性猛交xxxx| 国产精品第二十页| 99在线热播精品免费99热| 97香蕉超级碰碰久久免费软件| 日本三级中文字幕| 免播放器亚洲| 国产不卡视频在线| 中文字幕码精品视频网站| 老色鬼精品视频在线观看播放| 国产欧美亚洲视频| 国产福利视频导航| 99亚偷拍自图区亚洲| 你懂的视频在线一区二区| 国产私拍精品| 自拍偷拍欧美激情| 欧美大黑帍在线播放| 久久男人av资源站| 在线观看国产91| 免费一区二区三区在线观看| 国产精品成人3p一区二区三区| 日韩欧美久久一区| 欧美精品欧美极品欧美激情| 精品国产精品国产偷麻豆| 日韩网站免费观看| 久久精品女人毛片国产| 久久aⅴ乱码一区二区三区| 国产精品亚洲аv天堂网| 国产黄色一级大片| 91麻豆产精品久久久久久| 伊人久久大香线蕉午夜av| 中中文字幕av在线| 色综合色综合色综合色综合色综合| 久久久国产欧美| 亚洲综合影院| 一区二区三区视频观看| 激情五月婷婷小说| 日韩精品视频网站| 99精品99久久久久久宅男| 你懂的免费在线观看视频网站| 欧美激情一区二区三区四区| 国产精品久久久久9999爆乳| 福利视频亚洲| 亚洲国产高清高潮精品美女| 国产美女久久久久久| 国产欧美一区二区三区国产幕精品| 国产精品日韩精品| 人人妻人人玩人人澡人人爽| 国产精品成人一区二区艾草| 国产精品va无码一区二区| 91成人小视频| 亚洲欧美日韩中文在线| 久久精品国产亚洲AV无码麻豆 | 3d动漫精品啪啪一区二区下载| 99久久九九| 欧美一级高清免费播放| 国产特级黄色片| 欧美韩日一区二区三区四区| 1024av视频| 日本伊人久久| 日日狠狠久久偷偷四色综合免费| 中文字幕亚洲精品一区| 国产99精品在线观看| 亚洲一区精品视频| 美女福利一区二区| 日韩大陆欧美高清视频区| 久久久久亚洲av无码专区体验| 老司机午夜精品99久久| 日本一区视频在线观看| 亚洲同志男男gay1069网站| 亚洲成人av在线| 美女视频黄免费| 国产一区二区美女| 影音先锋亚洲视频| 粉嫩av一区二区三区四区五区 | 欧美丰满艳妇bbwbbw| 精品午夜一区二区三区在线观看| 日韩精品另类天天更新| 欧美电影h版| 亚洲人成在线观看| 亚洲 欧美 成人| 91视频你懂的| 日韩av片在线看| 亚洲精品播放| 欧美一级bbbbb性bbbb喷潮片| 亚欧洲精品视频| 欧美日韩在线另类| 亚洲区免费视频| 久久国产高清| 免费在线一区二区| 欧美三区四区| 最近中文字幕日韩精品 | a v视频在线观看| 成人aaaa免费全部观看| 国产成人无码精品久久久性色| 成人看片爽爽爽| 97激碰免费视频| 婷婷亚洲一区二区三区| 欧美视频一二三| 在线观看日本中文字幕| 男人的天堂亚洲一区| 性欧美精品一区二区三区在线播放 | 黄页网站在线| 亚洲国产精品成人一区二区| 日韩乱码一区二区| 久久先锋影音av鲁色资源网| 日本女优爱爱视频| 欧美电影免费播放| 亚洲最大成人在线| а√天堂中文在线资源8| 国产视频亚洲精品| 一级黄色片在线| 亚洲男人的天堂在线aⅴ视频| 亚洲欧洲国产视频| 亚洲免费在线| 亚洲开发第一视频在线播放| 蜜桃精品视频| 97在线观看免费高清| 91caoporm在线视频| 日韩三级中文字幕| 国产成人一级片| 国产精品理伦片| 曰本三级日本三级日本三级| 国产精品久久777777毛茸茸| 亚洲成人18| 中文字幕区一区二区三| 日本电影亚洲天堂| 黄色免费网站在线观看| 欧美精品一区二区三区一线天视频 | 国产精品丝袜一区二区三区| 手机在线免费av| 亚洲欧美国产一本综合首页| 国产又粗又猛又爽| 精品国产91久久久| 亚洲精品自拍视频在线观看| 成人免费观看av| 色戒在线免费观看| 国产精品毛片| 99久re热视频精品98| 精品一区欧美| 懂色中文一区二区三区在线视频| 欧美日韩免费看片| 欧美极品欧美精品欧美视频| 最新电影电视剧在线观看免费观看| 日韩精品一区在线| 中文字幕777| 韩曰欧美视频免费观看| www.色小姐com| 欧美激情中文字幕一区二区| 中文字幕乱码在线| 国产伦精品一区二区三区免费迷| 虎白女粉嫩尤物福利视频| 欧美精品福利| 一区二区三区四区视频在线观看| 丝袜美腿综合| 国产亚洲情侣一区二区无| 精品麻豆剧传媒av国产九九九| 日韩免费精品视频| 阿v视频在线观看| 色与欲影视天天看综合网| 在线观看免费黄视频| 亚洲美女动态图120秒| 亚洲黄色在线免费观看| 欧美日韩精品欧美日韩精品一| 亚洲天堂五月天| 第一福利永久视频精品 | 久久bbxx| 一区二区三区天堂av| 香蕉久久国产av一区二区| 91精品国产品国语在线不卡| 亚洲视频在线观看一区二区| 色天使色偷偷av一区二区| 日韩精品一区二区av| 亚洲蜜桃精久久久久久久| 亚洲女人毛茸茸高潮| 欧美国产视频在线| 国产中年熟女高潮大集合| 92国产精品观看| 国产xxxxxxxxx| 99re这里都是精品| 中文在线观看免费视频| 成人综合婷婷国产精品久久蜜臀| 国产资源中文字幕| 国产麻豆视频精品| 人妻换人妻仑乱| 国产精品一区不卡| 99热这里只有精品2| 国产伦精一区二区三区| 香蕉网在线视频| 国产69精品久久99不卡| 大桥未久恸哭の女教师| 成人午夜视频免费看| 天天躁日日躁狠狠躁免费麻豆| 成人久久视频在线观看| 岛国精品资源网站| 99精品视频一区二区三区| 亚洲精品中文字幕在线播放| 久久蜜桃香蕉精品一区二区三区| 在线免费看黄视频| 亚洲国产高清在线| 激情五月激情综合| 亚洲精品久久久蜜桃| 久久精品国产亚洲AV无码男同 | 中文字幕乱码人妻综合二区三区 | 亚洲国产精品影院| aaa人片在线| 色狠狠一区二区三区香蕉| 亚洲综合成人av| 51精品视频一区二区三区| 亚洲AV无码成人片在线观看| 日韩精品中文在线观看| 成人午夜电影在线观看| 久久精品国产2020观看福利| 秋霞在线视频| 51久久精品夜色国产麻豆| 韩国成人在线| 91精品久久久久久蜜桃| 日本午夜精品| 亚洲视频在线观看日本a| 欧美日韩国内| 成人午夜视频免费在线观看| 久久99精品一区二区三区 | 97aⅴ精品视频一二三区| 国产高清一区二区三区四区| 亚洲欧洲日韩av| 日韩欧美一区二区一幕| 欧美日韩国产电影| 天天干天天舔天天射| 中文国产成人精品| 午夜dj在线观看高清视频完整版 | 韩国三级成人在线| 久久国产精品-国产精品| 久久影院一区| 看av免费毛片手机播放| 极品少妇一区二区三区精品视频| 国产69视频在线观看| 国产精品视频一二三区| 久久久久97国产| 欧美视频在线播放| 全国男人的天堂网| 日韩亚洲欧美成人| www.日韩| 成人高清在线观看| 久久视频国产| 欧美a在线视频| 国产99精品国产| 久久99久久99精品免费看小说| 精品福利视频导航| www香蕉视频| 最新国产精品亚洲| 一个人www视频在线免费观看| 91在线高清视频| 日韩精品四区| 日本精品一区二区三区四区| 国产91高潮流白浆在线麻豆| 日本午夜精品视频| 色八戒一区二区三区| 五月激情六月婷婷| 久久久久久久久久久网站| 福利一区二区| 日韩久久久久久久久久久久久| 亚洲激情专区| 一级黄色大片免费看| 亚洲同性gay激情无套| jizz国产在线| 亚洲精品一区二区在线| 老司机深夜福利在线观看| 99久re热视频这里只有精品6| 水蜜桃精品av一区二区| 黄色免费网址大全| 久久久国产午夜精品| 91九色丨porny丨肉丝| 亚洲成avwww人| 激情av在线| 国产精品国产亚洲精品看不卡15| 午夜激情一区| 深夜福利网站在线观看| 亚洲日本护士毛茸茸| 国产一区二区麻豆| 日韩在线www| 成人动漫视频在线观看| youjizz.com亚洲| 精品一区二区免费视频| а天堂中文在线资源| 欧美日韩国产一级片| 里番在线观看网站| 91精品久久久久久久久中文字幕| 日韩大片在线播放| 在线不卡一区二区三区| 日韩美女久久久| 国产人妻精品一区二区三| 欧美大尺度在线观看| 一区二区亚洲视频| 18禁裸男晨勃露j毛免费观看| 99热国产精品| 亚洲影院在线播放| 一区二区国产精品视频| 国产福利小视频在线观看| 亚洲国产高清aⅴ视频| 国产一级一级国产| 中文字幕日韩精品有码视频| 欧美韩国日本| 日本美女爱爱视频| 大胆亚洲人体视频| av资源免费观看| 欲色天天网综合久久| 国产区一区二| 被灌满精子的波多野结衣| 91首页免费视频| 中文字幕人妻色偷偷久久| 久久天天躁夜夜躁狠狠躁2022| 99国产精品久久一区二区三区| 日韩av三级在线| 日本一区二区久久| 国产xxxxxx| 777777777亚洲妇女| 欧美中文一区二区| 国产黄色一区二区三区| 天天综合天天做天天综合| 成人午夜影视| av免费观看久久| 久热精品在线| 中国一级片在线观看| 亚洲精品成人久久久| 啪啪av大全导航福利综合导航| 国产成人在线小视频| 久久久www成人免费毛片麻豆| 91av久久久| 全球成人中文在线| 亚洲国产成人精品女人| 国产精品jizz| 69久久99精品久久久久婷婷| 韩国精品一区| 日本丰满大乳奶| 国产人妖乱国产精品人妖| 性做久久久久久久久久| 国产精品一区二区久久精品 | 黄色影院一级片| 18成人在线观看| 精品乱码一区二区三四区视频| 7777精品久久久大香线蕉小说|