Golang PDFCPU库使用教程
最近在学习Golang处理PDF文件,看到有PDFCPU这个库但不太会用。请问有没有详细的使用教程?比如如何用这个库拆分、合并PDF文件?还有这个库支持添加水印和加密吗?希望能分享一些实际代码示例和常见问题的解决方案。
2 回复
屌丝程序员来啦!Golang PDFCPU库确实好用,简单几步就能操作PDF:
-
安装:
go get github.com/pdfcpu/pdfcpu/pkg/api -
常用操作:
- 合并PDF:
api.MergeFile([]string{"1.pdf", "2.pdf"}, "merged.pdf", nil) - 拆分PDF:
api.SplitFile("input.pdf", "outputDir", 3, nil) - 提取页面:
api.ExtractPagesFile("input.pdf", "output.pdf", []string{"1-3"}, nil) - 加密:
api.EncryptFile("input.pdf", "output.pdf", "密码", nil)
- 核心技巧:
- 用
pdfcpu.ReadContext读取配置 - 错误处理别忘加
if err != nil - 批量操作记得用goroutine加速
记得看官方文档,示例很全。这库性能不错,处理百兆PDF内存占用也很稳,适合做自动化工具。先跑个demo试试水!
更多关于Golang PDFCPU库使用教程的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang PDFCPU 库使用教程
PDFCPU 是一个用 Go 语言编写的强大 PDF 处理库,支持多种 PDF 操作功能。
安装
go get github.com/pdfcpu/pdfcpu/pkg/api
基本使用
1. 合并 PDF 文件
package main
import (
"github.com/pdfcpu/pdfcpu/pkg/api"
)
func main() {
inFiles := []string{"file1.pdf", "file2.pdf"}
outFile := "merged.pdf"
err := api.MergeFile(inFiles, outFile, nil)
if err != nil {
panic(err)
}
}
2. 分割 PDF 文件
func splitPDF() {
inFile := "input.pdf"
outDir := "./output"
// 按页数分割
err := api.SplitFile(inFile, outDir, 1, nil)
if err != nil {
panic(err)
}
}
3. 提取页面
func extractPages() {
inFile := "input.pdf"
outFile := "extracted.pdf"
selectedPages := []string{"1-3", "5"} // 提取第1-3页和第5页
err := api.ExtractPagesFile(inFile, outFile, selectedPages, nil)
if err != nil {
panic(err)
}
}
4. 添加水印
func addWatermark() {
inFile := "input.pdf"
outFile := "watermarked.pdf"
wm := api.Watermark{
Text: "CONFIDENTIAL",
FontName: "Helvetica",
Size: 24,
Color: "#FF0000",
Opacity: 0.5,
}
err := api.AddWatermarksFile(inFile, outFile, nil, wm, nil)
if err != nil {
panic(err)
}
}
5. 加密 PDF
func encryptPDF() {
inFile := "input.pdf"
outFile := "encrypted.pdf"
conf := api.NewAES256Configuration("userpass", "ownerpass", nil)
conf.Permissions = api.PermissionsNone
err := api.EncryptFile(inFile, outFile, conf)
if err != nil {
panic(err)
}
}
6. 获取 PDF 信息
func getPDFInfo() {
inFile := "input.pdf"
info, err := api.InfoFile(inFile, nil, nil)
if err != nil {
panic(err)
}
fmt.Printf("页数: %d\n", info.PageCount)
fmt.Printf("文件大小: %d bytes\n", info.FileSize)
fmt.Printf("PDF版本: %s\n", info.PDFVersion)
}
配置选项
import "github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
// 创建配置
conf := pdfcpu.NewDefaultConfiguration()
conf.ValidationMode = pdfcpu.ValidationRelaxed
// 在 API 调用中使用配置
err := api.MergeFile(inFiles, outFile, conf)
错误处理
建议对所有操作进行错误处理:
if err != nil {
switch err.(type) {
case pdfcpu.ErrCorruptedPDF:
fmt.Println("PDF 文件损坏")
case pdfcpu.ErrEncryptedPDF:
fmt.Println("PDF 已加密")
default:
fmt.Printf("错误: %v\n", err)
}
return
}
PDFCPU 库功能丰富,还支持旋转页面、添加书签、表单处理等高级功能。查看官方文档获取完整功能列表:https://github.com/pdfcpu/pdfcpu

