cbz_document * cbz_open_document(fz_context *ctx, const char *filename) { fz_stream *file; cbz_document *doc; file = fz_open_file(ctx, filename); if (!file) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open file '%s': %s", filename, strerror(errno)); fz_try(ctx) { doc = cbz_open_document_with_stream(ctx, file); } fz_always(ctx) { fz_close(file); } fz_catch(ctx) { fz_rethrow(ctx); } return doc; }
xps_document * xps_open_document(fz_context *ctx, const char *filename) { char buf[2048]; fz_stream *file; char *p; xps_document *doc; if (strstr(filename, "/_rels/.rels") || strstr(filename, "\\_rels\\.rels")) { fz_strlcpy(buf, filename, sizeof buf); p = strstr(buf, "/_rels/.rels"); if (!p) p = strstr(buf, "\\_rels\\.rels"); *p = 0; return xps_open_document_with_directory(ctx, buf); } file = fz_open_file(ctx, filename); fz_try(ctx) doc = xps_open_document_with_stream(ctx, file); fz_always(ctx) fz_drop_stream(ctx, file); fz_catch(ctx) fz_rethrow_message(ctx, "cannot load document '%s'", filename); return doc; }
int xps_open_file(fz_context *ctx, xps_context **ctxp, char *filename) { char buf[2048]; fz_stream *file; char *p; int code; if (strstr(filename, "/_rels/.rels") || strstr(filename, "\\_rels\\.rels")) { fz_strlcpy(buf, filename, sizeof buf); p = strstr(buf, "/_rels/.rels"); if (!p) p = strstr(buf, "\\_rels\\.rels"); *p = 0; return xps_open_directory(ctx, ctxp, buf); } file = fz_open_file(ctx, filename); if (!file) return fz_error_make(ctx, "cannot open file '%s': %s", filename, strerror(errno)); code = xps_open_stream(ctxp, file); fz_close(file); if (code) return fz_error_note(ctx, code, "cannot load document '%s'", filename); return fz_okay; }
static fz_error parseTTFs(char *path, pdf_xref *xref) { fz_error err; fz_stream *file = fz_open_file(xref->ctx, path); if (!file) return fz_error_make(xref->ctx, "fonterror : %s not found", path); err = parseTTF(file, 0, 0, path, xref); fz_close(file); return err; }
static fz_document * svg_open_document(fz_context *ctx, const char *filename) { fz_stream *file; fz_document *doc; file = fz_open_file(ctx, filename); fz_try(ctx) doc = svg_open_document_with_stream(ctx, file); fz_always(ctx) fz_drop_stream(ctx, file); fz_catch(ctx) fz_rethrow(ctx); return doc; }
int open_pdf(fz_context *context, char *filename) { fz_stream *file; int faulty; unsigned int i; /* char * s; */ faulty = 0; /* Resolution */ printf("Opening: %s\n", filename); fz_try(context) { file = fz_open_file(context, filename); doc = (fz_document *) pdf_open_document_with_stream(file); /* TODO Password */ fz_close(file); } fz_catch (context) { fprintf(stderr, "Cannot open: %s\n", filename); faulty = 1; } if (faulty) return faulty; /* XXX need error handling */ pagec = fz_count_pages(doc); pages = malloc(sizeof(struct least_page_info) * pagec); #if 0 return 0; #endif for(i = 0; i < pagec; i++) { pages[i].rendering = 0; pages[i].texture = 0; /* page_to_texture(context, doc, i); */ } page_to_texture(context, doc, 0); printf("Done opening\n"); return 0; }
fz_archive * fz_open_archive(fz_context *ctx, const char *filename) { fz_stream *file; fz_archive *arch = NULL; file = fz_open_file(ctx, filename); fz_try(ctx) arch = fz_open_archive_with_stream(ctx, file); fz_always(ctx) fz_drop_stream(ctx, file); fz_catch(ctx) fz_rethrow(ctx); return arch; }
fz_error pdf_open_xref(pdf_xref **xrefp, const char *filename, char *password) { fz_error error; fz_stream *file; file = fz_open_file(filename); if (!file) return fz_throw("cannot open file '%s': %s", filename, strerror(errno)); error = pdf_open_xref_with_stream(xrefp, file, password); if (error) return fz_rethrow(error, "cannot load document '%s'", filename); fz_close(file); return fz_okay; }
static img_document * img_open_document(fz_context *ctx, const char *filename) { fz_stream *stm; img_document *doc; stm = fz_open_file(ctx, filename); fz_try(ctx) doc = img_open_document_with_stream(ctx, stm); fz_always(ctx) fz_drop_stream(ctx, stm); fz_catch(ctx) fz_rethrow(ctx); return doc; }
static fz_error parseTTCs(char *path, pdf_xref *xref) { FONT_COLLECTION fontcollection; ULONG i, numFonts, *offsettable = NULL; fz_error err; fz_stream *file = fz_open_file(xref->ctx, path); if (!file) { err = fz_error_make(xref->ctx, "fonterror : %s not found", path); goto cleanup; } err = safe_read(file, (char *)&fontcollection, sizeof(FONT_COLLECTION)); if (err) goto cleanup; if (BEtoHl(fontcollection.Tag) != TTAG_ttcf) { err = fz_error_make(xref->ctx, "fonterror : wrong format"); goto cleanup; } if (BEtoHl(fontcollection.Version) != TTC_VERSION1 && BEtoHl(fontcollection.Version) != TTC_VERSION2) { err = fz_error_make(xref->ctx, "fonterror : invalid version"); goto cleanup; } numFonts = BEtoHl(fontcollection.NumFonts); offsettable = fz_calloc(xref->ctx, numFonts, sizeof(ULONG)); err = safe_read(file, (char *)offsettable, numFonts * sizeof(ULONG)); for (i = 0; i < numFonts && !err; i++) err = parseTTF(file, BEtoHl(offsettable[i]), i, path, xref); cleanup: fz_free(xref->ctx, offsettable); if (file) fz_close(file); return err; }
fz_buffer * fz_read_file(fz_context *ctx, const char *filename) { fz_stream *stm; fz_buffer *buf = NULL; fz_var(buf); stm = fz_open_file(ctx, filename); fz_try(ctx) { buf = fz_read_all(stm, 0); } fz_always(ctx) { fz_close(stm); } fz_catch(ctx) { fz_rethrow(ctx); } return buf; }
int main(int argc, char **argv) { fz_context *ctx; fz_stream *fi; pdf_cmap *cmap; int k, m; int ns, nr; if (argc != 2) { fprintf(stderr, "usage: cmapclean input.cmap\n"); return 1; } ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED); if (!ctx) { fprintf(stderr, "cannot initialise context\n"); return 1; } fi = fz_open_file(ctx, argv[1]); cmap = pdf_load_cmap(ctx, fi); fz_close(fi); printf("begincmap\n"); printf("/CMapName /%s def\n", cmap->cmap_name); printf("/WMode %d def\n", cmap->wmode); if (cmap->usecmap_name[0]) printf("/%s usecmap\n", cmap->usecmap_name); if (cmap->codespace_len) { printf("begincodespacerange\n"); for (k = 0; k < cmap->codespace_len; k++) { if (cmap->codespace[k].n == 1) printf("<%02x><%02x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else if (cmap->codespace[k].n == 2) printf("<%04x><%04x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else if (cmap->codespace[k].n == 3) printf("<%06x><%06x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else if (cmap->codespace[k].n == 4) printf("<%08x><%08x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else printf("<%x><%x>\n", cmap->codespace[k].low, cmap->codespace[k].high); } printf("endcodespacerange\n"); } /* 16-bit ranges */ ns = nr = 0; for (k = 0; k < cmap->rlen; k++) if (cmap->ranges[k].high - cmap->ranges[k].low > 0) ++nr; else ++ns; if (ns) { printf("begincidchar\n"); for (k = 0; k < cmap->rlen; k++) { if (cmap->ranges[k].high - cmap->ranges[k].low == 0) { pc(cmap->ranges[k].low); printf("%u\n", cmap->ranges[k].out); } } printf("endcidchar\n"); } if (nr) { printf("begincidrange\n"); for (k = 0; k < cmap->rlen; k++) { if (cmap->ranges[k].high - cmap->ranges[k].low > 0) { pc(cmap->ranges[k].low); pc(cmap->ranges[k].high); printf("%u\n", cmap->ranges[k].out); } } printf("endcidrange\n"); } /* 32-bit ranges */ ns = nr = 0; for (k = 0; k < cmap->xlen; k++) if (cmap->xranges[k].high - cmap->xranges[k].low > 0) ++nr; else ++ns; if (ns) { printf("begincidchar\n"); for (k = 0; k < cmap->xlen; k++) { if (cmap->xranges[k].high - cmap->xranges[k].low == 0) { pc(cmap->xranges[k].low); printf("%u\n", cmap->xranges[k].out); } } printf("endcidchar\n"); } if (nr) { printf("begincidrange\n"); for (k = 0; k < cmap->xlen; k++) { if (cmap->xranges[k].high - cmap->xranges[k].low > 0) { pc(cmap->xranges[k].low); pc(cmap->xranges[k].high); printf("%u\n", cmap->xranges[k].out); } } printf("endcidrange\n"); } /* 1-to-many */ if (cmap->mlen > 0) { printf("beginbfchar\n"); for (k = 0; k < cmap->mlen; k++) { pc(cmap->mranges[k].low); printf("<"); for (m = 0; m < cmap->mranges[k].len; ++m) printf("%04x", cmap->mranges[k].out[m]); printf(">\n"); } printf("endbfchar\n"); } printf("endcmap\n"); fz_free_context(ctx); return 0; }
int main(int argc, char **argv) { pdf_cmap *cmap; fz_stream *fi; FILE *fo; char name[256]; char *realname; int i, k, m; fz_context *ctx; if (argc < 3) { fprintf(stderr, "usage: cmapdump output.c lots of cmap files\n"); return 1; } ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED); if (!ctx) { fprintf(stderr, "cannot initialise context\n"); return 1; } #undef fopen fo = fopen(argv[1], "wb"); if (!fo) { fprintf(stderr, "cmapdump: could not open output file '%s'\n", argv[1]); return 1; } fprintf(fo, "/* This is an automatically generated file. Do not edit. */\n"); for (i = 2; i < argc; i++) { realname = strrchr(argv[i], '/'); if (!realname) realname = strrchr(argv[i], '\\'); if (realname) realname ++; else realname = argv[i]; /* ignore VCS folders (such as .svn) */ if (*realname == '.') continue; if (strlen(realname) > (sizeof name - 1)) { fprintf(stderr, "cmapdump: file name too long\n"); if (fclose(fo)) { fprintf(stderr, "cmapdump: could not close output file '%s'\n", argv[1]); return 1; } return 1; } strcpy(name, realname); clean(name); fi = fz_open_file(ctx, argv[i]); cmap = pdf_load_cmap(ctx, fi); fz_drop_stream(ctx, fi); fprintf(fo, "\n/* %s */\n\n", cmap->cmap_name); if (cmap->rlen) { fprintf(fo, "static const pdf_range cmap_%s_ranges[] = {", name); for (k = 0; k < cmap->rlen; k++) { if (k % 4 == 0) fprintf(fo, "\n"); fprintf(fo, "{%uu,%uu,%uu},", cmap->ranges[k].low, cmap->ranges[k].high, cmap->ranges[k].out); } fprintf(fo, "\n};\n\n"); } if (cmap->xlen) { fprintf(fo, "static const pdf_xrange cmap_%s_xranges[] = {", name); for (k = 0; k < cmap->xlen; k++) { if (k % 4 == 0) fprintf(fo, "\n"); fprintf(fo, "{%uu,%uu,%uu},", cmap->xranges[k].low, cmap->xranges[k].high, cmap->xranges[k].out); } fprintf(fo, "\n};\n\n"); } if (cmap->mlen > 0) { fprintf(fo, "static const pdf_mrange cmap_%s_mranges[] = {", name); for (k = 0; k < cmap->mlen; k++) { fprintf(fo, "\n{%uu,%uu,{", cmap->mranges[k].low, cmap->mranges[k].len); for (m = 0; m < PDF_MRANGE_CAP; ++m) fprintf(fo, "%uu,", cmap->mranges[k].out[m]); fprintf(fo, "}},"); } fprintf(fo, "\n};\n\n"); } fprintf(fo, "static pdf_cmap cmap_%s = {\n", name); fprintf(fo, "\t{-1, pdf_drop_cmap_imp}, "); fprintf(fo, "\"%s\", ", cmap->cmap_name); fprintf(fo, "\"%s\", 0, ", cmap->usecmap_name); fprintf(fo, "%u, ", cmap->wmode); fprintf(fo, "%u,\n\t{ ", cmap->codespace_len); if (cmap->codespace_len == 0) { fprintf(fo, "{0,0,0},"); } for (k = 0; k < cmap->codespace_len; k++) { fprintf(fo, "{%u,%uu,%uu},", cmap->codespace[k].n, cmap->codespace[k].low, cmap->codespace[k].high); } fprintf(fo, " },\n"); if (cmap->rlen) fprintf(fo, "\t%u, %u, (pdf_range*) cmap_%s_ranges,\n", cmap->rlen, cmap->rlen, name); else fprintf(fo, "\t0, 0, NULL,\n"); if (cmap->xlen) fprintf(fo, "\t%u, %u, (pdf_xrange*) cmap_%s_xranges,\n", cmap->xlen, cmap->xlen, name); else fprintf(fo, "\t0, 0, NULL,\n"); if (cmap->mlen) fprintf(fo, "\t%u, %u, (pdf_mrange*) cmap_%s_mranges,\n", cmap->mlen, cmap->mlen, name); else fprintf(fo, "\t0, 0, NULL,\n"); fprintf(fo, "};\n"); if (getenv("verbose")) printf("\t{\"%s\",&cmap_%s},\n", cmap->cmap_name, name); pdf_drop_cmap(ctx, cmap); } if (fclose(fo)) { fprintf(stderr, "cmapdump: could not close output file '%s'\n", argv[1]); return 1; } fz_drop_context(ctx); return 0; }
int main(int argc, char **argv) { fz_context *ctx; fz_stream *fi; pdf_cmap *cmap; int k, m, n, i; struct cidrange *r; if (argc != 2) { fprintf(stderr, "usage: cmapclean input.cmap\n"); return 1; } ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED); if (!ctx) { fprintf(stderr, "cannot initialise context\n"); return 1; } fi = fz_open_file(ctx, argv[1]); cmap = pdf_load_cmap(ctx, fi); fz_close(fi); printf("begincmap\n"); printf("/CMapName /%s def\n", cmap->cmap_name); printf("/WMode %d def\n", cmap->wmode); if (cmap->usecmap_name[0]) printf("/%s usecmap\n", cmap->usecmap_name); if (cmap->codespace_len) { printf("begincodespacerange\n"); for (k = 0; k < cmap->codespace_len; k++) { if (cmap->codespace[k].n == 1) printf("<%02x> <%02x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else if (cmap->codespace[k].n == 2) printf("<%04x> <%04x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else if (cmap->codespace[k].n == 3) printf("<%06x> <%06x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else if (cmap->codespace[k].n == 4) printf("<%08x> <%08x>\n", cmap->codespace[k].low, cmap->codespace[k].high); else printf("<%x> <%x>\n", cmap->codespace[k].low, cmap->codespace[k].high); } printf("endcodespacerange\n"); } n = cmap->rlen + cmap->xlen; r = malloc(n * sizeof *r); i = 0; for (k = 0; k < cmap->rlen; k++) { r[i].lo = cmap->ranges[k].low; r[i].hi = cmap->ranges[k].high; r[i].v = cmap->ranges[k].out; ++i; } for (k = 0; k < cmap->xlen; k++) { r[i].lo = cmap->xranges[k].low; r[i].hi = cmap->xranges[k].high; r[i].v = cmap->xranges[k].out; ++i; } qsort(r, n, sizeof *r, cmpcidrange); if (n) { printf("begincidchar\n"); for (i = 0; i < n; ++i) { for (k = r[i].lo, m = r[i].v; k <= r[i].hi; ++k, ++m) { pc(k); printf("%u\n", m); } } printf("endcidchar\n"); } if (cmap->mlen > 0) { printf("beginbfchar\n"); for (k = 0; k < cmap->mlen; k++) { pc(cmap->mranges[k].low); printf("<"); for (m = 0; m < cmap->mranges[k].len; ++m) printf("%04x", cmap->mranges[k].out[m]); printf(">\n"); } printf("endbfchar\n"); } printf("endcmap\n"); fz_free_context(ctx); return 0; }
int main(int argc, char **argv) { pdf_cmap *cmap; fz_stream *fi; FILE *fo; char name[256]; char *realname; int i, k; fz_context *ctx; if (argc < 3) { fprintf(stderr, "usage: cmapdump output.c lots of cmap files\n"); return 1; } ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED); if (!ctx) { fprintf(stderr, "cannot initialise context\n"); return 1; } fo = fopen(argv[1], "wb"); if (!fo) { fprintf(stderr, "cmapdump: could not open output file '%s'\n", argv[1]); return 1; } fprintf(fo, "/* This is an automatically generated file. Do not edit. */\n"); for (i = 2; i < argc; i++) { realname = strrchr(argv[i], '/'); if (!realname) realname = strrchr(argv[i], '\\'); if (realname) realname ++; else realname = argv[i]; if (strlen(realname) > (sizeof name - 1)) { fprintf(stderr, "cmapdump: file name too long\n"); return 1; } strcpy(name, realname); clean(name); fi = fz_open_file(ctx, argv[i]); fz_lock_stream(fi); cmap = pdf_load_cmap(ctx, fi); fz_close(fi); fprintf(fo, "\n/* %s */\n\n", cmap->cmap_name); fprintf(fo, "static const pdf_range cmap_%s_ranges[] = {", name); if (cmap->rlen == 0) { fprintf(fo, " {0,%d,0}", PDF_CMAP_RANGE); } for (k = 0; k < cmap->rlen; k++) { if (k % 4 == 0) fprintf(fo, "\n"); fprintf(fo, "{%d,%d,%d},", cmap->ranges[k].low, cmap->ranges[k].extent_flags, cmap->ranges[k].offset); } fprintf(fo, "\n};\n\n"); if (cmap->tlen == 0) { fprintf(fo, "static const unsigned short cmap_%s_table[] = { 0 };\n\n", name); } else { fprintf(fo, "static const unsigned short cmap_%s_table[%d] = {", name, cmap->tlen); for (k = 0; k < cmap->tlen; k++) { if (k % 12 == 0) fprintf(fo, "\n"); fprintf(fo, "%d,", cmap->table[k]); } fprintf(fo, "\n};\n\n"); } fprintf(fo, "static pdf_cmap cmap_%s = {\n", name); fprintf(fo, "\t{-1, pdf_free_cmap_imp}, "); fprintf(fo, "\"%s\", ", cmap->cmap_name); fprintf(fo, "\"%s\", 0, ", cmap->usecmap_name); fprintf(fo, "%d, ", cmap->wmode); fprintf(fo, "%d,\n\t{ ", cmap->codespace_len); if (cmap->codespace_len == 0) { fprintf(fo, "{0,0,0},"); } for (k = 0; k < cmap->codespace_len; k++) { fprintf(fo, "{%d,%d,%d},", cmap->codespace[k].n, cmap->codespace[k].low, cmap->codespace[k].high); } fprintf(fo, " },\n"); fprintf(fo, "\t%d, %d, (pdf_range*) cmap_%s_ranges,\n", cmap->rlen, cmap->rlen, name); fprintf(fo, "\t%d, %d, (unsigned short*) cmap_%s_table,\n", cmap->tlen, cmap->tlen, name); fprintf(fo, "};\n"); if (getenv("verbose")) printf("\t{\"%s\",&cmap_%s},\n", cmap->cmap_name, name); } if (fclose(fo)) { fprintf(stderr, "cmapdump: could not close output file '%s'\n", argv[1]); return 1; } fz_free_context(ctx); return 0; }