summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2010-06-21 16:23:32 +0200
committerTor Andersson <tor@ghostscript.com>2010-06-21 16:23:32 +0200
commit17d2a8b03562410e644d55c0452c63c142d9b333 (patch)
treec19113375ac1bdd9c659cda40c1497e013990111 /apps
parent1f36f832e475ea995e978b1d12998dc3071d8410 (diff)
downloadmupdf-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.c5
-rw-r--r--apps/pdfclean.c2
-rw-r--r--apps/pdfdraw.c4
-rw-r--r--apps/pdfextract.c2
-rw-r--r--apps/pdfinfo.c2
-rw-r--r--apps/pdfshow.c2
-rw-r--r--apps/pdftool.c11
-rw-r--r--apps/pdftool.h2
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);