Golang如何读取PDF文件
Golang如何读取PDF文件 如何在 Go 语言中读取 PDF 文件
3 回复
打开文件,读取字节。完成。
……或者你所说的“读取”是指什么?
更多关于Golang如何读取PDF文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
虽然没有亲自尝试过,但我听说这个包很不错。
unidoc/unipdf
用于创建和处理PDF文件的Golang PDF库(纯Go实现)- unidoc/unipdf
在 Go 语言中读取 PDF 文件,推荐使用 github.com/unidoc/unipdf/v3 库。以下是具体实现示例:
package main
import (
"fmt"
"log"
"os"
"github.com/unidoc/unipdf/v3/extractor"
"github.com/unidoc/unipdf/v3/model"
)
func main() {
// 打开 PDF 文件
file, err := os.Open("example.pdf")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 创建 PDF 阅读器
pdfReader, err := model.NewPdfReader(file)
if err != nil {
log.Fatal(err)
}
// 获取 PDF 页数
numPages, err := pdfReader.GetNumPages()
if err != nil {
log.Fatal(err)
}
fmt.Printf("PDF 总页数: %d\n", numPages)
// 逐页提取文本内容
for pageNum := 1; pageNum <= numPages; pageNum++ {
page, err := pdfReader.GetPage(pageNum)
if err != nil {
log.Fatal(err)
}
// 创建文本提取器
ex, err := extractor.New(page)
if err != nil {
log.Fatal(err)
}
// 提取文本
text, err := ex.ExtractText()
if err != nil {
log.Fatal(err)
}
fmt.Printf("=== 第 %d 页内容 ===\n", pageNum)
fmt.Println(text)
}
}
安装依赖:
go get github.com/unidoc/unipdf/v3
如果需要读取 PDF 元数据,可以使用以下代码:
func readPDFMetadata(pdfReader *model.PdfReader) {
pdfInfo, err := pdfReader.GetPdfInfo()
if err != nil {
log.Fatal(err)
}
if pdfInfo.Title != nil {
fmt.Printf("标题: %s\n", pdfInfo.Title.String())
}
if pdfInfo.Author != nil {
fmt.Printf("作者: %s\n", pdfInfo.Author.String())
}
if pdfInfo.Subject != nil {
fmt.Printf("主题: %s\n", pdfInfo.Subject.String())
}
if pdfInfo.Creator != nil {
fmt.Printf("创建工具: %s\n", pdfInfo.Creator.String())
}
}
对于需要处理加密 PDF 的情况:
func readEncryptedPDF(filename, password string) {
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
defer file.Close()
pdfReader, err := model.NewPdfReader(file)
if err != nil {
log.Fatal(err)
}
// 检查是否加密
isEncrypted, err := pdfReader.IsEncrypted()
if err != nil {
log.Fatal(err)
}
if isEncrypted {
// 尝试使用密码解密
auth, err := pdfReader.Decrypt([]byte(password))
if err != nil {
log.Fatal(err)
}
if !auth {
log.Fatal("密码错误")
}
}
// 继续处理解密后的 PDF...
}
如果需要提取图片:
func extractImages(page *model.PdfPage) {
resources := page.Resources
if resources == nil {
return
}
// 获取页面中的所有图片
xObject, err := resources.GetXObjectForm()
if err != nil {
log.Fatal(err)
}
for _, xobj := range xObject {
if img, ok := xobj.(*model.XObjectImage); ok {
// 处理图片数据
fmt.Printf("找到图片: %v\n", img)
}
}
}
这些示例展示了在 Go 中读取 PDF 文件的基本操作,包括文本提取、元数据读取、加密文件处理和图片提取。

