From 38d0278ffd22928cfcc66516a5f5a75f2480e702 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Tue, 12 Apr 2016 15:54:22 +0200 Subject: Add 'mutool convert' and new document writer interface. Only supports CBZ writing for now. Also add a zip file writer. --- include/mupdf/fitz.h | 1 + include/mupdf/fitz/buffer.h | 2 ++ include/mupdf/fitz/output.h | 10 ++++++++++ include/mupdf/fitz/unzip.h | 6 ++++++ include/mupdf/fitz/writer.h | 28 ++++++++++++++++++++++++++++ 5 files changed, 47 insertions(+) create mode 100644 include/mupdf/fitz/writer.h (limited to 'include') diff --git a/include/mupdf/fitz.h b/include/mupdf/fitz.h index ec0c87a4..6f4e431d 100644 --- a/include/mupdf/fitz.h +++ b/include/mupdf/fitz.h @@ -58,6 +58,7 @@ extern "C" { #include "mupdf/fitz/util.h" /* Output formats */ +#include "mupdf/fitz/writer.h" #include "mupdf/fitz/output-pnm.h" #include "mupdf/fitz/output-png.h" #include "mupdf/fitz/output-pwg.h" diff --git a/include/mupdf/fitz/buffer.h b/include/mupdf/fitz/buffer.h index 2749c32c..1a8eb80c 100644 --- a/include/mupdf/fitz/buffer.h +++ b/include/mupdf/fitz/buffer.h @@ -130,6 +130,8 @@ void fz_append_buffer(fz_context *ctx, fz_buffer *buf, fz_buffer *extra); void fz_write_buffer(fz_context *ctx, fz_buffer *buf, const void *data, int len); void fz_write_buffer_byte(fz_context *ctx, fz_buffer *buf, int val); void fz_write_buffer_rune(fz_context *ctx, fz_buffer *buf, int val); +void fz_write_buffer_int32_le(fz_context *ctx, fz_buffer *buf, int x); +void fz_write_buffer_int16_le(fz_context *ctx, fz_buffer *buf, int x); void fz_write_buffer_bits(fz_context *ctx, fz_buffer *buf, int val, int bits); void fz_write_buffer_pad(fz_context *ctx, fz_buffer *buf); int fz_buffer_printf(fz_context *ctx, fz_buffer *buffer, const char *fmt, ...); diff --git a/include/mupdf/fitz/output.h b/include/mupdf/fitz/output.h index 8b59d386..35f61aa7 100644 --- a/include/mupdf/fitz/output.h +++ b/include/mupdf/fitz/output.h @@ -97,6 +97,16 @@ static inline void fz_write_int32_le(fz_context *ctx, fz_output *out, int x) fz_write(ctx, out, data, 4); } +static inline void fz_write_int16_le(fz_context *ctx, fz_output *out, int x) +{ + char data[2]; + + data[0] = x; + data[1] = x>>8; + + fz_write(ctx, out, data, 2); +} + static inline void fz_write_byte(fz_context *ctx, fz_output *out, unsigned char x) { fz_write(ctx, out, &x, 1); diff --git a/include/mupdf/fitz/unzip.h b/include/mupdf/fitz/unzip.h index b19ffbd9..64b2b94b 100644 --- a/include/mupdf/fitz/unzip.h +++ b/include/mupdf/fitz/unzip.h @@ -19,4 +19,10 @@ void fz_drop_archive(fz_context *ctx, fz_archive *ar); int fz_count_archive_entries(fz_context *ctx, fz_archive *zip); const char *fz_list_archive_entry(fz_context *ctx, fz_archive *zip, int idx); +typedef struct fz_zip_writer_s fz_zip_writer; + +fz_zip_writer *fz_new_zip_writer(fz_context *ctx, const char *filename); +void fz_write_zip_entry(fz_context *ctx, fz_zip_writer *zip, const char *name, fz_buffer *buf, int compress); +void fz_drop_zip_writer(fz_context *ctx, fz_zip_writer *zip); + #endif diff --git a/include/mupdf/fitz/writer.h b/include/mupdf/fitz/writer.h new file mode 100644 index 00000000..e318568e --- /dev/null +++ b/include/mupdf/fitz/writer.h @@ -0,0 +1,28 @@ +#ifndef MUPDF_FITZ_WRITER_H +#define MUPDF_FITZ_WRITER_H + +#include "mupdf/fitz/system.h" +#include "mupdf/fitz/context.h" +#include "mupdf/fitz/output.h" +#include "mupdf/fitz/document.h" +#include "mupdf/fitz/device.h" + +typedef struct fz_document_writer_s fz_document_writer; + +struct fz_document_writer_s +{ + fz_device *(*begin_page)(fz_context *ctx, fz_document_writer *wri, const fz_rect *mediabox, fz_matrix *ctm); + void (*end_page)(fz_context *ctx, fz_document_writer *wri, fz_device *dev); + void (*drop_imp)(fz_context *ctx, fz_document_writer *wri); +}; + +fz_document_writer *fz_new_document_writer(fz_context *ctx, const char *path, const char *format, const char *options); + +fz_device *fz_begin_page(fz_context *ctx, fz_document_writer *wri, const fz_rect *mediabox, fz_matrix *ctm); +void fz_end_page(fz_context *ctx, fz_document_writer *wri, fz_device *dev); +void fz_drop_document_writer(fz_context *ctx, fz_document_writer *wri); + +fz_document_writer *fz_new_cbz_writer(fz_context *ctx, const char *path, const char *options); +fz_document_writer *fz_new_pdf_writer(fz_context *ctx, const char *path, const char *options); + +#endif -- cgit v1.2.3