From 17fb6add26291b31f7020e3551a7c8487130a747 Mon Sep 17 00:00:00 2001 From: "F.O." Date: Sun, 16 Feb 2025 17:56:08 +0100 Subject: genesi --- go-poppler/poppler.go | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 go-poppler/poppler.go (limited to 'go-poppler/poppler.go') diff --git a/go-poppler/poppler.go b/go-poppler/poppler.go new file mode 100644 index 0000000..eaa53c4 --- /dev/null +++ b/go-poppler/poppler.go @@ -0,0 +1,58 @@ +package poppler + +// #cgo pkg-config: poppler-glib +// #include +// #include +// #include +// #include +import "C" + +import ( + "errors" + "path/filepath" + "unsafe" +) + +type poppDoc *C.struct__PopplerDocument + +func Open(filename string) (doc *Document, err error) { + filename, err = filepath.Abs(filename) + if err != nil { + return + } + var e *C.GError + cfilename := (*C.gchar)(C.CString(filename)) + defer C.free(unsafe.Pointer(cfilename)) + fn := C.g_filename_to_uri(cfilename, nil, nil) + var d poppDoc + d = C.poppler_document_new_from_file((*C.char)(fn), nil, &e) + if e != nil { + err = errors.New(C.GoString((*C.char)(e.message))) + } + doc = &Document{ + doc: d, + openedPages: []*Page{}, + } + return +} + +func Load(data []byte) (doc *Document, err error) { + var e *C.GError + var d poppDoc + + b := C.g_bytes_new((C.gconstpointer)(unsafe.Pointer(&data[0])), (C.ulong)(len(data))) + defer C.g_bytes_unref(b) + + d = C.poppler_document_new_from_bytes(b, nil, &e) + if e != nil { + err = errors.New(C.GoString((*C.char)(e.message))) + } + doc = &Document{ + doc: d, + } + return +} + +func Version() string { + return C.GoString(C.poppler_get_version()) +} -- cgit v1.2.3