Spaces:
Sleeping
Sleeping
/* | |
* testing program for the boundingbox function | |
*/ | |
/* | |
* compare floating-point coordinates | |
*/ | |
int equal(double a, double b, double precision) | |
{ | |
return fabs(a - b) < precision; | |
} | |
/* | |
* main | |
*/ | |
int main(int argc, char *argv[]) | |
{ | |
GFile *infile; | |
PopplerDocument *doc; | |
PopplerPage *page; | |
int npages, n; | |
gboolean hg; | |
PopplerRectangle bb, correct; | |
GError *err = NULL; | |
int argx; | |
double precision = 0.01; | |
/* open file */ | |
g_print("file: %s\n", argv[1]); | |
infile = g_file_new_for_path(argv[1]); | |
if (!infile) { | |
exit(EXIT_FAILURE); | |
} | |
doc = poppler_document_new_from_gfile(infile, NULL, NULL, &err); | |
if (doc == NULL) { | |
g_printerr("error opening pdf file: %s\n", err->message); | |
g_error_free(err); | |
exit(EXIT_FAILURE); | |
} | |
/* precision */ | |
argx = 2; | |
if (!strcmp(argv[argx], "-p")) { | |
precision = atof(argv[argx + 1]); | |
argx += 2; | |
} | |
/* pages */ | |
npages = poppler_document_get_n_pages(doc); | |
if (npages < 1) { | |
g_printerr("no page in document\n"); | |
exit(EXIT_FAILURE); | |
} | |
/* check the bounding box */ | |
for (n = 0; n < poppler_document_get_n_pages(doc); n++) { | |
g_print(" page: %d\n", n + 1); | |
page = poppler_document_get_page(doc, n); | |
hg = poppler_page_get_bounding_box(page, &bb); | |
if (!hg) { | |
g_printerr("no graphics in page\n"); | |
exit(EXIT_FAILURE); | |
} | |
g_print(" bounding box: %g,%g - %g,%g\n", bb.x1, bb.y1, bb.x2, bb.y2); | |
if (argc - argx < 4) { | |
g_print("not enough arguments\n"); | |
exit(EXIT_FAILURE); | |
} | |
correct.x1 = atof(argv[argx++]); | |
correct.y1 = atof(argv[argx++]); | |
correct.x2 = atof(argv[argx++]); | |
correct.y2 = atof(argv[argx++]); | |
g_print(" correct: %g,%g - %g,%g\n", correct.x1, correct.y1, correct.x2, correct.y2); | |
if (!equal(bb.x1, correct.x1, precision) || !equal(bb.x2, correct.x2, precision) || !equal(bb.y1, correct.y1, precision) || !equal(bb.y2, correct.y2, precision)) { | |
g_print("bounding box differs from expected\n"); | |
exit(EXIT_FAILURE); | |
} | |
g_object_unref(page); | |
} | |
return EXIT_SUCCESS; | |
} | |