Linux怎么在无图形环境下利用脚本批量给PDF文件添加水印

阿敏君_5949

阿敏君_5949

2026-10-29

465人浏览

原创

pdf-stamp是Linux无图形环境下批量加PDF水印的首选方案,因其纯二进制、无依赖、支持密码PDF及明确错误提示;qpdf+ImageMagick为备选,需分步处理且对PNG水印图尺寸和-density参数有严格要求。

linux怎么在无图形环境下利用脚本批量给pdf文件添加水印

Linux 无图形环境下无法用 GUI 工具(如福昕、星优)批量加 PDF 水印,必须走命令行方案;pdf-stamp 和 qpdf+ImageMagick 是唯二真正可行的离线、无依赖、可脚本化的组合,其他所谓“Python 脚本”在无 X11 的服务器上常因 reportlab 渲染失败或字体缺失直接报错。

为什么不用 PyPDF2 + reportlab?

看似最“标准”,实则在 headless Linux 环境下高频踩坑:

  • reportlab.pdfgen.canvas.Canvas 默认依赖系统字体缓存,若未预装 fonts-dejavu 或未手动指定 .ttf 路径,会静默回退到位图字体,导致中文乱码或水印不显示
  • 生成水印页时需调用 save() 写入临时 PDF,但该文件若被并发写入(如 for 循环中未加锁),极易出现 PDFSyntaxError: Invalid PDF header
  • PyPDF2 的 mergePage() 对加密 PDF 兼容性差,遇到带 owner password 的文件直接抛 NotImplementedError,且不提示原因

推荐方案:pdf-stamp 命令行工具

pdf-stamp 是专为服务端设计的轻量工具,纯二进制,无 Python/Java 运行时依赖,支持文字/图片水印、透明度、角度、平铺,且对密码保护 PDF 有明确错误提示。

安装与使用:

  • 下载静态二进制:wget https://github.com/junegunn/pdf-stamp/releases/download/v0.4.0/pdf-stamp_0.4.0_linux_amd64.tar.gz
  • 解压并赋予执行权限:tar -xzf pdf-stamp_0.4.0_linux_amd64.tar.gz && chmod +x pdf-stamp
  • 添加文字水印(45°倾斜、30%透明、居中平铺):./pdf-stamp -t "CONFIDENTIAL" -a 45 -o 0.3 -p "all" input.pdf -o output.pdf
  • 批量处理所有 PDF:for f in *.pdf; do ./pdf-stamp -t "INTERNAL" -a 40 -o 0.35 -p "all" "$f" -o "${f%.pdf}_watermarked.pdf"; done

注意:-p "all" 必须显式指定,否则默认只处理第一页;-o 0.35 中的 0.35 是浮点值,不能写成 35%,否则解析失败。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载

备选方案:qpdf + ImageMagick 组合(需额外步骤)

当 pdf-stamp 不适用(如需自定义 PNG 水印图),可用此链式流程,但必须分三步走,不可合并为单条命令:

  • 先用 qpdf 拆出每页为独立 PDF:qpdf --split-pages input.pdf split/
  • 用 convert 将每页转为 PNG,叠加水印图,再转回 PDF:convert page-0001.pdf -gravity center -density 150 watermark.png -composite -quality 90 page-0001_watermarked.pdf
  • 最后用 pdfunite 合并:pdfunite split/page-*-watermarked.pdf output.pdf

关键限制:convert 处理 PDF 页时必须加 -density 150,否则文字边缘严重锯齿;watermark.png 必须是透明背景、尺寸 ≥ A4 像素(如 2480×3508),否则平铺后留白或拉伸变形。

真正容易被忽略的是 PDF 加密状态——无论用哪种命令行工具,只要源文件带 owner password,就必须先用 qpdf --decrypt input.pdf decrypted.pdf 解密,否则所有工具都静默跳过或报错退出,不会主动提示“文件被加密”。

相关文章

极轻PDF
极轻PDF

专业的在线PDF工具,支持PDF编辑、转换、合并、压缩等多种功能,操作简单,处理高效,满足日常办公与学习中的PDF处理需求。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4290

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3633

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2873

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

7070

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6702

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3853

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3345

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3579

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.9万人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习