什么是 go-fitz? go-fitz 是 Go 语言的一个库,它封装了 MuPDF 的强大功能,用于处理 PDF、EPUB 和 MOBI 文档。该库允许开发者轻松提取 PDF 文档中的页面为图像(JPEG、PNG、TIFF 等)、文本、HTML 或 SVG。
安装
go get github.com/gen2brain/go-fitz
使用指南
1. 打开 PDF 文档
doc, err := fitz.New("test.pdf")
defer doc.Close()
2. 提取页面为图像
for n := 0; n < doc.NumPage(); n++ {
img, err := doc.Image(n)
if err != nil {
panic(err)
}
f, err := os.Create(filepath.Join(tmpDir, fmt.Sprintf("test%03d.jpg", n)))
if err != nil {
panic(err)
}
err = jpeg.Encode(f, img, &jpeg.Options{jpeg.DefaultQuality})
if err != nil {
panic(err)
}
f.Close()
}
这段代码遍历 PDF 文档中的所有页面,将每个页面提取为 JPEG 图像,并将其保存在磁盘上。doc.NumPage()
获取页面总数,doc.Image(n)
提取第 n
页的图像。
3. 提取页面为文本
text, err := doc.Text(0)
doc.Text(0)
提取第一页的文本,可以通过此方法提取所有页面的文本。
4. 提取页面为 HTML
html, err := doc.HTML(0)
doc.HTML(0)
提取第一页的 HTML 表示,也可以提取所有页面的 HTML。
5. 提取页面为 SVG
svg, err := doc.SVG(0)
doc.SVG(0)
提取第一页的 SVG 表示,也可以提取所有页面的 SVG。
完整示例
package main
import (
"fmt"
"image/jpeg"
"os"
"path/filepath"
"github.com/gen2brain/go-fitz"
)
func main() {
doc, err := fitz.New("test.pdf")
if err != nil {
panic(err)
}
defer doc.Close()
tmpDir, err := os.MkdirTemp(os.TempDir(), "fitz")
if err != nil {
panic(err)
}
// Extract pages as images
for n := 0; n < doc.NumPage(); n++ {
img, err := doc.Image(n)
if err != nil {
panic(err)
}
f, err := os.Create(filepath.Join(tmpDir, fmt.Sprintf("test%03d.jpg", n)))
if err != nil {
panic(err)
}
err = jpeg.Encode(f, img, &jpeg.Options{jpeg.DefaultQuality})
if err != nil {
panic(err)
}
f.Close()
}
// Extract pages as text
for n := 0; n < doc.NumPage(); n++ {
text, err := doc.Text(n)
if err != nil {
panic(err)
}
f, err := os.Create(filepath.Join(tmpDir, fmt.Sprintf("test%03d.txt", n)))
if err != nil {
panic(err)
}
f.Write([]byte(text))
f.Close()
}
}
此完整示例提取 PDF 文档的所有页面为图像和文本。