summaryrefslogtreecommitdiff
path: root/source/tools
diff options
context:
space:
mode:
Diffstat (limited to 'source/tools')
-rw-r--r--source/tools/mudraw.c33
-rw-r--r--source/tools/pdfextract.c36
-rw-r--r--source/tools/pdfinfo.c6
-rw-r--r--source/tools/pdfpages.c2
-rw-r--r--source/tools/pdfshow.c79
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;