diff options
author | Tor Andersson <tor@ghostscript.com> | 2010-06-21 16:23:32 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2010-06-21 16:23:32 +0200 |
commit | 17d2a8b03562410e644d55c0452c63c142d9b333 (patch) | |
tree | c19113375ac1bdd9c659cda40c1497e013990111 /apps | |
parent | 1f36f832e475ea995e978b1d12998dc3071d8410 (diff) | |
download | mupdf-17d2a8b03562410e644d55c0452c63c142d9b333.tar.xz |
Preload page tree into an array to avoid unnecessary linear searching when looking for a given page.
Diffstat (limited to 'apps')
-rw-r--r-- | apps/pdfapp.c | 5 | ||||
-rw-r--r-- | apps/pdfclean.c | 2 | ||||
-rw-r--r-- | apps/pdfdraw.c | 4 | ||||
-rw-r--r-- | apps/pdfextract.c | 2 | ||||
-rw-r--r-- | apps/pdfinfo.c | 2 | ||||
-rw-r--r-- | apps/pdfshow.c | 2 | ||||
-rw-r--r-- | apps/pdftool.c | 11 | ||||
-rw-r--r-- | apps/pdftool.h | 2 |
8 files changed, 21 insertions, 9 deletions
diff --git a/apps/pdfapp.c b/apps/pdfapp.c index 75ec8368..c955d1a0 100644 --- a/apps/pdfapp.c +++ b/apps/pdfapp.c @@ -89,6 +89,7 @@ void pdfapp_invert(pdfapp_t *app, fz_bbox rect) void pdfapp_open(pdfapp_t *app, char *filename, int fd) { + fz_error error; fz_obj *obj; fz_obj *info; char *password = ""; @@ -147,6 +148,10 @@ void pdfapp_open(pdfapp_t *app, char *filename, int fd) * Start at first page */ + error = pdf_loadpagetree(app->xref); + if (error) + pdfapp_error(app, fz_rethrow(error, "cannot load page tree")); + app->pagecount = pdf_getpagecount(app->xref); app->shrinkwrap = 1; diff --git a/apps/pdfclean.c b/apps/pdfclean.c index a6cf402c..021eb2bc 100644 --- a/apps/pdfclean.c +++ b/apps/pdfclean.c @@ -295,7 +295,7 @@ int main(int argc, char **argv) if (argc - fz_optind > 0) subset = 1; - openxref(infile, password, 0); + openxref(infile, password, 0, 0); out = fopen(outfile, "wb"); if (!out) diff --git a/apps/pdfdraw.c b/apps/pdfdraw.c index 345d8c73..46925838 100644 --- a/apps/pdfdraw.c +++ b/apps/pdfdraw.c @@ -292,7 +292,7 @@ static void drawtxt(int pagenum, struct benchmark *loadtimes) fz_freedevice(dev); printf("[Page %d]\n", pagenum); - fz_debugtextspan(text); + fz_debugtextspanxml(text); printf("\n"); fz_freetextspan(text); @@ -446,7 +446,7 @@ int main(int argc, char **argv) drawcache = fz_newglyphcache(); - openxref(argv[fz_optind], password, 0); + openxref(argv[fz_optind], password, 0, 1); state = NO_PAGES_DRAWN; } else diff --git a/apps/pdfextract.c b/apps/pdfextract.c index 25b00e8e..297fdbe5 100644 --- a/apps/pdfextract.c +++ b/apps/pdfextract.c @@ -230,7 +230,7 @@ int main(int argc, char **argv) if (fz_optind == argc) showusage(); - openxref(argv[fz_optind++], password, 0); + openxref(argv[fz_optind++], password, 0, 0); if (fz_optind == argc) for (o = 0; o < xref->len; o++) diff --git a/apps/pdfinfo.c b/apps/pdfinfo.c index ceeb8ded..7702f25b 100644 --- a/apps/pdfinfo.c +++ b/apps/pdfinfo.c @@ -1021,7 +1021,7 @@ int main(int argc, char **argv) closexref(); filename = argv[fz_optind]; printf("%s:\n", filename); - openxref(filename, password, 0); + openxref(filename, password, 0, 1); gatherglobalinfo(); state = NO_INFO_GATHERED; } diff --git a/apps/pdfshow.c b/apps/pdfshow.c index 85b78d29..ba2d51f6 100644 --- a/apps/pdfshow.c +++ b/apps/pdfshow.c @@ -141,7 +141,7 @@ int main(int argc, char **argv) if (fz_optind == argc) showusage(); - openxref(argv[fz_optind++], password, 0); + openxref(argv[fz_optind++], password, 0, 0); if (fz_optind == argc) showtrailer(); diff --git a/apps/pdftool.c b/apps/pdftool.c index 42f712dd..5724e022 100644 --- a/apps/pdftool.c +++ b/apps/pdftool.c @@ -21,9 +21,10 @@ void setcleanup(void (*func)(void)) cleanup = func; } -void openxref(char *filename, char *password, int dieonbadpass) +void openxref(char *filename, char *password, int dieonbadpass, int loadpages) { fz_stream *file; + fz_error error; int okay; int fd; @@ -52,7 +53,13 @@ void openxref(char *filename, char *password, int dieonbadpass) die(fz_throw("invalid password")); } - pagecount = pdf_getpagecount(xref); + if (loadpages) + { + error = pdf_loadpagetree(xref); + if (error) + die(fz_rethrow(error, "cannot load page tree")); + pagecount = pdf_getpagecount(xref); + } } void flushxref(void) diff --git a/apps/pdftool.h b/apps/pdftool.h index 2bc39657..1560c225 100644 --- a/apps/pdftool.h +++ b/apps/pdftool.h @@ -8,7 +8,7 @@ extern int pagecount; void die(fz_error error); void setcleanup(void (*cleanup)(void)); -void openxref(char *filename, char *password, int dieonbadpass); +void openxref(char *filename, char *password, int dieonbadpass, int loadpages); void flushxref(void); void closexref(void); |