diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/pdfclean.c | 20 | ||||
-rw-r--r-- | test/pdfdebug.c | 18 |
2 files changed, 36 insertions, 2 deletions
diff --git a/test/pdfclean.c b/test/pdfclean.c index c6af657b..69c51590 100644 --- a/test/pdfclean.c +++ b/test/pdfclean.c @@ -18,6 +18,23 @@ void usage() exit(1); } +void preloadobjstms(pdf_xref *xref) +{ + fz_error *error; + fz_obj *obj; + int i; + + for (i = 0; i < xref->size; i++) + { + if (xref->table[i].type == 'o') + { + error = pdf_loadobject0(&obj, xref, i, 0, nil); + if (error) fz_abort(error); + fz_dropobj(obj); + } + } +} + void expandstreams(pdf_xref *xref) { fz_error *error; @@ -140,7 +157,10 @@ int main(int argc, char **argv) expandstreams(xref); if (dogc) + { + preloadobjstms(xref); pdf_garbagecollect(xref); + } error = pdf_savepdf(xref, outfile, encrypt); if (error) diff --git a/test/pdfdebug.c b/test/pdfdebug.c index ddc10dff..1009849f 100644 --- a/test/pdfdebug.c +++ b/test/pdfdebug.c @@ -5,10 +5,11 @@ static char *password = ""; static int dodecode = 0; static int dorepair = 0; static int doprintxref = 0; +static int dosave = 0; void usage() { - fprintf(stderr, "usage: pdfdebug [-drx] [-u password] file.pdf [oid ...]\n"); + fprintf(stderr, "usage: pdfdebug [-drxs] [-u password] file.pdf [oid ...]\n"); exit(1); } @@ -43,9 +44,13 @@ void printsafe(unsigned char *buf, int n) void decodestream(pdf_xref *xref, fz_obj *stream, int oid, int gid, int ofs) { + FILE *copy; fz_error *error; unsigned char buf[512]; + if (dosave) + copy = fopen("/tmp/dump.stm", "wb"); + safecol = 0; error = pdf_openstream0(xref, stream, oid, gid, ofs); @@ -59,8 +64,14 @@ void decodestream(pdf_xref *xref, fz_obj *stream, int oid, int gid, int ofs) if (n < 0) fz_abort(fz_ferror(xref->file)); printsafe(buf, n); + + if (dosave) + fwrite(buf, 1, n, copy); } + if (dosave) + fclose(copy); + pdf_closestream(xref); } @@ -133,10 +144,13 @@ int main(int argc, char **argv) pdf_xref *xref; int c; - while ((c = getopt(argc, argv, "drxopu:")) != -1) + while ((c = getopt(argc, argv, "drxsopu:")) != -1) { switch (c) { + case 's': + dodecode ++; + dosave ++; case 'd': dodecode ++; break; |