#include <stdio.h>
#include <stdlib.h>
#include <poppler.h>
#define FAIL(msg) \
do { fprintf (stderr, "FAIL: %s\n", msg); exit (-1); } while (0)
#define PIXELS_PER_POINT 1
int main (int argc, char *argv[])
{
PopplerDocument *document;
PopplerPage *page;
GdkPixbuf *pixbuf;
double width, height;
GError *error;
const char *filename = argv[1];
const char *output_filename = argv[2];
const char *page_label = argv[3];
gchar *absolute, *uri;
if (argc != 4)
FAIL ("usage: pdf2png input_file.pdf output_file.png page");
g_type_init ();
error = NULL;
if (g_path_is_absolute(filename)) {
absolute = g_strdup (filename);
} else {
gchar *dir = g_get_current_dir ();
absolute = g_build_filename (dir, filename, (gchar *) 0);
free (dir);
}
uri = g_filename_to_uri (absolute, NULL, &error);
free (absolute);
if (uri == NULL)
FAIL (error->message);
document = poppler_document_new_from_file (uri, NULL, &error);
if (document == NULL)
FAIL (error->message);
page = poppler_document_get_page_by_label (document, page_label);
if (page == NULL)
FAIL ("page not found");
poppler_page_get_size (page, &width, &height);
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
width * PIXELS_PER_POINT,
height * PIXELS_PER_POINT);
gdk_pixbuf_fill (pixbuf, 0xffffffff);
poppler_page_render_to_pixbuf (page, 0, 0, width , height,
PIXELS_PER_POINT, 0, pixbuf);
gdk_pixbuf_save (pixbuf, output_filename, "png", &error, NULL);
if (error != NULL)
FAIL (error->message);
return 0;
}