Go使用github.com/pdfcpu/pdfcpu处理PDF的操作指南

 更新时间:2026年03月21日 13:44:08   作者:程序员爱钓鱼  
在 Go 生态中,处理 PDF 文件一直是一个比较复杂的需求,pdfcpu 是一个功能强大的 Go 开源库,专门用于 PDF 的解析与处理,本文给大家介绍了Go使用github.com/pdfcpu/pdfcpu处理PDF的操作指南,需要的朋友可以参考下

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

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

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

一、pdfcpu 简介

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

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

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

安装方式:

go get github.com/pdfcpu/pdfcpu

或者安装命令行工具:

go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest

二、基础使用:加载 PDF

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

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 是最常见需求之一。

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 按页拆分:

api.SplitFile("input.pdf", "output_dir", 1, conf)

参数说明:

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

适用于:

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

五、提取页面

提取指定页生成新 PDF:

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

表示提取:

第 1 到 3 页 第 5 页

六、添加水印

pdfcpu 支持文本和图片水印。

添加文本水印:

wm, _ := pdfcpu.ParseTextWatermarkDetails("CONFIDENTIAL", "rot:45", true)

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

效果:

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

七、压缩 PDF

用于减小文件体积:

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

适用于:

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

八、加密与解密

加密 PDF:

conf.UserPW = "1234"
conf.OwnerPW = "admin"

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

解密 PDF:

conf.UserPW = "1234"

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

适用于:

文档保护 权限控制

九、旋转页面

api.RotateFile("input.pdf", "output.pdf", 90, []string{"1-"}, conf)

表示:

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

十、裁剪页面

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

用于裁剪页面区域。

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

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

合并 PDF:

pdfcpu merge out.pdf a.pdf b.pdf

拆分:

pdfcpu split in.pdf outdir

压缩:

pdfcpu optimize in.pdf out.pdf

添加水印:

pdfcpu watermark add "CONFIDENTIAL" in.pdf out.pdf

非常适合做批处理工具。

十二、实际开发场景

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

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

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

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 基本可以一站式解决需求。

以上就是Go使用github.com/pdfcpu/pdfcpu处理PDF的操作指南的详细内容,更多关于Go github.com/pdfcpu/pdfcpu处理PDF的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Gin框架搭建一个Go Web应用程序的方法详解

    使用Gin框架搭建一个Go Web应用程序的方法详解

    在本文中,我们将要实现一个简单的 Web 应用程序,通过 Gin 框架来搭建,主要支持用户注册和登录,用户可以通过注册账户的方式创建自己的账号,并通过登录功能进行身份验证,感兴趣的同学跟着小编一起来看看吧
    2023-08-08
  • go实现冒泡排序算法

    go实现冒泡排序算法

    冒泡排序算法是数据结构中常用的一种算法,本文就介绍了go实现冒泡排序算法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 解决golang 反射interface{}做零值判断的一个重大坑

    解决golang 反射interface{}做零值判断的一个重大坑

    这篇文章主要介绍了解决golang 反射interface{}做零值判断的一个重大坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go语言基础之网络编程全面教程示例

    Go语言基础之网络编程全面教程示例

    这篇文章主要为大家介绍了Go语言基础之网络编程全面教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go语言实现一个Http Server框架(二) Server的抽象

    Go语言实现一个Http Server框架(二) Server的抽象

    上一篇文章对http库的基本使用做了说明,这篇文章主要介绍了如何实现一个简单地httpServer,文中代码示例非常详细,感兴趣的朋友可以参考下
    2023-04-04
  • Golang时间处理中容易踩的坑分析解决

    Golang时间处理中容易踩的坑分析解决

    这篇文章主要为大家介绍了Golang时间处理中容易踩的坑分析解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Go标准库常见错误分析和解决办法

    Go标准库常见错误分析和解决办法

    Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓"工欲善其事,必先利其器",本文将深入剖析Go标准库使用中的常见错误,帮助开发者避开这些坑,写出更加健壮的代码
    2025-04-04
  • PHP结构型模式之组合模式

    PHP结构型模式之组合模式

    这篇文章主要介绍了PHP组合模式Composite Pattern优点与实现,组合模式是一种结构型模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合能让客户端以一致的方式处理个别对象和对象组合
    2023-04-04
  • Go语言超时退出的三种实现方式总结

    Go语言超时退出的三种实现方式总结

    这篇文章主要为大家详细介绍了Go语言中超时退出的三种实现方式,文中的示例代码简洁易懂,对我们深入了解Go语言有一定的帮助,需要的可以了解一下
    2023-06-06
  • Go语言中的访问权限控制

    Go语言中的访问权限控制

    在 go 中进行权限管理时,推荐使用 grouper、casbin 和 sentry 框架,grouper 适合基于角色的访问控制,casbin 提供高级 rbac 功能,而 sentry 提供云托管权限服务和丰富的功能集,包括多因素认证和活动审核,这些框架有助于在电子商务网站等实际场景中实施细粒度的访问控制
    2024-08-08

最新评论