blob: 8b74878dbe8403bd3c8427e8ea6daea73dd69c5f [file] [log] [blame]
/*
* testing program for the boundingbox function
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <poppler.h>
/*
* 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.x2, correct.x2, precision)) {
g_print("bounding box differs from expected\n");
exit(EXIT_FAILURE);
}
g_object_unref(page);
}
return EXIT_SUCCESS;
}