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); } }
JNIEXPORT int JNICALL Java_com_artifex_mupdf_MuPDFCore_openFile(JNIEnv * env, jobject thiz, jstring jfilename) { const char *filename; char *password = ""; int accelerate = 1; fz_error error; filename = (*env)->GetStringUTFChars(env, jfilename, NULL); if (filename == NULL) { LOGE("Failed to get filename"); return 0; } if (accelerate) fz_accelerate(); glyphcache = fz_newglyphcache(); colorspace = fz_devicergb; LOGE("Opening document..."); error = pdf_openxref(&xref, filename, password); if (error) { LOGE("Cannot open document: '%s'\n", filename); return 0; } LOGE("Loading page tree..."); error = pdf_loadpagetree(xref); if (error) { LOGE("Cannot load page tree: '%s'\n", filename); return 0; } LOGE("Done! %d pages", pdf_getpagecount(xref)); return pdf_getpagecount(xref); }
static void retainpages(int argc, char **argv) { fz_error error; fz_obj *oldroot, *root, *pages, *kids, *countobj, *parent; /* Load the old page tree */ error = pdf_loadpagetree(xref); if (error) die(fz_rethrow(error, "cannot load page tree")); /* Keep only pages/type entry to avoid references to unretained pages */ oldroot = fz_dictgets(xref->trailer, "Root"); pages = fz_dictgets(oldroot, "Pages"); root = fz_newdict(2); fz_dictputs(root, "Type", fz_dictgets(oldroot, "Type")); fz_dictputs(root, "Pages", fz_dictgets(oldroot, "Pages")); pdf_updateobject(xref, fz_tonum(oldroot), fz_togen(oldroot), root); fz_dropobj(root); /* Create a new kids array with only the pages we want to keep */ parent = fz_newindirect(fz_tonum(pages), fz_togen(pages), xref); kids = fz_newarray(1); /* Retain pages specified */ while (argc - fz_optind) { int page, spage, epage; char *spec, *dash; char *pagelist = argv[fz_optind]; spec = fz_strsep(&pagelist, ","); while (spec) { dash = strchr(spec, '-'); if (dash == spec) spage = epage = pdf_getpagecount(xref); else spage = epage = atoi(spec); if (dash) { if (strlen(dash) > 1) epage = atoi(dash + 1); else epage = pdf_getpagecount(xref); } if (spage > epage) page = spage, spage = epage, epage = page; if (spage < 1) spage = 1; if (epage > pdf_getpagecount(xref)) epage = pdf_getpagecount(xref); for (page = spage; page <= epage; page++) { fz_obj *pageobj = pdf_getpageobject(xref, page); fz_obj *pageref = pdf_getpageref(xref, page); fz_dictputs(pageobj, "Parent", parent); /* Store page object in new kids array */ fz_arraypush(kids, pageref); } spec = fz_strsep(&pagelist, ","); } fz_optind++; } fz_dropobj(parent); /* Update page count and kids array */ countobj = fz_newint(fz_arraylen(kids)); fz_dictputs(pages, "Count", countobj); fz_dropobj(countobj); fz_dictputs(pages, "Kids", kids); fz_dropobj(kids); }
int openPdfFile( soPdfFile* pdfFile ) { fz_error *error; fz_obj *obj; // // open pdf and load xref table error = pdf_newxref(&pdfFile->xref); if (error) return soPdfError(error); error = pdf_loadxref(pdfFile->xref, pdfFile->fileName); if (error) return soPdfError(error); // // Handle encrypted file error = pdf_decryptxref(pdfFile->xref); if (error) return soPdfError(error); if (pdfFile->xref->crypt) { int ret = pdf_setpassword(pdfFile->xref->crypt, pdfFile->password); if (! ret) return soPdfError(fz_throw("invalid password")); } // // load the page tree and other objects error = pdf_loadpagetree(&pdfFile->pageTree, pdfFile->xref); if (error) return soPdfError(error); // // load meta information obj = fz_dictgets(pdfFile->xref->trailer, "Root"); if (! obj) return soPdfError(fz_throw("mising root object")); error = pdf_loadindirect(&pdfFile->xref->root, pdfFile->xref, obj); if (error) return soPdfError(error); obj = fz_dictgets(pdfFile->xref->trailer, "Info"); if (obj) { error = pdf_loadindirect(&pdfFile->xref->info, pdfFile->xref, obj); if (error) return soPdfError(error); } error = pdf_loadnametrees(pdfFile->xref); if (error) return soPdfError(error); error = pdf_loadoutline(&pdfFile->outline, pdfFile->xref); if (error) return soPdfError(error); return 0; }
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); }
static PDFContext* pdfOpen(char *filename) { PDFContext* ctx = new PDFContext(); memset(ctx, 0, sizeof(PDFContext)); fz_error *error; fz_obj *obj; error = fz_newrenderer(&ctx->rast, pdf_devicergb, 0, 1024 * 512); if (error) { printf("err0: %s\n", error->msg); delete ctx; return 0; } /* * Open PDF and load xref table */ error = pdf_newxref(&ctx->xref); if (error) { printf("err1: %s\n", error->msg); delete ctx; return 0; } error = pdf_loadxref(ctx->xref, filename); if (error) { printf("err2: %s\n", error->msg); if (!strncmp(error->msg, "ioerror", 7)) { delete ctx; return 0; } printf("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...\n", filename, error->msg); error = pdf_repairxref(ctx->xref, filename); if (error) { printf("err3: %s\n", error->msg); delete ctx; return 0; } } /* * Handle encrypted PDF files */ error = pdf_decryptxref(ctx->xref); if (error) { printf("err4: %s\n", error->msg); delete ctx; return 0; } /*if (ctx->xref->crypt) { //printf("err5: %s\n", error->msg); printf("err5\n", error->msg); delete ctx; return 0; }*/ if (ctx->xref->crypt) { error = pdf_setpassword(ctx->xref->crypt, ""); if (error) { printf("err5: encrypted file (tried empty password): %s\n", error->msg); delete ctx; return 0; /* 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(&ctx->pages, ctx->xref); if (error) { printf("err6: %s\n", error->msg); delete ctx; return 0; } /* * Load meta information * TODO: move this into mupdf library */ obj = fz_dictgets(ctx->xref->trailer, "Root"); if (!obj) { printf("err7: %s\n", error->msg); //pdfapp_error(app, fz_throw("syntaxerror: missing Root object")); delete ctx; return 0; } error = pdf_loadindirect(&ctx->xref->root, ctx->xref, obj); if (error) { printf("err8: %s\n", error->msg); delete ctx; return 0; } obj = fz_dictgets(ctx->xref->trailer, "Info"); if (obj) { error = pdf_loadindirect(&ctx->xref->info, ctx->xref, obj); if (error) { printf("err10: %s\n", error->msg); delete ctx; return 0; } } error = pdf_loadnametrees(ctx->xref); // non-critical error, we can live without the outline if (error) { printf("warn11 - no outline: %s\n", error->msg); } else { error = pdf_loadoutline(&ctx->outline, ctx->xref); if (error) { printf("warn12 - no outline: %s\n", error->msg); } } /* char* ptitle = filename; if (strrchr(app->doctitle, '\\')) pt = 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) { delete ctx; return 0; } } } */ /* * 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); */ ctx->pageno = 1; ctx->zoom = 1.0f; ctx->zoomLevel = 4; ctx->rotate = 0.0f; ctx->rotateLevel = 0; return ctx; }