cairo_surface_t* get_pdf_cairo_surface(char* filename, int n_page, int width, int height) { if (NULL != currentDocument) { free_doc(); } PopplerDocument* doc; GError* err = NULL; gchar* uri = g_strconcat("file:", filename, NULL); doc = poppler_document_new_from_file(uri, NULL, &err); if (NULL != err) { g_print(err->message); return NULL; } cairo_surface_t* result = cairo_image_surface_create(CAIRO_FORMAT_RGB24, width, height); render_pdf_page(doc, n_page, result, width, height); currentDocument = (document_page_t*)g_malloc(sizeof(document_page_t)); currentDocument->doc = doc; currentDocument->page = 0; currentDocument->page_count = poppler_document_get_n_pages(doc); currentDocument->surface = result; currentDocument->width = width; currentDocument->height = height; return result; }
cairo_surface_t* get_pdf_thumbnail_cairo_surface(char* filename, int width, int height) { PopplerDocument* doc; GError* err = NULL; g_print("Thumbnail %s\n", filename); gchar* uri = g_strconcat("file:", filename, NULL); doc = poppler_document_new_from_file(uri, NULL, &err); if (NULL != err) { g_print(err->message); return NULL; } PopplerPage* page = poppler_document_get_page(doc, 0); cairo_surface_t* result = poppler_page_get_thumbnail(page); if (NULL == result) { result = cairo_image_surface_create(CAIRO_FORMAT_RGB24, width, height); render_pdf_page(doc, 0, result, width, height); } g_object_unref(doc); g_object_unref(page); return result; }
static void render_doc_page(document_page_t* doc_page) { render_pdf_page(doc_page->doc, doc_page->page, doc_page->surface, doc_page->width, doc_page->height); doc_page->on_render(doc_page->surface, doc_page->width, doc_page->height); get_page_label_text(doc_page->page_label, doc_page); }
int render_page(int pg, Window win, bool fixed) { render_pdf_page(0, pg, win, fixed); //notes_draw(pg); return 0; }