Go PDF处理利器: github.com/pdfcpu/pdfcpu 深度指南

在 Go 生态中,处理 PDF 文件一直是一个比较复杂的需求,例如:

PDF 合并与拆分 页面裁剪与旋转 添加水印 提取文本或图片 压缩优化 PDF

pdfcpu 是一个功能强大的 Go 开源库,专门用于 PDF 的解析与处理。它不仅功能全面,而且是纯 Go 实现,无需依赖外部工具(如 Ghostscript),非常适合用于服务器程序或跨平台工具开发。


一、pdfcpu 简介

pdfcpu 是一个完整的 PDF 处理解决方案,支持:

PDF 创建 PDF 修改 PDF 校验 PDF 优化 PDF 加密与解密

它既可以作为 Go 库使用,也可以作为 CLI 工具直接使用。

安装方式:

bash 复制代码
go get github.com/pdfcpu/pdfcpu

或者安装命令行工具:

bash 复制代码
go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest

二、基础使用:加载 PDF

在 Go 中使用 pdfcpu,通常从读取配置开始:

go 复制代码
package main

import (
	"github.com/pdfcpu/pdfcpu/pkg/api"
	"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)

func main() {

	conf := pdfcpu.NewDefaultConfiguration()

	_ = conf
}

大部分 API 都需要传入 conf 配置对象。


三、合并 PDF

合并多个 PDF 是最常见需求之一。

go 复制代码
package main

import (
	"github.com/pdfcpu/pdfcpu/pkg/api"
	"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)

func main() {

	conf := pdfcpu.NewDefaultConfiguration()

	files := []string{"a.pdf", "b.pdf", "c.pdf"}

	api.MergeCreateFile(files, "output.pdf", conf)
}

效果:

多个 PDF 合并为一个文件。


四、拆分 PDF

将一个 PDF 按页拆分:

go 复制代码
api.SplitFile("input.pdf", "output_dir", 1, conf)

参数说明:

  • 每 1 页拆分一次
  • 输出到指定目录

适用于:

发票拆分 合同分页 批量处理


五、提取页面

提取指定页生成新 PDF:

go 复制代码
api.ExtractPagesFile("input.pdf", "output.pdf", []string{"1-3", "5"}, conf)

表示提取:

第 1 到 3 页 第 5 页


六、添加水印

pdfcpu 支持文本和图片水印。

添加文本水印:

go 复制代码
wm, _ := pdfcpu.ParseTextWatermarkDetails("CONFIDENTIAL", "rot:45", true)

api.AddWatermarksFile("input.pdf", "output.pdf", nil, wm, conf)

效果:

PDF 页面上出现斜着的水印文字。


七、压缩 PDF

用于减小文件体积:

go 复制代码
api.OptimizeFile("input.pdf", "output.pdf", conf)

适用于:

上传优化 存储节省 网络传输


八、加密与解密

加密 PDF:

go 复制代码
conf.UserPW = "1234"
conf.OwnerPW = "admin"

api.EncryptFile("input.pdf", "output.pdf", conf)

解密 PDF:

go 复制代码
conf.UserPW = "1234"

api.DecryptFile("input.pdf", "output.pdf", conf)

适用于:

文档保护 权限控制


九、旋转页面

go 复制代码
api.RotateFile("input.pdf", "output.pdf", 90, []string{"1-"}, conf)

表示:

从第 1 页开始全部旋转 90 度。


十、裁剪页面

go 复制代码
api.CropFile("input.pdf", "output.pdf", []string{"1-"}, "10 10 500 700", conf)

用于裁剪页面区域。


十一、CLI 使用(非常实用)

pdfcpu 也提供命令行工具,非常适合日常使用。

合并 PDF:

bash 复制代码
pdfcpu merge out.pdf a.pdf b.pdf

拆分:

bash 复制代码
pdfcpu split in.pdf outdir

压缩:

bash 复制代码
pdfcpu optimize in.pdf out.pdf

添加水印:

bash 复制代码
pdfcpu watermark add "CONFIDENTIAL" in.pdf out.pdf

非常适合做批处理工具。


十二、实际开发场景

在真实项目中,pdfcpu 常见应用包括:

文档管理系统(PDF 合并/拆分) 在线合同处理 发票系统 电子书处理 PDF 压缩服务 自动水印系统

例如一个简单的 PDF 合并服务:

go 复制代码
func mergePDF(files []string, output string) error {
	conf := pdfcpu.NewDefaultConfiguration()
	return api.MergeCreateFile(files, output, conf)
}

十三、优缺点分析

优点:

纯 Go 实现,无依赖 功能全面(几乎覆盖 PDF 常见需求) 支持 CLI + API 跨平台(Windows / macOS / Linux)

缺点:

API 相对复杂 文档不算特别友好 部分高级功能学习成本较高


十四、与其他库对比

常见 PDF 库:

pdfcpu(纯 Go,功能全) unidoc(商业库,功能更强) gofpdf(生成 PDF,不擅长修改)

总结:

  • 如果你需要 修改 PDF → pdfcpu
  • 如果你需要 生成 PDF → gofpdf
  • 如果你需要 企业级功能 → unidoc

总结

pdfcpu 是 Go 生态中最强大的 PDF 处理库之一,适用于各种 PDF 操作场景。

核心能力包括:

PDF 合并与拆分 页面提取与裁剪 水印添加 压缩优化 加密解密

它既可以用于后端服务开发,也可以用于构建 CLI 工具,是 Go 开发者处理 PDF 的首选方案之一。

如果你的项目涉及:

文件处理系统 文档自动化 批量办公工具 PDF 在线服务

那么 pdfcpu 基本可以一站式解决需求。


相关推荐
审判长烧鸡6 小时前
Go结构体与指针【3】自动解引用
go·指针·结构体·自动解引用
古城小栈6 小时前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
keep one's resolveY7 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
审判长烧鸡7 小时前
【GO VS PHP】之 指针/引用传递
go·php·指针·引用传递
女生也可以敲代码8 小时前
AI时代下的50道前端开发面试题:从基础到大模型应用
前端·面试
阿丰资源8 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
IT_陈寒8 小时前
SpringBoot自动配置的坑差点让我加班到天亮
前端·人工智能·后端
审判长烧鸡9 小时前
GO错误处理【4】报错即链条
go·异常处理·错误处理
消失的旧时光-19439 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
Cosolar10 小时前
告别无脑循环:深入解析 ReWOO 与 Plan-and-Execute Agent 架构
人工智能·面试·全栈