include/mupdf | ||
libs | ||
testdata | ||
.gitattributes | ||
AUTHORS | ||
COPYING | ||
example_test.go | ||
fitz_cgo_extlib_pkgconfig.go | ||
fitz_cgo_extlib.go | ||
fitz_cgo.go | ||
fitz_content_types_test.go | ||
fitz_content_types.go | ||
fitz_test.go | ||
fitz.go | ||
go.mod | ||
go.sum | ||
README.md |
go-fitz
Maal Disclaimer
This is just fork from github repository. Forked in order to recompile with new glibc version.
Whenever you have problem with compability you can download source package from Mupdf source after simply run make
to compile on your platform. When this is completed just simply copy following files:
libmupdf.a
==>libs/libmupdfthird_linux_amd64.a
libmupdf-third.a
==>libs/libmupdf_linux_amd64.a
Part of file name 'linux_amd64' maens OS and platform.
Musl Compilation
To compile for linux musl you can use docker and just simply run following command from CLI
docker run --rm -v ./:/mupdf -it alpine:latest sh -c "apk update; apk add alpine-sdk; cd /mupdf;apk add freeglut-dev libxrandr-dev; make clean ;make; chown -R 1000:1000 ./build; mkdir ./musl; cp ./build/release/libmupdf.a ./musl/libmupdf_linux_amd64_musl.a; cp ./build/release/libmupdf-third.a ./musl/libmupdfthird_linux_amd64_musl.a"
Notice that you need to compile MuPdf source for OS and platform you want to use
---------------------------------------------------------------------------------------
Go wrapper for MuPDF fitz library that can extract pages from PDF and EPUB documents as images, text, html or svg.
Build tags
extlib
- use external MuPDF librarystatic
- build with static external MuPDF library (used withextlib
)pkgconfig
- enable pkg-config (used withextlib
)musl
- use musl compiled 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()
}
}