summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2016-07-19 20:14:01 +0800
committerSebastian Rasmussen <sebras@gmail.com>2016-07-20 23:44:39 +0800
commitd7dd1e0e564996d3950ff058aa1bb0ef0ceba9cf (patch)
treec01d6ad55046e2718b850297b7f5ab418a82365e /platform
parent7b40777c5dcd4797f795ca6d442d9ec2f47b0c92 (diff)
downloadmupdf-d7dd1e0e564996d3950ff058aa1bb0ef0ceba9cf.tar.xz
JNI: Add PDFDocument methods for grafting objects onto documents.
Diffstat (limited to 'platform')
-rw-r--r--platform/java/mupdf_native.c76
-rw-r--r--platform/java/mupdf_native.h35
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java3
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/PDFGraftMap.java17
4 files changed, 131 insertions, 0 deletions
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index 08643b7c..18ccebf4 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -72,6 +72,7 @@ static jclass cls_Page;
static jclass cls_Path;
static jclass cls_PathWalker;
static jclass cls_PDFDocument;
+static jclass cls_PDFGraftMap;
static jclass cls_PDFObject;
static jclass cls_Pixmap;
static jclass cls_Point;
@@ -109,6 +110,7 @@ static jfieldID fid_Page_nativeLinks;
static jfieldID fid_Page_pointer;
static jfieldID fid_Path_pointer;
static jfieldID fid_PDFDocument_pointer;
+static jfieldID fid_PDFGraftMap_pointer;
static jfieldID fid_PDFObject_pointer;
static jfieldID fid_Pixmap_pointer;
static jfieldID fid_Rect_x0;
@@ -159,6 +161,7 @@ static jmethodID mid_PathWalker_lineTo;
static jmethodID mid_PathWalker_moveTo;
static jmethodID mid_Path_init;
static jmethodID mid_PDFDocument_init;
+static jmethodID mid_PDFGraftMap_init;
static jmethodID mid_PDFObject_init;
static jmethodID mid_Pixmap_init;
static jmethodID mid_Point_init;
@@ -402,6 +405,10 @@ static int find_fids(JNIEnv *env)
fid_PDFDocument_pointer = get_field(&err, env, "pointer", "J");
mid_PDFDocument_init = get_method(&err, env, "<init>", "(J)V");
+ cls_PDFGraftMap = get_class(&err, env, PKG"PDFGraftMap");
+ fid_PDFGraftMap_pointer = get_field(&err, env, "pointer", "J");
+ mid_PDFGraftMap_init = get_method(&err, env, "<init>", "(J)V");
+
cls_PDFObject = get_class(&err, env, PKG"PDFObject");
fid_PDFObject_pointer = get_field(&err, env, "pointer", "J");
mid_PDFObject_init = get_method(&err, env, "<init>", "(J)V");
@@ -781,6 +788,24 @@ static inline jobject to_Font_safe(fz_context *ctx, JNIEnv *env, fz_font *font)
return jfont;
}
+/* take ownership and don't throw fitz exceptions */
+static inline jobject to_PDFGraftMap_safe_own(fz_context *ctx, JNIEnv *env, jobject pdf, pdf_graft_map *map)
+{
+ jobject jmap;
+
+ if (ctx == NULL || map == NULL || pdf == NULL)
+ return NULL;
+
+ jmap = (*env)->NewObject(env, cls_PDFGraftMap, mid_PDFGraftMap_init, jlong_cast(map), pdf);
+ if (jmap == NULL)
+ {
+ pdf_drop_graft_map(ctx, map);
+ return NULL;
+ }
+
+ return jmap;
+}
+
static inline jobject to_Image(fz_context *ctx, JNIEnv *env, fz_image *img)
{
jobject jobj;
@@ -1163,6 +1188,13 @@ static inline pdf_document *from_PDFDocument(JNIEnv *env, jobject jobj)
return CAST(pdf_document *, (*env)->GetLongField(env, jobj, fid_PDFDocument_pointer));
}
+static inline pdf_graft_map *from_PDFGraftMap(JNIEnv *env, jobject jobj)
+{
+ if (jobj == NULL)
+ return NULL;
+ return CAST(pdf_graft_map *, (*env)->GetLongField(env, jobj, fid_PDFGraftMap_pointer));
+}
+
static inline pdf_obj *from_PDFObject(JNIEnv *env, jobject jobj)
{
if (jobj == NULL)
@@ -5571,6 +5603,50 @@ FUN(PDFDocument_deleteObject)(JNIEnv *env, jobject self, jint num)
}
JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newPDFGraftMap)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_graft_map *map = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ map = pdf_new_graft_map(ctx, pdf);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ return to_PDFGraftMap_safe_own(ctx, env, self, map);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_graftObject)(JNIEnv *env, jobject self, jobject jsrc, jobject jobj, jobject jmap)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *dst = from_PDFDocument(env, self);
+ pdf_document *src = from_PDFDocument(env, jsrc);
+ pdf_obj *obj = from_PDFObject(env, jobj);
+ pdf_graft_map *map = from_PDFGraftMap(env, jmap);
+
+ if (ctx == NULL || dst == NULL || src == NULL || obj == NULL || map == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_graft_object(ctx, dst, src, obj, map);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ return to_PDFObject_safe_own(ctx, env, self, obj);
+}
+
+JNIEXPORT jobject JNICALL
FUN(PDFDocument_addStreamBuffer)(JNIEnv *env, jobject self, jobject jbuf)
{
fz_context *ctx = get_context(env);
diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h
index 3e50fc2d..aad39be2 100644
--- a/platform/java/mupdf_native.h
+++ b/platform/java/mupdf_native.h
@@ -1438,6 +1438,22 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_deleteObject
/*
* Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newPDFGraftMap
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFGraftMap;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newPDFGraftMap
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: graftObject
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFDocument;Lcom/artifex/mupdf/fitz/PDFObject;Lcom/artifex/mupdf/fitz/PDFGraftMap;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_graftObject
+ (JNIEnv *, jobject, jobject, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
* Method: addStreamBuffer
* Signature: (Lcom/artifex/mupdf/fitz/Buffer;)Lcom/artifex/mupdf/fitz/PDFObject;
*/
@@ -1520,6 +1536,25 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_save
}
#endif
#endif
+/* Header for class com_artifex_mupdf_fitz_PDFGraftMap */
+
+#ifndef _Included_com_artifex_mupdf_fitz_PDFGraftMap
+#define _Included_com_artifex_mupdf_fitz_PDFGraftMap
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_artifex_mupdf_fitz_PDFGraftMap
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFGraftMap_finalize
+ (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
/* Header for class com_artifex_mupdf_fitz_PDFObject */
#ifndef _Included_com_artifex_mupdf_fitz_PDFObject
diff --git a/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java b/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java
index dc6b2f8f..507546c5 100644
--- a/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java
+++ b/platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java
@@ -45,6 +45,9 @@ public class PDFDocument
deleteObject(obj.toIndirect());
}
+ 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);
diff --git a/platform/java/src/com/artifex/mupdf/fitz/PDFGraftMap.java b/platform/java/src/com/artifex/mupdf/fitz/PDFGraftMap.java
new file mode 100644
index 00000000..5587ed2c
--- /dev/null
+++ b/platform/java/src/com/artifex/mupdf/fitz/PDFGraftMap.java
@@ -0,0 +1,17 @@
+package com.artifex.mupdf.fitz;
+
+public class PDFGraftMap
+{
+ private long pointer;
+
+ protected native void finalize();
+
+ public void destroy() {
+ finalize();
+ pointer = 0;
+ }
+
+ private PDFGraftMap(long p) {
+ pointer = p;
+ }
+}