Python办公之——PDF添加水印

专栏导读

  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏

  • ❤️ 欢迎各位佬关注! ❤️

库的介绍

  • ReportLab是一个功能强大的Python库,专门用于生成PDF文档。它提供了丰富的API,允许用户创建包含文本、图像、表格、图表等复杂内容的PDF文件。以下是对ReportLab的详细介绍

特点与优势

功能丰富:ReportLab支持在PDF文件中添加文本、图像、表格、图表等多种元素,满足复杂的文档生成需求。
灵活性强:用户可以通过编程的方式完全控制文档的生成过程,实现高度定制化的需求。
广泛应用:ReportLab广泛应用于报告生成、数据可视化、电子表格、图表等领域,是Python社区中非常受欢迎的PDF生成工具之一。
跨平台性:ReportLab可以在多个平台上运行,并且支持Python 2和Python 3,确保了在不同环境下的兼容性。 完善的文档:ReportLab提供了详细的文档和示例,方便用户学习和使用。

主要功能

文本处理:用户可以设置字体、字号、颜色、位置等属性,在PDF文件中添加文本内容。
图像处理:支持将图像插入到PDF文件中,并可以设置图像的位置、大小等属性。
表格生成:提供了Table和TableStyle类,用于创建复杂且样式丰富的表格。用户可以定义表格的列宽、边框、背景色等样式。
图表绘制:虽然ReportLab本身不直接提供图表绘制功能,但可以通过与其他库(如matplotlib)结合使用,将图表作为图像插入到PDF文件中。
页面设置:用户可以自定义页面的大小、边距等属性,以满足不同的文档布局需求。

库的安装

pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple/

1、示例代码(创建空白PDF)

from reportlab.pdfgen import canvas  
  
# 创建一个PDF文件对象  
c = canvas.Canvas("example.pdf")  
  
# 设置字体和字号  
c.setFont("Helvetica", 12)  
  
# 添加文本到PDF文件  
c.drawString(100, 750, "Hello, ReportLab!")  
  
# 保存PDF文件  
c.save()

2、添加水印

  • 引入本地电脑支持的字体,注册字体类
  • Windows 电脑中,字体默认保存在 C:\Windows\Fonts\,文件后缀为 .ttf,在其中找到想要想要生成的字体路径,填入上述代码片段对应位置。

在这里插入图片描述

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

# 注册字体,注意修改字体文件路径为你的系统中的实际路径
font_path = "C:\\Windows\\Fonts\\simkai.ttf"
pdfmetrics.registerFont(TTFont('simkai', font_path))

cm = 1

def create_watermark(watermark_text='python-小庄办公', font_size=15, pagesize=A4):
    watermark_canvas = canvas.Canvas("watermark.pdf", pagesize=pagesize)
    watermark_canvas.setFont("simkai", font_size)
    watermark_canvas.setFillAlpha(0.1) # 设置透明度,1为不透明
    # 正确地计算并传递两个参数给 translate 方法
    watermark_canvas.translate(A4[0]/2, A4[1]/2)
    watermark_canvas.rotate(30) # 水印旋转角度
    for i in range(5):
        for j in range(10):
            a = (i - 2) * A4[0] / 5
            b = (j - 4) * A4[1] / 10
            watermark_canvas.drawString(a, b, watermark_text)
    watermark_canvas.save()

create_watermark()

在这里插入图片描述

在这里插入图片描述

其余关于 PDF 的文章

文章名称文章链接
Python-读取PDF之—PyPDF2https://blog.youkuaiyun.com/weixin_42636075/article/details/140610700
python将众多PDF合并为一个PDF文件中(反之拆分)https://blog.youkuaiyun.com/weixin_42636075/article/details/140607498
Python—PDFMiner(办公篇-提取PDF内容)https://blog.youkuaiyun.com/weixin_42636075/article/details/138918126
Python提取PDF中的图片并保存https://blog.youkuaiyun.com/weixin_42636075/article/details/138930606
Python提取PDF中的表格写入Excelhttps://blog.youkuaiyun.com/weixin_42636075/article/details/137219634
Python+docx2pdf批量将word转pdfhttps://blog.youkuaiyun.com/weixin_42636075/article/details/136410808
Python-pdfplumber读取PDF所有内容并自行提取指定内容https://blog.youkuaiyun.com/weixin_42636075/article/details/128655337

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

### 如何在 PDF 文件中添加水印 #### 使用 Python 的 PyPDF2 库 PyPDF2 是一种强大的库,可以用来操作 PDF 文件。它支持将另一个 PDF 文件作为水印应用到目标 PDF 上[^1]。以下是具体实现方式: ```python from PyPDF2 import PdfReader, PdfWriter def add_watermark(input_pdf_path, watermark_pdf_path, output_pdf_path): reader_input = PdfReader(input_pdf_path) reader_watermark = PdfReader(watermark_pdf_path) writer_output = PdfWriter() first_page_of_watermark = reader_watermark.pages[0] for page_num in range(len(reader_input.pages)): current_page = reader_input.pages[page_num] current_page.merge_page(first_page_of_watermark) writer_output.add_page(current_page) with open(output_pdf_path, 'wb') as file: writer_output.write(file) add_watermark('original.pdf', 'watermark.pdf', 'output_with_watermark.pdf') ``` 此代码片段展示了如何载两个 PDF 文件并将其中一个作为水印合并到另一文件上。 --- #### 使用 iTextSharp(C#) iTextSharp 是 C# 开发者常用的工具之一,能够轻松处理复杂的文档编辑需求。下面是一个简单的例子展示如何向 PDF 添加文本水印[^2]: ```csharp using System; using iText.Kernel.Geom; using iText.Kernel.Pdf; using iText.Layout; using iText.Layout.Element; class Program { static void Main(string[] args) { string inputPath = "input.pdf"; string outputPath = "output_with_watermark.pdf"; using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPath), new PdfWriter(outputPath))) { Document document = new Document(pdfDoc); foreach(PdfPageBase page in pdfDoc.GetPages()) { Rectangle pageSize = page.GetPageSize(); Canvas canvas = new Canvas(page.NewContentStreamBefore(), pdfDoc); Paragraph paragraph = new Paragraph("Confidential Watermark").SetFontColor(ColorConstants.RED).SetFontSize(60); Div div = new Div().Add(paragraph).SetRotationAngle(Math.PI / 4); float x = (pageSize.GetWidth() - div.GetWidth()) / 2; float y = (pageSize.GetHeight() - div.GetHeight()) / 2; canvas.Add(div.SetFixedPosition(x, y)); } } } } ``` 这段代码会遍历每一页,并在其上放置旋转后的红色文本水印。 --- #### Java 实现方案 对于 Java 用户来说,Apache PDFBox 是一个不错的选择。它可以方便地读取、写入以及修改现有的 PDF 文档[^3]。下面是具体的实现方法: ```java import org.apache.pdfbox.pdmodel.*; import org.apache.pdfbox.pdmodel.graphics.color.PDColor; import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import java.awt.Color; import java.io.File; import java.io.IOException; public class AddWatermarkToPDF { public static void main(String[] args) throws IOException { PDDocument doc = null; try { doc = PDDocument.load(new File("input.pdf")); PDPageContentStream contentStream = new PDPageContentStream(doc, doc.getPage(0), PDPageContentStream.AppendMode.APPEND, true, true); contentStream.beginText(); // 设置字体颜色为灰色透明度较低的颜色 PDColor color = new PDColor(new float[]{0.9f}, PDDeviceRGB.INSTANCE); contentStream.setNonStrokingColor(color.getComponents()); contentStream.setFont(PDType1Font.HELVETICA_BOLD, 50); contentStream.newLineAtOffset(200, 400); contentStream.showText("CONFIDENTIAL"); contentStream.endText(); contentStream.close(); doc.save("output_with_watermark.pdf"); } finally { if (doc != null) { doc.close(); } } } } ``` 该程序会在第一页中间位置打印 CONFIDENTIAL 字样作为水印。 --- #### 工具推荐 除了编程手段外,还有一些专门设计好的软件可以直接完成这项工作而无需编写任何脚本。例如 Adobe Acrobat Pro DC 就内置有批量水印的功能;此外还有 Foxit PhantomPDF 和 Nitro PDF Professional 等商业产品也提供了相似特性[^4]。 如果倾向于免费开源解决方案,则可考虑使用 Ghostscript 或 LibreOffice Draw 来间接达到目的——前者允许通过命令行参数指定叠图像层从而形成视觉效果上的“水印”,后者则可以通过绘图模式手动绘制再导出带标记的新副本。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小庄-Python办公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值