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解密成功!")
}

性能优化建议

  1. 批量处理:对于大量PDF操作,考虑使用批处理模式
  2. 内存管理:处理大文件时注意内存使用,可以分块处理
  3. 并发处理:对于独立操作可以使用goroutine并行处理

pdfcpu是一个功能强大且高效的PDF处理库,它提供了丰富的API来满足各种PDF处理需求。通过合理使用这些功能,可以轻松实现PDF文档的自动化处理。

更多高级功能和详细配置可以参考pdfcpu的官方文档:https://github.com/pdfcpu/pdfcpu

回到顶部