void drawmain(int argc, char **argv) { fz_error *error; char *password = ""; int c; enum { NO_FILE_OPENED, NO_PAGES_DRAWN, DREW_PAGES } state; while ((c = getopt(argc, argv, "b:d:o:r:txm")) != -1) { switch (c) { case 'b': drawbands = atoi(optarg); break; case 'd': password = optarg; break; case 'o': drawpattern = optarg; break; case 'r': drawzoom = (float)(atof(optarg) / 72.0); break; case 't': drawmode = DRAWTXT; break; case 'x': drawmode = DRAWXML; break; case 'm': benchmark = 1; break; default: drawusage(); break; } } if (optind == argc) drawusage(); error = fz_newrenderer(&drawgc, pdf_devicergb, 0, 1024 * 512); if (error) die(error); state = NO_FILE_OPENED; while (optind < argc) { if (strstr(argv[optind], ".pdf")) { if (state == NO_PAGES_DRAWN) drawpages("1-"); opensrc(argv[optind], password, 1); state = NO_PAGES_DRAWN; } else { drawpages(argv[optind]); state = DREW_PAGES; } optind++; } if (state == NO_PAGES_DRAWN) drawpages("1-"); closesrc(); fz_droprenderer(drawgc); }
void die(fz_error *eo) { fflush(stdout); fz_printerror(eo); fz_droperror(eo); fflush(stderr); if (drawgc) fz_droprenderer(drawgc); closesrc(); abort(); }
void drawmain(int argc, char **argv) { fz_error *error; char *password = ""; int c; while ((c = getopt(argc, argv, "b:d:o:r:tx")) != -1) { switch (c) { case 'b': drawbands = atoi(optarg); break; case 'd': password = optarg; break; case 'o': drawpattern = optarg; break; case 'r': drawzoom = atof(optarg) / 72.0; break; case 't': drawmode = DRAWTXT; break; case 'x': drawmode = DRAWXML; break; default: drawusage(); break; } } if (optind == argc) drawusage(); error = fz_newrenderer(&drawgc, pdf_devicergb, 0, 1024 * 512); if (error) die(error); while (optind < argc) { if (strstr(argv[optind], ".pdf")) opensrc(argv[optind], password, 1); else drawpages(argv[optind]); optind++; } closesrc(); fz_droprenderer(drawgc); }
void opensrc(char *filename, char *password, int loadpages) { fz_error *error; closesrc(); srcname = filename; error = pdf_newxref(&src); if (error) die(error); error = pdf_loadxref(src, filename); if (error) { fz_printerror(error); fz_warn("trying to repair"); error = pdf_repairxref(src, filename); if (error) die(error); } error = pdf_decryptxref(src); if (error) die(error); if (src->crypt) { int okay = pdf_setpassword(src->crypt, password); if (!okay) die(fz_throw("invalid password")); } if (loadpages) { error = pdf_loadpagetree(&srcpages, src); if (error) die(error); } }
void opensrc(char *filename, char *password, int loadpages) { fz_error *error; fz_obj *obj; closesrc(); srcname = filename; error = pdf_newxref(&src); if (error) die(error); error = pdf_loadxref(src, filename); if (error) { fz_printerror(error); fz_droperror(error); fz_warn("trying to repair"); error = pdf_repairxref(src, filename); if (error) die(error); } error = pdf_decryptxref(src); if (error) die(error); if (src->crypt) { int okay = pdf_setpassword(src->crypt, password); if (!okay) die(fz_throw("invalid password")); } if (loadpages) { error = pdf_loadpagetree(&srcpages, src); if (error) die(error); } /* TODO: move into mupdf lib, see pdfapp_open in pdfapp.c */ obj = fz_dictgets(src->trailer, "Root"); if (!obj) die(error); error = pdf_loadindirect(&src->root, src, obj); if (error) die(error); obj = fz_dictgets(src->trailer, "Info"); if (obj) { error = pdf_loadindirect(&src->info, src, obj); if (error) die(error); } error = pdf_loadnametrees(src); if (error) die(error); error = pdf_loadoutline(&srcoutline, src); if (error) die(error); }
void editmain(int argc, char **argv) { char *outfile = "out.pdf"; fz_error *error; int c; while ((c = getopt(argc, argv, "o:")) != -1) { switch (c) { case 'o': outfile = optarg; break; default: editusage(); break; } } if (optind == argc) editusage(); error = pdf_newxref(&editxref); if (error) die(error); error = pdf_initxref(editxref); if (error) die(error); error = fz_newarray(&editpagelist, 100); if (error) die(error); error = fz_newarray(&editmodelist, 100); if (error) die(error); while (optind < argc) { if (strstr(argv[optind], ".pdf")) { if (editobjects) editflushobjects(); opensrc(argv[optind], "", 1); error = fz_newarray(&editobjects, 100); if (error) die(error); } else if (!strcmp(argv[optind], "copy")) editmode = COPY; else if (!strcmp(argv[optind], "over")) editmode = OVER; else if (!strcmp(argv[optind], "2up")) editmode = NUP2; else if (!strcmp(argv[optind], "4up")) editmode = NUP4; else if (!strcmp(argv[optind], "8up")) editmode = NUP8; else editpages(argv[optind]); optind++; } if (editobjects) editflushobjects(); closesrc(); editflushpagetree(); editflushcatalog(); error = pdf_savexref(editxref, outfile, nil); if (error) die(error); pdf_closexref(editxref); }