diff options
Diffstat (limited to 'source/tools')
-rw-r--r-- | source/tools/mudraw.c | 33 | ||||
-rw-r--r-- | source/tools/pdfextract.c | 36 | ||||
-rw-r--r-- | source/tools/pdfinfo.c | 6 | ||||
-rw-r--r-- | source/tools/pdfpages.c | 2 | ||||
-rw-r--r-- | source/tools/pdfshow.c | 79 |
5 files changed, 64 insertions, 92 deletions
diff --git a/source/tools/mudraw.c b/source/tools/mudraw.c index 4614d4bc..705cd6eb 100644 --- a/source/tools/mudraw.c +++ b/source/tools/mudraw.c @@ -310,7 +310,7 @@ static void drawpage(fz_context *ctx, fz_document *doc, int pagenum) { fz_try(ctx) { - dev = fz_new_trace_device(ctx); + dev = fz_new_trace_device(ctx, out); if (list) fz_run_display_list(ctx, list, dev, &fz_identity, &fz_infinite_rect, &cookie); else @@ -420,21 +420,16 @@ static void drawpage(fz_context *ctx, fz_document *doc, int pagenum) fz_matrix ctm; fz_rect bounds, tbounds; char buf[512]; - FILE *file; fz_output *out; if (!strcmp(output, "-")) - file = stdout; + out = fz_new_output_with_file_ptr(ctx, stdout, 0); else { sprintf(buf, output, pagenum); - file = fz_fopen(buf, "wb"); - if (file == NULL) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open file '%s': %s", buf, strerror(errno)); + out = fz_new_output_with_path(ctx, buf, 0); } - out = fz_new_output_with_file(ctx, file, 0); - fz_bound_page(ctx, page, &bounds); zoom = resolution / 72; fz_pre_rotate(fz_scale(&ctm, zoom, zoom), rotation); @@ -456,8 +451,6 @@ static void drawpage(fz_context *ctx, fz_document *doc, int pagenum) fz_drop_device(ctx, dev); dev = NULL; fz_drop_output(ctx, out); - if (file != stdout) - fclose(file); } fz_catch(ctx) { @@ -567,11 +560,11 @@ static void drawpage(fz_context *ctx, fz_document *doc, int pagenum) if (output) { if (!strcmp(output, "-")) - output_file = fz_new_output_with_file(ctx, stdout, 0); + output_file = fz_new_output_with_file_ptr(ctx, stdout, 0); else { sprintf(filename_buf, output, pagenum); - output_file = fz_new_output_to_filename(ctx, filename_buf); + output_file = fz_new_output_with_path(ctx, filename_buf, 0); } if (output_format == OUT_PGM || output_format == OUT_PPM || output_format == OUT_PNM) @@ -860,7 +853,6 @@ int mudraw_main(int argc, char **argv) int c; fz_context *ctx; fz_alloc_context alloc_ctx = { NULL, trace_malloc, trace_realloc, trace_free }; - FILE *my_output = NULL; fz_var(doc); @@ -1045,17 +1037,9 @@ int mudraw_main(int argc, char **argv) if (output_format == OUT_TEXT || output_format == OUT_HTML || output_format == OUT_STEXT || output_format == OUT_TRACE) { if (output && output[0] != '-' && *output != 0) - { - my_output = fopen(output, "w"); - if (my_output == NULL) - { - fprintf(stderr, "Failed to open file '%s' for output\n", output); - exit(1); - } - } + out = fz_new_output_with_path(ctx, output, 0); else - my_output = stdout; - out = fz_new_output_with_file(ctx, my_output, 0); + out = fz_new_output_with_file_ptr(ctx, stdout, 0); } if (output_format == OUT_STEXT || output_format == OUT_TRACE) @@ -1164,9 +1148,6 @@ int mudraw_main(int argc, char **argv) fz_drop_output(ctx, out); out = NULL; - if (my_output != NULL && my_output != stdout) - fclose(my_output); - if (showtime && timing.count > 0) { if (files == 1) diff --git a/source/tools/pdfextract.c b/source/tools/pdfextract.c index a558f264..0c89931a 100644 --- a/source/tools/pdfextract.c +++ b/source/tools/pdfextract.c @@ -89,9 +89,9 @@ static void savefont(pdf_obj *dict, int num) pdf_obj *stream = NULL; pdf_obj *obj; char *ext = ""; - FILE *f; + fz_output *out; char *fontname = "font"; - int n, len; + int len; unsigned char *data; obj = pdf_dict_get(ctx, dict, PDF_NAME_FontName); @@ -138,23 +138,23 @@ static void savefont(pdf_obj *dict, int num) } buf = pdf_load_stream(ctx, doc, pdf_to_num(ctx, stream), pdf_to_gen(ctx, stream)); - - snprintf(namebuf, sizeof(namebuf), "%s-%04d.%s", fontname, num, ext); - printf("extracting font %s\n", namebuf); - - f = fz_fopen(namebuf, "wb"); - if (!f) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot create font file"); - len = fz_buffer_storage(ctx, buf, &data); - n = fwrite(data, 1, len, f); - if (n < len) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot write font file"); - - if (fclose(f) < 0) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot close font file"); - - fz_drop_buffer(ctx, buf); + fz_try(ctx) + { + snprintf(namebuf, sizeof(namebuf), "%s-%04d.%s", fontname, num, ext); + printf("extracting font %s\n", namebuf); + out = fz_new_output_with_path(ctx, namebuf, 0); + fz_try(ctx) + fz_write(ctx, out, data, len); + fz_always(ctx) + fz_drop_output(ctx, out); + fz_catch(ctx) + fz_rethrow(ctx); + } + fz_always(ctx) + fz_drop_buffer(ctx, buf); + fz_catch(ctx) + fz_rethrow(ctx); } static void showobject(int num) diff --git a/source/tools/pdfinfo.c b/source/tools/pdfinfo.c index 4f370f16..6133e7f5 100644 --- a/source/tools/pdfinfo.c +++ b/source/tools/pdfinfo.c @@ -184,14 +184,14 @@ showglobalinfo(fz_context *ctx, globals *glo) if (obj) { fz_printf(ctx, out, "Info object (%d %d R):\n", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); - pdf_output_obj(ctx, out, pdf_resolve_indirect(ctx, obj), 1); + pdf_print_obj(ctx, out, pdf_resolve_indirect(ctx, obj), 1); } obj = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Encrypt); if (obj) { fz_printf(ctx, out, "\nEncryption object (%d %d R):\n", pdf_to_num(ctx, obj), pdf_to_gen(ctx, obj)); - pdf_output_obj(ctx, out, pdf_resolve_indirect(ctx, obj), 1); + pdf_print_obj(ctx, out, pdf_resolve_indirect(ctx, obj), 1); } fz_printf(ctx, out, "\nPages: %d\n\n", glo->pagecount); @@ -1073,7 +1073,7 @@ int pdfinfo_main(int argc, char **argv) ret = 0; fz_try(ctx) { - out = fz_new_output_with_file(ctx, stdout, 0); + out = fz_new_output_with_file_ptr(ctx, stdout, 0); pdfinfo_info(ctx, out, filename, password, show, &argv[fz_optind], argc-fz_optind); } fz_catch(ctx) diff --git a/source/tools/pdfpages.c b/source/tools/pdfpages.c index a0f04e7d..9f688ac5 100644 --- a/source/tools/pdfpages.c +++ b/source/tools/pdfpages.c @@ -241,7 +241,7 @@ int pdfpages_main(int argc, char **argv) ret = 0; fz_try(ctx) { - out = fz_new_output_with_file(ctx, stdout, 0); + out = fz_new_output_with_file_ptr(ctx, stdout, 0); ret = pdfpages_pages(ctx, out, filename, password, &argv[fz_optind], argc-fz_optind); } fz_catch(ctx) diff --git a/source/tools/pdfshow.c b/source/tools/pdfshow.c index 04a2c859..1a3d1fb7 100644 --- a/source/tools/pdfshow.c +++ b/source/tools/pdfshow.c @@ -4,10 +4,9 @@ #include "mupdf/pdf.h" -static FILE *out = NULL; - static pdf_document *doc = NULL; static fz_context *ctx = NULL; +static fz_output *out = NULL; static int showbinary = 0; static int showdecode = 1; static int showcolumn; @@ -26,9 +25,9 @@ static void showtrailer(void) { if (!doc) fz_throw(ctx, FZ_ERROR_GENERIC, "no file specified"); - fprintf(out, "trailer\n"); - pdf_fprint_obj(ctx, out, pdf_trailer(ctx, doc), 0); - fprintf(out, "\n"); + fz_printf(ctx, out, "trailer\n"); + pdf_print_obj(ctx, out, pdf_trailer(ctx, doc), 0); + fz_printf(ctx, out, "\n"); } static void showencrypt(void) @@ -40,9 +39,9 @@ static void showencrypt(void) encrypt = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Encrypt); if (!encrypt) fz_throw(ctx, FZ_ERROR_GENERIC, "document not encrypted"); - fprintf(out, "encryption dictionary\n"); - pdf_fprint_obj(ctx, out, pdf_resolve_indirect(ctx, encrypt), 0); - fprintf(out, "\n"); + fz_printf(ctx, out, "encryption dictionary\n"); + pdf_print_obj(ctx, out, pdf_resolve_indirect(ctx, encrypt), 0); + fz_printf(ctx, out, "\n"); } static void showxref(void) @@ -50,7 +49,7 @@ static void showxref(void) if (!doc) fz_throw(ctx, FZ_ERROR_GENERIC, "no file specified"); pdf_print_xref(ctx, doc); - fprintf(out, "\n"); + fz_printf(ctx, out, "\n"); } static void showpagetree(void) @@ -66,9 +65,9 @@ static void showpagetree(void) for (i = 0; i < count; i++) { ref = pdf_lookup_page_obj(ctx, doc, i); - fprintf(out, "page %d = %d %d R\n", i + 1, pdf_to_num(ctx, ref), pdf_to_gen(ctx, ref)); + fz_printf(ctx, out, "page %d = %d %d R\n", i + 1, pdf_to_num(ctx, ref), pdf_to_gen(ctx, ref)); } - fprintf(out, "\n"); + fz_printf(ctx, out, "\n"); } static void showsafe(unsigned char *buf, int n) @@ -113,7 +112,7 @@ static void showstream(int num, int gen) if (n == 0) break; if (showbinary) - fwrite(buf, 1, n, out); + fz_write(ctx, out, buf, n); else showsafe(buf, n); } @@ -138,19 +137,19 @@ static void showobject(int num, int gen) } else { - fprintf(out, "%d %d obj\n", num, gen); - pdf_fprint_obj(ctx, out, obj, 0); - fprintf(out, "stream\n"); + fz_printf(ctx, out, "%d %d obj\n", num, gen); + pdf_print_obj(ctx, out, obj, 0); + fz_printf(ctx, out, "stream\n"); showstream(num, gen); - fprintf(out, "endstream\n"); - fprintf(out, "endobj\n\n"); + fz_printf(ctx, out, "endstream\n"); + fz_printf(ctx, out, "endobj\n\n"); } } else { - fprintf(out, "%d %d obj\n", num, gen); - pdf_fprint_obj(ctx, out, obj, 0); - fprintf(out, "endobj\n\n"); + fz_printf(ctx, out, "%d %d obj\n", num, gen); + pdf_print_obj(ctx, out, obj, 0); + fz_printf(ctx, out, "endobj\n\n"); } pdf_drop_obj(ctx, obj); @@ -179,15 +178,15 @@ static void showgrep(char *filename) pdf_sort_dict(ctx, obj); - fprintf(out, "%s:%d: ", filename, i); - pdf_fprint_obj(ctx, out, obj, 1); + fz_printf(ctx, out, "%s:%d: ", filename, i); + pdf_print_obj(ctx, out, obj, 1); pdf_drop_obj(ctx, obj); } } - fprintf(out, "%s:trailer: ", filename); - pdf_fprint_obj(ctx, out, pdf_trailer(ctx, doc), 1); + fz_printf(ctx, out, "%s:trailer: ", filename); + pdf_print_obj(ctx, out, pdf_trailer(ctx, doc), 1); } static void showoutline(void) @@ -198,7 +197,7 @@ static void showoutline(void) fz_var(out); fz_try(ctx) { - out = fz_new_output_with_file(ctx, stdout, 0); + out = fz_new_output_with_file_ptr(ctx, stdout, 0); fz_print_outline(ctx, out, outline); } fz_always(ctx) @@ -219,6 +218,13 @@ int pdfshow_main(int argc, char **argv) char *output = NULL; int c; + ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED); + if (!ctx) + { + fprintf(stderr, "cannot initialise context\n"); + exit(1); + } + while ((c = fz_getopt(argc, argv, "p:o:be")) != -1) { switch (c) @@ -236,23 +242,10 @@ int pdfshow_main(int argc, char **argv) filename = argv[fz_optind++]; - out = stdout; if (output) - { - out = fz_fopen(output, "wb"); - if (!out) - { - fprintf(stderr, "cannot open output file: '%s'\n", output); - exit(1); - } - } - - ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED); - if (!ctx) - { - fprintf(stderr, "cannot initialise context\n"); - exit(1); - } + out = fz_new_output_with_path(ctx, output, 0); + else + out = fz_new_output_with_file_ptr(ctx, stdout, 0); fz_var(doc); fz_try(ctx) @@ -284,9 +277,7 @@ int pdfshow_main(int argc, char **argv) { } - if (out != stdout) - fclose(out); - + fz_drop_output(ctx, out); pdf_close_document(ctx, doc); fz_drop_context(ctx); return 0; |