golang高效PDF文档处理插件库pdfcpu的使用
Golang高效PDF文档处理插件库pdfcpu的使用
pdfcpu是一个用Go语言编写的PDF处理库,支持加密功能,并提供API和命令行接口(CLI)。它兼容所有PDF版本,并对PDF 2.0(ISO-32000-2)提供基本支持和持续改进。
主要特点
- 支持批处理和脚本化的命令行接口
- 简化Go后端系统中的PDF处理集成
- 提供丰富的PDF操作功能集
功能命令集
pdfcpu支持以下PDF操作命令:
- 注释(annotations)
- 附件(attachments)
- 小册子制作(booklet)
- 书签(bookmarks)
- 边框(boxes)
- 证书(certificates)
- 修改所有者密码(change owner password)
- 修改用户密码(change user password)
- 收集(collect)
- 配置(config)
- 创建(create)
- 裁剪(crop)
- 切割(cut)
- 解密(decrypt)
- 加密(encrypt)
- 提取(extract)
- 字体(fonts)
- 表单(form)
- 网格(grid)
- 图像(images)
- 导入(import)
- 信息(info)
- 关键词(keywords)
- 合并(merge)
- 多页合并(ndown)
- 多页排列(nup)
- 优化(optimize)
- 页面布局(pagelayout)
- 页面模式(pagemode)
- 页面操作(pages)
- 权限(permissions)
- 文件夹(portfolio)
- 海报(poster)
- 属性(properties)
- 调整大小(resize)
- 旋转(rotate)
- 签名(signatures)
- 拆分(split)
- 盖章(stamp)
- 修剪(trim)
- 验证(validate)
- 查看器偏好(viewerpref)
- 水印(watermark)
- 缩放(zoom)
安装方法
使用Go Modules安装
$ git clone https://github.com/pdfcpu/pdfcpu
$ cd pdfcpu/cmd/pdfcpu
$ go install
$ pdfcpu version
或者直接通过Go install安装:
$ go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest
使用Homebrew安装(macOS)
$ brew install pdfcpu
$ pdfcpu version
使用DNF/YUM安装(Fedora)
$ sudo dnf install golang-github-pdfcpu
$ pdfcpu version
在Docker容器中运行
$ docker build -t pdfcpu .
# 将当前主机文件夹挂载到容器中作为/app,以处理本地主机文件夹中的文件
$ docker run -it -v "$(pwd)":/app pdfcpu validate a.pdf
使用示例
下面是一个使用pdfcpu库的Go代码示例,展示如何合并多个PDF文件:
package main
import (
"fmt"
"os"
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)
func main() {
// 设置输入和输出文件路径
inFiles := []string{"file1.pdf", "file2.pdf"}
outFile := "merged.pdf"
// 设置合并配置
conf := pdfcpu.NewDefaultConfiguration()
// 合并PDF文件
err := api.MergeCreateFile(inFiles, outFile, conf)
if err != nil {
fmt.Printf("合并PDF失败: %v\n", err)
os.Exit(1)
}
fmt.Printf("成功合并PDF到: %s\n", outFile)
}
另一个示例,展示如何为PDF添加水印:
package main
import (
"fmt"
"os"
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)
func main() {
// 输入和输出文件
inFile := "input.pdf"
outFile := "output_with_watermark.pdf"
watermarkText := "CONFIDENTIAL"
// 创建水印配置
wm, err := pdfcpu.ParseTextWatermarkDetails(watermarkText, "sc:0.5, pos:bc, rot:0", true)
if err != nil {
fmt.Printf("创建水印配置失败: %v\n", err)
os.Exit(1)
}
// 应用水印
err = api.AddWatermarksFile(inFile, outFile, nil, wm, nil)
if err != nil {
fmt.Printf("添加水印失败: %v\n", err)
os.Exit(1)
}
fmt.Printf("成功添加水印到: %s\n", outFile)
}
注意事项
- pdfcpu仍处于Alpha阶段,可能会进行重大更改
- 请始终确保基于最新提交进行工作
- 如果遇到崩溃,请使用
pdfcpu validate -vv
命令生成详细日志以便排查问题 - 使用pdfcpu时请确保尊重所有PDF内容的版权
pdfcpu是一个功能强大且不断发展的PDF处理库,非常适合需要批量处理PDF或在Go应用程序中集成PDF功能的场景。
更多关于golang高效PDF文档处理插件库pdfcpu的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang高效PDF文档处理插件库pdfcpu的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用pdfcpu高效处理PDF文档
pdfcpu是一个用Go编写的强大PDF处理库,它提供了丰富的功能来处理PDF文档,包括合并、拆分、加密、解密、添加水印等操作。下面我将介绍pdfcpu的主要功能并提供示例代码。
安装pdfcpu
首先安装pdfcpu库:
go get github.com/pdfcpu/pdfcpu/pkg/api
go get github.com/pdfcpu/pdfcpu/pkg/pdfcpu
基本功能示例
1. 合并PDF文件
package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
)
func main() {
// 输入文件列表
inputFiles := []string{"file1.pdf", "file2.pdf"}
// 输出文件
outputFile := "merged.pdf"
// 合并PDF
if err := api.MergeCreateFile(inputFiles, outputFile, nil); err != nil {
fmt.Printf("合并PDF失败: %v\n", err)
return
}
fmt.Println("PDF合并成功!")
}
2. 拆分PDF文件
package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
)
func main() {
inputFile := "input.pdf"
outputDir := "./split_pages"
// 按页拆分PDF
if err := api.SplitFile(inputFile, outputDir, 1, nil); err != nil {
fmt.Printf("拆分PDF失败: %v\n", err)
return
}
fmt.Println("PDF拆分成功!")
}
3. 提取PDF页面
package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
)
func main() {
inputFile := "input.pdf"
outputFile := "extracted.pdf"
// 选择要提取的页面(例如提取1-3页)
selectedPages := []string{"1-3"}
if err := api.ExtractPagesFile(inputFile, outputFile, selectedPages, nil); err != nil {
fmt.Printf("提取页面失败: %v\n", err)
return
}
fmt.Println("页面提取成功!")
}
高级功能示例
4. 添加水印
package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
)
func main() {
inputFile := "input.pdf"
outputFile := "watermarked.pdf"
watermarkText := "CONFIDENTIAL"
// 配置水印
wm, err := pdfcpu.ParseTextWatermarkDetails(watermarkText, "scale:0.5, rot:45, op:0.5", true)
if err != nil {
fmt.Printf("创建水印失败: %v\n", err)
return
}
// 添加水印
if err := api.AddWatermarksFile(inputFile, outputFile, nil, wm, nil); err != nil {
fmt.Printf("添加水印失败: %v\n", err)
return
}
fmt.Println("水印添加成功!")
}
5. 加密PDF文件
package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
)
func main() {
inputFile := "input.pdf"
outputFile := "encrypted.pdf"
password := "secret123"
// 配置加密选项
conf := api.NewAESConfiguration(password, password, 256)
// 加密PDF
if err := api.EncryptFile(inputFile, outputFile, conf); err != nil {
fmt.Printf("加密PDF失败: %v\n", err)
return
}
fmt.Println("PDF加密成功!")
}
6. 解密PDF文件
package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
)
func main() {
inputFile := "encrypted.pdf"
outputFile := "decrypted.pdf"
password := "secret123"
// 配置解密选项
conf := api.NewAESConfiguration(password, password, 256)
// 解密PDF
if err := api.DecryptFile(inputFile, outputFile, conf); err != nil {
fmt.Printf("解密PDF失败: %v\n", err)
return
}
fmt.Println("PDF解密成功!")
}
性能优化建议
- 批量处理:对于大量PDF操作,考虑使用批处理模式
- 内存管理:处理大文件时注意内存使用,可以分块处理
- 并发处理:对于独立操作可以使用goroutine并行处理
pdfcpu是一个功能强大且高效的PDF处理库,它提供了丰富的API来满足各种PDF处理需求。通过合理使用这些功能,可以轻松实现PDF文档的自动化处理。
更多高级功能和详细配置可以参考pdfcpu的官方文档:https://github.com/pdfcpu/pdfcpu