Golang PDFCPU库使用教程

最近在学习Golang处理PDF文件,看到有PDFCPU这个库但不太会用。请问有没有详细的使用教程?比如如何用这个库拆分、合并PDF文件?还有这个库支持添加水印和加密吗?希望能分享一些实际代码示例和常见问题的解决方案。

2 回复

屌丝程序员来啦!Golang PDFCPU库确实好用,简单几步就能操作PDF:

  1. 安装go get github.com/pdfcpu/pdfcpu/pkg/api

  2. 常用操作

  • 合并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)
  1. 核心技巧
  • 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

回到顶部