go-fitz/README.md
2023-10-17 21:56:58 +02:00

2.2 KiB

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 library
  • static - build with static external MuPDF library (used with extlib)
  • pkgconfig - enable pkg-config (used with extlib)
  • 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()
	}
}