头图

前言

之前介绍了如何通过Python向PDF添加文本水印。事实上,添加图片水印也同样实用。例如将公司或产品logo添加到文档中,从而提升品牌效应,防止他人随意盗用。或者将图片插入到文档中以注明文档用处或状态。与文本水印类似,添加图片水印时,也可以设置添加单个图片水印或者多个重复水印。下面是以Python平台为例,为PDF添加图片水印的方法介绍。

所需工具

这个程序库支持在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()

    效果图

    image.png

    为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()

    效果图

    image.png


PPPika
1 声望0 粉丝