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