gen2brain / go-fitz

Golang wrapper for the MuPDF Fitz library
GNU Affero General Public License v3.0
447 stars 97 forks source link
docx epub fitz golang golang-wrapper mupdf pdf pptx xlsx

go-fitz

Build Status GoDoc Go Report Card

Go wrapper for MuPDF fitz library that can extract pages from PDF, EPUB, MOBI, DOCX, XLSX and PPTX documents as IMG, TXT, HTML or SVG.

Build tags

Notes

The bundled libraries are built without CJK fonts, if you need them you must use the external library.

Calling e.g. Image() or Text() methods concurrently for the same document is not supported.

Purego implementation requires libffi and libmupdf shared libraries on runtime. You must set fitz.FzVersion in your code or set FZ_VERSION environment variable to exact version of the shared library.

Example

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()
    }
}