diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2016-07-19 20:14:01 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2016-07-20 23:44:39 +0800 |
commit | d7dd1e0e564996d3950ff058aa1bb0ef0ceba9cf (patch) | |
tree | c01d6ad55046e2718b850297b7f5ab418a82365e /platform/java | |
parent | 7b40777c5dcd4797f795ca6d442d9ec2f47b0c92 (diff) | |
download | mupdf-d7dd1e0e564996d3950ff058aa1bb0ef0ceba9cf.tar.xz |
JNI: Add PDFDocument methods for grafting objects onto documents.
Diffstat (limited to 'platform/java')
-rw-r--r-- | platform/java/mupdf_native.c | 76 | ||||
-rw-r--r-- | platform/java/mupdf_native.h | 35 | ||||
-rw-r--r-- | platform/java/src/com/artifex/mupdf/fitz/PDFDocument.java | 3 | ||||
-rw-r--r-- | platform/java/src/com/artifex/mupdf/fitz/PDFGraftMap.java | 17 |
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; + } +} |