summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-11-15 16:10:03 +0100
committerTor Andersson <tor.andersson@artifex.com>2016-11-16 12:09:20 +0100
commitfa9cd67527ab9994fec917f0f88fc16abb9926a6 (patch)
tree9f533a52350e32b0d778c158fbb4eafbe0d0d12e
parent5ed7e6c29233874a68733cdf075260fe261caa40 (diff)
downloadmupdf-fa9cd67527ab9994fec917f0f88fc16abb9926a6.tar.xz
pdf: Add 'compressed/raw' flag to pdf_add_stream.
Also expose the argument to JS and JNI.
-rw-r--r--include/mupdf/pdf/xref.h2
-rw-r--r--platform/java/mupdf_native.c10
-rw-r--r--platform/java/mupdf_native.h8
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java32
-rw-r--r--source/pdf/pdf-page.c2
-rw-r--r--source/pdf/pdf-xref.c4
-rw-r--r--source/tools/murun.c17
7 files changed, 56 insertions, 19 deletions
diff --git a/include/mupdf/pdf/xref.h b/include/mupdf/pdf/xref.h
index c97916f5..971e5b8f 100644
--- a/include/mupdf/pdf/xref.h
+++ b/include/mupdf/pdf/xref.h
@@ -27,7 +27,7 @@ void pdf_update_stream(fz_context *ctx, pdf_document *doc, pdf_obj *ref, fz_buff
pdf_obj *pdf_add_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj);
pdf_obj *pdf_add_object_drop(fz_context *ctx, pdf_document *doc, pdf_obj *obj);
-pdf_obj *pdf_add_stream(fz_context *ctx, pdf_document *doc, fz_buffer *buf, pdf_obj *obj);
+pdf_obj *pdf_add_stream(fz_context *ctx, pdf_document *doc, fz_buffer *buf, pdf_obj *obj, int compressed);
/*
* xref and object / stream api
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index 5dec7b05..722444a2 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -6057,10 +6057,11 @@ FUN(PDFDocument_graftObject)(JNIEnv *env, jobject self, jobject jsrc, jobject jo
}
JNIEXPORT jobject JNICALL
-FUN(PDFDocument_addStreamBuffer)(JNIEnv *env, jobject self, jobject jbuf)
+FUN(PDFDocument_addStreamBuffer)(JNIEnv *env, jobject self, jobject jbuf, jobject jobj, jboolean compressed)
{
fz_context *ctx = get_context(env);
pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_obj *obj = from_PDFObject(env, jobj);
fz_buffer *buf = from_Buffer(env, jbuf);
pdf_obj *ind = NULL;
@@ -6068,7 +6069,7 @@ FUN(PDFDocument_addStreamBuffer)(JNIEnv *env, jobject self, jobject jbuf)
if (!jbuf) { jni_throw_arg(env, "buffer must not be null"); return NULL; }
fz_try(ctx)
- ind = pdf_add_stream(ctx, pdf, buf, NULL);
+ ind = pdf_add_stream(ctx, pdf, buf, obj, compressed);
fz_catch(ctx)
{
jni_rethrow(env, ctx);
@@ -6079,10 +6080,11 @@ FUN(PDFDocument_addStreamBuffer)(JNIEnv *env, jobject self, jobject jbuf)
}
JNIEXPORT jobject JNICALL
-FUN(PDFDocument_addStreamString)(JNIEnv *env, jobject self, jstring jbuf)
+FUN(PDFDocument_addStreamString)(JNIEnv *env, jobject self, jstring jbuf, jobject jobj, jboolean compressed)
{
fz_context *ctx = get_context(env);
pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_obj *obj = from_PDFObject(env, jobj);
fz_buffer *buf = NULL;
const char *sbuf = NULL;
unsigned char *data = NULL;
@@ -6104,7 +6106,7 @@ FUN(PDFDocument_addStreamString)(JNIEnv *env, jobject self, jstring jbuf)
memcpy(data, sbuf, len);
buf = fz_new_buffer_from_data(ctx, data, len);
data = NULL;
- ind = pdf_add_stream(ctx, pdf, buf, NULL);
+ ind = pdf_add_stream(ctx, pdf, buf, obj, compressed);
}
fz_always(ctx)
{
diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h
index c572b6bd..3e6c51b3 100644
--- a/platform/java/mupdf_native.h
+++ b/platform/java/mupdf_native.h
@@ -1471,18 +1471,18 @@ JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_graftObject
/*
* Class: com_artifex_mupdf_fitz_PDFDocument
* Method: addStreamBuffer
- * Signature: (Lcom/artifex/mupdf/fitz/Buffer;)Lcom/artifex/mupdf/fitz/PDFObject;
+ * Signature: (Lcom/artifex/mupdf/fitz/Buffer;Ljava/lang/Object;Z)Lcom/artifex/mupdf/fitz/PDFObject;
*/
JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addStreamBuffer
- (JNIEnv *, jobject, jobject);
+ (JNIEnv *, jobject, jobject, jobject, jboolean);
/*
* Class: com_artifex_mupdf_fitz_PDFDocument
* Method: addStreamString
- * Signature: (Ljava/lang/String;)Lcom/artifex/mupdf/fitz/PDFObject;
+ * Signature: (Ljava/lang/String;Ljava/lang/Object;Z)Lcom/artifex/mupdf/fitz/PDFObject;
*/
JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addStreamString
- (JNIEnv *, jobject, jstring);
+ (JNIEnv *, jobject, jstring, jobject, jboolean);
/*
* Class: com_artifex_mupdf_fitz_PDFDocument
diff --git a/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java b/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java
index 601919d7..f866cb86 100644
--- a/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java
+++ b/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java
@@ -48,15 +48,39 @@ public class PDFDocument
public native PDFGraftMap newPDFGraftMap();
public native PDFObject graftObject(PDFDocument src, PDFObject obj, PDFGraftMap map);
- private native PDFObject addStreamBuffer(Buffer buf);
- private native PDFObject addStreamString(String str);
+ private native PDFObject addStreamBuffer(Buffer buf, Object obj, boolean compressed);
+ private native PDFObject addStreamString(String str, Object obj, boolean compressed);
+
+ public PDFObject addRawStream(Buffer buf, Object obj) {
+ return addStreamBuffer(buf, obj, true);
+ }
+
+ public PDFObject addStream(Buffer buf, Object obj) {
+ return addStreamBuffer(buf, obj, false);
+ }
+
+ public PDFObject addRawStream(String str, Object obj) {
+ return addStreamString(str, obj, true);
+ }
+
+ public PDFObject addStream(String str, Object obj) {
+ return addStreamString(str, obj, false);
+ }
+
+ public PDFObject addRawStream(Buffer buf) {
+ return addStreamBuffer(buf, null, true);
+ }
public PDFObject addStream(Buffer buf) {
- return addStreamBuffer(buf);
+ return addStreamBuffer(buf, null, false);
+ }
+
+ public PDFObject addRawStream(String str) {
+ return addStreamString(str, null, true);
}
public PDFObject addStream(String str) {
- return addStreamString(str);
+ return addStreamString(str, null, false);
}
private native PDFObject addPageBuffer(Rect mediabox, int rotate, PDFObject resources, Buffer contents);
diff --git a/source/pdf/pdf-page.c b/source/pdf/pdf-page.c
index 3a26445c..2112040a 100644
--- a/source/pdf/pdf-page.c
+++ b/source/pdf/pdf-page.c
@@ -673,7 +673,7 @@ pdf_add_page(fz_context *ctx, pdf_document *doc, const fz_rect *mediabox, int ro
pdf_dict_put_drop(ctx, page_obj, PDF_NAME_MediaBox, pdf_new_rect(ctx, doc, mediabox));
pdf_dict_put_drop(ctx, page_obj, PDF_NAME_Rotate, pdf_new_int(ctx, doc, rotate));
pdf_dict_put_drop(ctx, page_obj, PDF_NAME_Resources, pdf_add_object(ctx, doc, resources));
- pdf_dict_put_drop(ctx, page_obj, PDF_NAME_Contents, pdf_add_stream(ctx, doc, contents, NULL));
+ pdf_dict_put_drop(ctx, page_obj, PDF_NAME_Contents, pdf_add_stream(ctx, doc, contents, NULL, 0));
}
fz_catch(ctx)
{
diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
index df3c3254..ccbe4cf6 100644
--- a/source/pdf/pdf-xref.c
+++ b/source/pdf/pdf-xref.c
@@ -2624,7 +2624,7 @@ pdf_add_object_drop(fz_context *ctx, pdf_document *doc, pdf_obj *obj)
}
pdf_obj *
-pdf_add_stream(fz_context *ctx, pdf_document *doc, fz_buffer *buf, pdf_obj *obj)
+pdf_add_stream(fz_context *ctx, pdf_document *doc, fz_buffer *buf, pdf_obj *obj, int compressed)
{
pdf_obj *ind;
if (!obj)
@@ -2632,7 +2632,7 @@ pdf_add_stream(fz_context *ctx, pdf_document *doc, fz_buffer *buf, pdf_obj *obj)
else
ind = pdf_add_object(ctx, doc, obj);
fz_try(ctx)
- pdf_update_stream(ctx, doc, ind, buf, 0);
+ pdf_update_stream(ctx, doc, ind, buf, compressed);
fz_catch(ctx)
{
pdf_drop_obj(ctx, ind);
diff --git a/source/tools/murun.c b/source/tools/murun.c
index 7d26c49c..8ba003b6 100644
--- a/source/tools/murun.c
+++ b/source/tools/murun.c
@@ -3055,7 +3055,7 @@ static void ffi_PDFDocument_addObject(js_State *J)
ffi_pushobj(J, ind);
}
-static void ffi_PDFDocument_addStream(js_State *J)
+static void ffi_PDFDocument_addStream_imp(js_State *J, int compressed)
{
fz_context *ctx = js_getcontext(J);
pdf_document *pdf = js_touserdata(J, 0, "pdf_document");
@@ -3064,7 +3064,7 @@ static void ffi_PDFDocument_addStream(js_State *J)
pdf_obj *ind;
fz_try(ctx)
- ind = pdf_add_stream(ctx, pdf, buf, obj);
+ ind = pdf_add_stream(ctx, pdf, buf, obj, compressed);
fz_always(ctx) {
fz_drop_buffer(ctx, buf);
pdf_drop_obj(ctx, obj);
@@ -3074,6 +3074,16 @@ static void ffi_PDFDocument_addStream(js_State *J)
ffi_pushobj(J, ind);
}
+static void ffi_PDFDocument_addStream(js_State *J)
+{
+ ffi_PDFDocument_addStream_imp(J, 0);
+}
+
+static void ffi_PDFDocument_addRawStream(js_State *J)
+{
+ ffi_PDFDocument_addStream_imp(J, 1);
+}
+
static void ffi_PDFDocument_addImage(js_State *J)
{
fz_context *ctx = js_getcontext(J);
@@ -4358,7 +4368,8 @@ int murun_main(int argc, char **argv)
jsB_propfun(J, "PDFDocument.createObject", ffi_PDFDocument_createObject, 0);
jsB_propfun(J, "PDFDocument.deleteObject", ffi_PDFDocument_deleteObject, 1);
jsB_propfun(J, "PDFDocument.addObject", ffi_PDFDocument_addObject, 1);
- jsB_propfun(J, "PDFDocument.addStream", ffi_PDFDocument_addStream, 1);
+ jsB_propfun(J, "PDFDocument.addStream", ffi_PDFDocument_addStream, 2);
+ jsB_propfun(J, "PDFDocument.addRawStream", ffi_PDFDocument_addRawStream, 2);
jsB_propfun(J, "PDFDocument.addSimpleFont", ffi_PDFDocument_addSimpleFont, 1);
jsB_propfun(J, "PDFDocument.addFont", ffi_PDFDocument_addFont, 1);
jsB_propfun(J, "PDFDocument.addImage", ffi_PDFDocument_addImage, 1);