Go使用github.com/pdfcpu/pdfcpu處理PDF的操作指南
在 Go 生態(tài)中,處理 PDF 文件一直是一個(gè)比較復(fù)雜的需求,例如:
PDF 合并與拆分 頁(yè)面裁剪與旋轉(zhuǎn) 添加水印 提取文本或圖片 壓縮優(yōu)化 PDF
pdfcpu 是一個(gè)功能強(qiáng)大的 Go 開源庫(kù),專門用于 PDF 的解析與處理。它不僅功能全面,而且是純 Go 實(shí)現(xiàn),無需依賴外部工具(如 Ghostscript),非常適合用于服務(wù)器程序或跨平臺(tái)工具開發(fā)。
一、pdfcpu 簡(jiǎn)介
pdfcpu 是一個(gè)完整的 PDF 處理解決方案,支持:
PDF 創(chuàng)建 PDF 修改 PDF 校驗(yàn) PDF 優(yōu)化 PDF 加密與解密
它既可以作為 Go 庫(kù)使用,也可以作為 CLI 工具直接使用。
安裝方式:
go get github.com/pdfcpu/pdfcpu
或者安裝命令行工具:
go install github.com/pdfcpu/pdfcpu/cmd/pdfcpu@latest
二、基礎(chǔ)使用:加載 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 配置對(duì)象。
三、合并 PDF
合并多個(gè) 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)
}
效果:
多個(gè) PDF 合并為一個(gè)文件。
四、拆分 PDF
將一個(gè) PDF 按頁(yè)拆分:
api.SplitFile("input.pdf", "output_dir", 1, conf)參數(shù)說明:
- 每 1 頁(yè)拆分一次
- 輸出到指定目錄
適用于:
發(fā)票拆分 合同分頁(yè) 批量處理
五、提取頁(yè)面
提取指定頁(yè)生成新 PDF:
api.ExtractPagesFile("input.pdf", "output.pdf", []string{"1-3", "5"}, conf)
表示提?。?/p>
第 1 到 3 頁(yè) 第 5 頁(yè)
六、添加水印
pdfcpu 支持文本和圖片水印。
添加文本水印:
wm, _ := pdfcpu.ParseTextWatermarkDetails("CONFIDENTIAL", "rot:45", true)
api.AddWatermarksFile("input.pdf", "output.pdf", nil, wm, conf)
效果:
PDF 頁(yè)面上出現(xiàn)斜著的水印文字。
七、壓縮 PDF
用于減小文件體積:
api.OptimizeFile("input.pdf", "output.pdf", conf)
適用于:
上傳優(yōu)化 存儲(chǔ)節(jié)省 網(wǎng)絡(luò)傳輸
八、加密與解密
加密 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)
適用于:
文檔保護(hù) 權(quán)限控制
九、旋轉(zhuǎn)頁(yè)面
api.RotateFile("input.pdf", "output.pdf", 90, []string{"1-"}, conf)
表示:
從第 1 頁(yè)開始全部旋轉(zhuǎn) 90 度。
十、裁剪頁(yè)面
api.CropFile("input.pdf", "output.pdf", []string{"1-"}, "10 10 500 700", conf)
用于裁剪頁(yè)面區(qū)域。
十一、CLI 使用(非常實(shí)用)
pdfcpu 也提供命令行工具,非常適合日常使用。
合并 PDF:
pdfcpu merge out.pdf a.pdf b.pdf
拆分:
pdfcpu split in.pdf outdir
壓縮:
pdfcpu optimize in.pdf out.pdf
添加水?。?/p>
pdfcpu watermark add "CONFIDENTIAL" in.pdf out.pdf
非常適合做批處理工具。
十二、實(shí)際開發(fā)場(chǎng)景
在真實(shí)項(xiàng)目中,pdfcpu 常見應(yīng)用包括:
文檔管理系統(tǒng)(PDF 合并/拆分) 在線合同處理 發(fā)票系統(tǒng) 電子書處理 PDF 壓縮服務(wù) 自動(dòng)水印系統(tǒng)
例如一個(gè)簡(jiǎn)單的 PDF 合并服務(wù):
func mergePDF(files []string, output string) error {
conf := pdfcpu.NewDefaultConfiguration()
return api.MergeCreateFile(files, output, conf)
}
十三、優(yōu)缺點(diǎn)分析
優(yōu)點(diǎn):
純 Go 實(shí)現(xiàn),無依賴 功能全面(幾乎覆蓋 PDF 常見需求) 支持 CLI + API 跨平臺(tái)(Windows / macOS / Linux)
缺點(diǎn):
API 相對(duì)復(fù)雜 文檔不算特別友好 部分高級(jí)功能學(xué)習(xí)成本較高
十四、與其他庫(kù)對(duì)比
常見 PDF 庫(kù):
pdfcpu(純 Go,功能全) unidoc(商業(yè)庫(kù),功能更強(qiáng)) gofpdf(生成 PDF,不擅長(zhǎng)修改)
總結(jié):
- 如果你需要 修改 PDF → pdfcpu
- 如果你需要 生成 PDF → gofpdf
- 如果你需要 企業(yè)級(jí)功能 → unidoc
總結(jié)
pdfcpu 是 Go 生態(tài)中最強(qiáng)大的 PDF 處理庫(kù)之一,適用于各種 PDF 操作場(chǎng)景。
核心能力包括:
PDF 合并與拆分 頁(yè)面提取與裁剪 水印添加 壓縮優(yōu)化 加密解密
它既可以用于后端服務(wù)開發(fā),也可以用于構(gòu)建 CLI 工具,是 Go 開發(fā)者處理 PDF 的首選方案之一。
如果你的項(xiàng)目涉及:
文件處理系統(tǒng) 文檔自動(dòng)化 批量辦公工具 PDF 在線服務(wù)
那么 pdfcpu 基本可以一站式解決需求。
以上就是Go使用github.com/pdfcpu/pdfcpu處理PDF的操作指南的詳細(xì)內(nèi)容,更多關(guān)于Go github.com/pdfcpu/pdfcpu處理PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言單元測(cè)試模擬服務(wù)請(qǐng)求和接口返回
這篇文章主要為大家介紹了Go語言單元測(cè)試模擬服務(wù)請(qǐng)求和接口返回示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
詳解golang中bufio包的實(shí)現(xiàn)原理
這篇文章主要介紹了詳解golang中bufio包的實(shí)現(xiàn)原理,通過分析golang中bufio包的源碼,來了解為什么bufio能夠提高文件讀寫的效率和速度2018-01-01
Golang算法問題之?dāng)?shù)組按指定規(guī)則排序的方法分析
這篇文章主要介紹了Golang算法問題之?dāng)?shù)組按指定規(guī)則排序的方法,結(jié)合實(shí)例形式分析了Go語言數(shù)組排序相關(guān)算法原理與操作技巧,需要的朋友可以參考下2017-02-02
利用Golang解析json數(shù)據(jù)的方法示例
Go提供了原生的JSON庫(kù),并且與語言本身有效的集成在了一起。下面這篇文章將給大家介紹關(guān)于利用Golang解析json數(shù)據(jù)的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
使用Go實(shí)現(xiàn)TLS服務(wù)器和客戶端的示例
本文主要介紹了Go實(shí)現(xiàn)TLS服務(wù)器和客戶端的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

