void die(fz_error *eo) { fflush(stdout); fz_printerror(eo); fz_droperror(eo); fflush(stderr); if (drawgc) fz_droprenderer(drawgc); closesrc(); abort(); }
void fz_droperror(fz_error *eo) { if (eo->refs > 0) eo->refs--; if (eo->refs == 0) { if (eo->cause) fz_droperror(eo->cause); fz_free(eo); } }
/* * Check if an object is a stream or not. */ int pdf_isstream(pdf_xref *xref, int oid, int gen) { fz_error *error; if (oid < 0 || oid >= xref->len) return 0; error = pdf_cacheobject(xref, oid, gen); if (error) { fz_warn("%s", error->msg); fz_droperror(error); return 0; } return xref->table[oid].stmbuf || xref->table[oid].stmofs; }
static void separationtoxyz(fz_colorspace *fzcs, float *sep, float *xyz) { struct separation *cs = (struct separation *)fzcs; fz_error *error; float alt[FZ_MAXCOLORS]; error = pdf_evalfunction(cs->tint, sep, fzcs->n, alt, cs->base->n); if (error) { fz_warn("separation: %s", error->msg); fz_droperror(error); xyz[0] = 0; xyz[1] = 0; xyz[2] = 0; return; } cs->base->toxyz(cs->base, alt, xyz); }
void fz_dropstream(fz_stream *stm) { stm->refs --; if (stm->refs == 0) { if (stm->error) { fflush(stdout); fz_printerror(stm->error); fz_droperror(stm->error); fflush(stderr); fz_warn("dropped unhandled ioerror"); } if (stm->mode == FZ_SWRITE) { stm->buffer->eof = 1; fz_flush(stm); } switch (stm->kind) { case FZ_SFILE: close(stm->file); break; case FZ_SFILTER: fz_dropfilter(stm->filter); fz_dropstream(stm->chain); break; case FZ_SBUFFER: break; } fz_dropbuffer(stm->buffer); fz_free(stm); } }
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 pdfapp_open(pdfapp_t *app, char *filename) { fz_error *error; fz_obj *obj; char *password = ""; /* * Open PDF and load xref table */ app->filename = filename; error = pdf_newxref(&app->xref); if (error) pdfapp_error(app, error); error = pdf_loadxref(app->xref, filename); if (error) { if (!strncmp(error->msg, "ioerror", 7)) pdfapp_error(app, error); pdfapp_warn(app, "There was a problem with file \"%s\".\n" "It may be corrupted, or generated by broken software.\n\n" "%s\n\nTrying to continue anyway...", filename, error->msg); error = pdf_repairxref(app->xref, filename); if (error) pdfapp_error(app, error); } /* * Handle encrypted PDF files */ error = pdf_decryptxref(app->xref); if (error) pdfapp_error(app, error); if (app->xref->crypt) { error = pdf_setpassword(app->xref->crypt, password); while (error) { fz_droperror(error); password = winpassword(app, filename); if (!password) exit(1); error = pdf_setpassword(app->xref->crypt, password); if (error) pdfapp_warn(app, "Invalid password."); } } /* * Load page tree */ error = pdf_loadpagetree(&app->pages, app->xref); if (error) pdfapp_error(app, error); /* * Load meta information * TODO: move this into mupdf library */ obj = fz_dictgets(app->xref->trailer, "Root"); if (!obj) pdfapp_error(app, fz_throw("syntaxerror: missing Root object")); error = pdf_loadindirect(&app->xref->root, app->xref, obj); if (error) pdfapp_error(app, error); obj = fz_dictgets(app->xref->trailer, "Info"); if (obj) { error = pdf_loadindirect(&app->xref->info, app->xref, obj); if (error) pdfapp_error(app, error); } error = pdf_loadnametrees(app->xref); if (error) pdfapp_error(app, error); error = pdf_loadoutline(&app->outline, app->xref); if (error) pdfapp_error(app, error); app->doctitle = filename; if (strrchr(app->doctitle, '\\')) app->doctitle = strrchr(app->doctitle, '\\') + 1; if (strrchr(app->doctitle, '/')) app->doctitle = strrchr(app->doctitle, '/') + 1; if (app->xref->info) { obj = fz_dictgets(app->xref->info, "Title"); if (obj) { error = pdf_toutf8(&app->doctitle, obj); if (error) pdfapp_error(app, error); } } /* * Start at first page */ app->shrinkwrap = 1; if (app->pageno < 1) app->pageno = 1; if (app->zoom <= 0.0) app->zoom = 1.0; app->rotate = 0; app->panx = 0; app->pany = 0; pdfapp_showpage(app, 1, 1); }