前言
之前介绍了如何通过Python向PDF添加文本水印。事实上,添加图片水印也同样实用。例如将公司或产品logo添加到文档中,从而提升品牌效应,防止他人随意盗用。或者将图片插入到文档中以注明文档用处或状态。与文本水印类似,添加图片水印时,也可以设置添加单个图片水印或者多个重复水印。下面是以Python平台为例,为PDF添加图片水印的方法介绍。
所需工具
- Visual Studio Code
- Spire.PDF for Python
这个程序库支持在Python平台上创建,编辑或者转换PDF文档。目前官方页面上的代码教程还不算完善,建议直接下载Spire.PDF for Python查看示例代码。
准备工作
首先,我们需要在VS Code中安装需要使用到的Spire.PDF for Python库和plum-dispatch v1.7.4。
在这之前请先确认是否已经安装Python。
如果已经安装,继续执行以下步骤即可:
- 打开VS Code,在中搜索到Python并安装。
- 依次选择Explorer - NO FOLRDER OPENED- Open Folder
- 选择一个文件夹,然后在里面新建一个“ .py ”文件。
- 点击Terminal- New Terminal
输入命令:pip install Spire.PDF
为PDF添加单个图片水印
代码简介
首先,创建了一个PdfDocument 实例并加载了一个现有的 PDF 文档。然后遍历这个文档的页面并获取每一页以及其宽度和高度。另外,加载一张水印的图片并获取它的宽度和高度。然后调用PdfPageBase.Canvas.DrawImage()方法在文档每一页的中间绘制一个图片水印。具体细节请参照下面的代码和注释。
示例代码
from spire.pdf import * from spire.pdf.common import * # 创建一个PDF文档实例 pdf = PdfDocument() # 加载一个PDF文档 pdf.LoadFromFile("Sample.pdf") # 加载一张图片 image = PdfImage.FromFile("logo.png") # 获取图片的宽和高 imageWidth = float(image.Width) imageHeight = float(image.Height) # 遍历并获取加载文档的页面 for i in range(pdf.Pages.Count): page = pdf.Pages.get_Item(i) # 设置水印透明度 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("SingleImageWatermark.pdf") pdf.Close()
效果图
为PDF添加多个重复的图片水印
代码简介
整个代码逻辑与上述添加单个水印的相似。不过在绘制多个重复水印时,需要创建一个PdfTilingBrush对象。将图片先绘制到这个画笔上,然后再绘制到页面上。水印的数量可以通过调整对象大小来设置。具体细节请参照下面的代码和注释。
示例代码
from spire.pdf.common import * from spire.pdf import * # 创建一个PDF文档实例 pdf = PdfDocument() # 加载一个PDF文档 pdf.LoadFromFile("Sample.pdf") # 加载一张图片 image = PdfImage.FromFile("logo.png") # 遍历并获取加载文档的页面 for i in range(pdf.Pages.Count): page = pdf.Pages.get_Item(i) # 创建一个PdfTilingBrush类的对象并设置其大小 brush = PdfTilingBrush(SizeF(page.Canvas.Size.Width / float(3), page.Canvas.Size.Height / float(3))) # 设置水印透明度 brush.Graphics.SetTransparency(0.3) brush.Graphics.Save() # 将坐标平移到指定位置 brush.Graphics.TranslateTransform(brush.Size.Width/2 - image.Width/2, brush.Size.Height/2 - image.Height/2) # 在画笔上绘制水印图像 brush.Graphics.DrawImage(image, 0.0, 0.0, float(image.Width), float(image.Height)) brush.Graphics.Restore() # 在页面上绘制水印 page.Canvas.DrawRectangle(brush, RectangleF(PointF(0.0, 0.0), page.Canvas.Size)) # 保存生成的文档 pdf.SaveToFile("RepeatImageWatermark.pdf", FileFormat.PDF) pdf.Close()
效果图
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。