精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩午夜在线| 欧美亚洲人成在线| 久久久影视传媒| 国产精品a久久久久久| 男女全黄做爰文章| 日韩欧美中文字幕在线视频| 欧美日韩激情美女| 性欧美videosex高清少妇| 国产成人精品无码高潮| 久久国产66| 欧美成人精品在线视频| 99久久人妻无码精品系列| 自拍偷拍亚洲| 欧美日韩午夜视频在线观看| 一区二区不卡在线观看| 熟妇人妻av无码一区二区三区| 老牛影视一区二区三区| 九九热精品视频国产| 免费观看av网站| 欧美欧美在线| 欧美日韩一区二区三区视频| 婷婷五月综合缴情在线视频| 精品孕妇一区二区三区| av一本久道久久综合久久鬼色| 国产精品爽黄69天堂a| 久久久久久久伊人| 这里只有精品在线| 国产一区二区三区在线播放免费观看 | 久久久久久久人妻无码中文字幕爆| 亚洲精品国产嫩草在线观看| 午夜激情久久久| 女女同性女同一区二区三区按摩| 九色在线播放| bt欧美亚洲午夜电影天堂| 91在线播放国产| 69视频免费看| 一区二区三区四区五区在线 | 成年人二级毛片| 中文字幕亚洲影视| 亚洲国模精品一区| 在线中文字日产幕| 日韩激情精品| 欧美一区永久视频免费观看| 爱情岛论坛亚洲首页入口章节| 神马午夜在线视频| 天天综合色天天综合| www.欧美黄色| 91蜜桃在线视频| 一区在线中文字幕| 日韩电影大全在线观看| 免费在线一级视频| 97精品久久久久中文字幕| 超碰97在线资源| 亚洲精品国产suv一区| 国产乱子伦视频一区二区三区 | 国产精品无圣光一区二区| 青青草国产精品| 久久伊伊香蕉| 日本一区二区免费在线观看视频 | 亚洲少妇18p| 国产精品sss在线观看av| 日韩一本二本av| 久久久久国产免费| 美女福利一区| 亚洲精品永久免费精品| 免费视频91蜜桃| 日韩中文欧美| 九九精品在线观看| 成人免费区一区二区三区| 国产精品久久久久久久免费软件 | 99国产精品免费网站| 精品国产电影一区二区| 亚洲av成人精品一区二区三区| 欧美交a欧美精品喷水| 亚洲欧洲高清在线| 四季av中文字幕| 欧美在线精品一区| 国内揄拍国内精品| 亚洲 欧美 中文字幕| 日韩黄色一级片| 91精品视频播放| 午夜美女福利视频| av在线不卡电影| 欧美一区2区三区4区公司二百| 第一福利在线| 亚洲乱码国产乱码精品精的特点| 成年人网站国产| 日本а中文在线天堂| 一本到不卡精品视频在线观看| www.色偷偷.com| 欧美专区视频| 亚洲色图欧美制服丝袜另类第一页 | 国产91精品入| 亚洲欧美一区二区三区四区| 亚洲人与黑人屁股眼交| 亚洲国产日韩欧美一区二区三区| 国产精品成久久久久三级| 国产av无码专区亚洲av| 99国产精品国产精品毛片| 亚洲精品国产精品国自产观看| 成人福利网站| 欧美午夜丰满在线18影院| 亚洲美女性囗交| 天堂俺去俺来也www久久婷婷 | 日韩成人av影视| 欧美夫妻性生活xx| 色av性av丰满av| 国产一区二区三区久久久| 久久精品aaaaaa毛片| 黄色三级视频在线| 亚洲精品大片| 国产午夜精品麻豆| 青青草国产在线观看| 日本中文字幕一区| 国产99午夜精品一区二区三区| 免费黄网站在线观看| 亚洲猫色日本管| 亚洲一级片网站| 中文字幕中文字幕精品| 国模吧一区二区三区| 国产精品一区二区av白丝下载| 久久久综合激的五月天| 成年人网站国产| 久久天堂久久| 不卡av在线网站| 在线观看中文字幕av| 2024国产精品| 精品少妇一区二区三区在线| 中文字幕日韩在线| 久久精品99无色码中文字幕| 国产乡下妇女三片| 国产日韩三级在线| 久久久久狠狠高潮亚洲精品| 久久综合另类图片小说| 久久久日本电影| 亚洲第一视频在线| 亚洲精品伦理在线| 日本一二三四区视频| 99久久综合| 国产这里只有精品| 免费在线观看黄色网| 欧美日韩不卡一区| 日韩一级片在线免费观看| 日韩avvvv在线播放| 亚洲国产精品毛片| 视频精品导航| 亚洲网站在线观看| yjizz国产| ww久久中文字幕| 久久99久久久久久| 视频一区在线| 久久国产精品亚洲| youjizz在线视频| 久久先锋资源网| 日日鲁鲁鲁夜夜爽爽狠狠视频97| www.成人网| 欧美另类老女人| 中文字幕+乱码+中文乱码www| 欧美韩日一区二区三区四区| 成年人黄色片视频| 欧美人妖在线| 国产成+人+综合+亚洲欧洲 | 在线欧美三级| 欧美一区二区三区免费视频| 91久久国产综合| 久久99精品久久久久久| 伊人av成人| 四虎永久精品在线| 久久精品美女视频网站| 国产偷人爽久久久久久老妇app| 日本一区二区久久| www.这里只有精品| 国产精品毛片一区二区在线看| 国产久一一精品| 国产午夜精品久久久久免费视| 精品剧情在线观看| 国产无套粉嫩白浆内谢| 93久久精品日日躁夜夜躁欧美| 5月婷婷6月丁香| 色狼人综合干| 91精品国产自产在线观看永久| 日本中文字幕伦在线观看| 欧美日韩国产一级| 黄色一级片中国| 成人高清免费观看| chinese少妇国语对白| 热久久天天拍国产| 91久久久久久久一区二区| 日本欧美电影在线观看| 亚洲精品国产精品国产自| 中文字幕黄色av| 亚洲精品中文在线| 亚洲男人在线天堂| 麻豆91在线播放| 香蕉视频在线网址| 综合国产视频| 成人黄色免费网站在线观看| 韩国成人免费视频| 亚洲欧美一区二区精品久久久| 中文在线字幕免费观| 亚洲精品日韩一| 久久久国产精品无码| 三级欧美在线一区| 裸体裸乳免费看| 猛男gaygay欧美视频| 91精品国产综合久久香蕉922| 国产精品69xx| 日韩在线视频二区| 手机看片一区二区三区| 欧美日韩三级视频| 午夜偷拍福利视频| 久久久午夜精品理论片中文字幕| 手机av在线网站| 国产精品最新自拍| 一级黄色片播放| 久草在线成人| aa成人免费视频| 校园春色亚洲色图| 欧美激情中文字幕在线| 69av在线| 日韩精品免费一线在线观看| 二区三区在线视频| 精品1区2区3区| 久草视频精品在线| 成人免费在线视频| 你懂得在线视频| 成人免费毛片片v| 国产原创精品在线| 免费永久网站黄欧美| 51xx午夜影福利| 亚洲色图欧美| 亚洲第一在线综合在线| 日韩mv欧美mv国产网站| 亚洲自拍偷拍视频| 欧美aaa大片视频一二区| 国产精品91久久久| 在线免费日韩片| 久久人人看视频| av免费在线免费| 久久成人精品视频| 欧美激情办公室videoshd| 亚洲美女动态图120秒| 蜜桃av噜噜一区二区三区麻豆| 欧美亚洲综合另类| 最新在线中文字幕| 一本大道av伊人久久综合| 日韩精品一区二区三| 一区二区欧美视频| 日本五十熟hd丰满| 亚洲国产日韩一区二区| 黄色一级视频在线观看| 亚洲色图20p| 变态另类ts人妖一区二区| 91女人视频在线观看| 你懂的在线观看网站| 成人av网站在线| 性色av浪潮av| 成人av资源在线| 日韩成人av一区二区| 成人成人成人在线视频| 日韩不卡的av| fc2成人免费人成在线观看播放 | 亚洲欧美国内爽妇网| 五月婷中文字幕| 亚洲精品动漫久久久久| jizz在线观看视频| 中文字幕亚洲专区| 午夜激情在线观看| 欧美成年人视频网站欧美| 草草在线视频| 97视频com| 自拍网站在线观看| 国产精品久久久91| 天堂久久av| 国产精品成人一区二区三区| 欧美激情极品| 日本欧美精品久久久| 天天影视欧美综合在线观看| 综合久久国产| 狠色狠色综合久久| 国产精品免费入口| 精品一二三四区| 香蕉视频免费网站| 久久这里只有精品首页| 国产偷人妻精品一区| 国产精品久久久久久久久免费樱桃 | 波兰性xxxxx极品hd| 亚洲老妇xxxxxx| 日本视频在线观看免费| 欧美亚洲一区二区在线观看| 一级黄色小视频| 精品国产电影一区二区| 岛国视频免费在线观看| 久久久国产影院| 九九精品调教| 青青草99啪国产免费| 国产成人福利夜色影视| 91精品天堂| 国产99久久久国产精品成人免费 | 欧美性猛交 xxxx| 亚洲欧美成人网| 黄页在线观看免费| 国产成人精彩在线视频九色| 国产精品xnxxcom| 国产私拍一区| 欧美黄色免费| 国产激情在线观看视频| 国产在线不卡一区| 手机在线看片日韩| 亚洲自拍偷拍网站| 久久久精品毛片| 日韩无一区二区| 丰满人妻一区二区三区免费视频| 亚洲日本中文字幕免费在线不卡| 免费黄色在线| 日韩免费在线看| 国产精品一区二区精品| 日韩精品久久久毛片一区二区| 欧美日韩免费| 蜜桃免费在线视频| 国产成人激情av| 国产激情无码一区二区三区| 欧美视频在线视频| 性欧美videos另类hd| 亚洲天堂男人天堂| 在线看片福利| www.一区二区三区| 久久精品播放| 一区二区三区免费播放| 北条麻妃国产九九精品视频| 日韩在线视频免费看| 色先锋资源久久综合| 天堂av在线免费观看| 久久综合久久八八| 欧美xnxx| 国产精品区一区二区三在线播放| 亚洲一区欧美| 在线观看av网页| 久久精品人人做人人综合| 天天综合网入口| 日韩美女主播在线视频一区二区三区| 成人亚洲综合天堂| 欧美在线视频在线播放完整版免费观看 | 狼人精品一区二区三区在线| 精品视频在线观看一区二区| 日韩高清在线不卡| xxx在线播放| 狠狠做深爱婷婷久久综合一区| 亚洲精品国产手机| 乱亲女秽乱长久久久| 日本一区二区乱| av磁力番号网| 国产在线精品免费| 欧美做爰啪啪xxxⅹ性| 欧美精品乱人伦久久久久久| 久久77777| 成人做爰www免费看视频网站| 小小影院久久| 五月天激情播播| 综合久久一区二区三区| 91精品中文字幕| 日韩在线小视频| 日本成人在线网站| 国产av不卡一区二区| 国产精品一区二区在线看| 亚洲伦理一区二区三区| 欧美久久久一区| 91精彩视频在线播放| 成人在线免费观看视视频| 国产精品久久久久蜜臀| 亚洲第一区第二区第三区| 亚洲国产精品久久人人爱| 丰满熟女一区二区三区| 久久久久久高潮国产精品视| 97久久超碰| 国产福利一区视频| 欧美国产成人精品| 国产欧美日韩综合精品一区二区三区| 欧美高清在线视频观看不卡| 国产精品主播在线观看| 91九色在线观看视频| 中文字幕精品—区二区四季| 中文字幕乱码无码人妻系列蜜桃| 日韩在线观看免费全集电视剧网站| 欧洲亚洲精品久久久久| 搞av.com| 欧美精彩视频一区二区三区| 91成年人视频| 69av成年福利视频| 日本不卡电影| 1314成人网| 在线一区二区三区四区| 黄色网在线看| 国模一区二区三区私拍视频| 美国三级日本三级久久99| 欧美精品入口蜜桃| 精品偷拍各种wc美女嘘嘘| 日韩成人亚洲| 91成人在线观看喷潮教学| 国产精品毛片无遮挡高清|