| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374 |
- // Copyright (C) 2004-2025 Artifex Software, Inc.
- //
- // This file is part of MuPDF.
- //
- // MuPDF is free software: you can redistribute it and/or modify it under the
- // terms of the GNU Affero General Public License as published by the Free
- // Software Foundation, either version 3 of the License, or (at your option)
- // any later version.
- //
- // MuPDF is distributed in the hope that it will be useful, but WITHOUT ANY
- // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- // FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
- // details.
- //
- // You should have received a copy of the GNU Affero General Public License
- // along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html>
- //
- // Alternative licensing terms are available from the licensor.
- // For commercial licensing, see <https://www.artifex.com/> or contact
- // Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco,
- // CA 94129, USA, for further information.
- /* PDFObject interface */
- JNIEXPORT void JNICALL
- FUN(PDFObject_finalize)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject_safe(env, self);
- if (!ctx || !obj) return;
- (*env)->SetLongField(env, self, fid_PDFObject_pointer, 0);
- pdf_drop_obj(ctx, obj);
- }
- JNIEXPORT jint JNICALL
- FUN(PDFObject_toIndirect)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int num = 0;
- if (!ctx || !obj) return 0;
- fz_try(ctx)
- num = pdf_to_num(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return num;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isIndirect)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_indirect(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isBoolean)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_bool(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isInteger)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_int(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isReal)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_real(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isNumber)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_number(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isString)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_string(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isName)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_name(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isArray)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_array(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isDictionary)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_dict(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isStream)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_is_stream(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jbyteArray JNICALL
- FUN(PDFObject_readStream)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- fz_buffer *buf = NULL;
- jbyteArray arr = NULL;
- if (!ctx || !obj) return NULL;
- fz_var(buf);
- fz_try(ctx)
- {
- unsigned char *data;
- size_t len;
- buf = pdf_load_stream(ctx, obj);
- len = fz_buffer_storage(ctx, buf, &data);
- arr = (*env)->NewByteArray(env, (jsize)len);
- if ((*env)->ExceptionCheck(env))
- fz_throw_java(ctx, env);
- if (!arr)
- fz_throw(ctx, FZ_ERROR_GENERIC, "can not create byte array");
- (*env)->SetByteArrayRegion(env, arr, 0, (jsize)len, (signed char *) data);
- if ((*env)->ExceptionCheck(env))
- fz_throw_java(ctx, env);
- }
- fz_always(ctx)
- fz_drop_buffer(ctx, buf);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return arr;
- }
- JNIEXPORT jbyteArray JNICALL
- FUN(PDFObject_readRawStream)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- fz_buffer *buf = NULL;
- jbyteArray arr = NULL;
- if (!ctx || !obj) return NULL;
- fz_var(buf);
- fz_try(ctx)
- {
- unsigned char *data;
- size_t len;
- buf = pdf_load_raw_stream(ctx, obj);
- len = fz_buffer_storage(ctx, buf, &data);
- arr = (*env)->NewByteArray(env, (jsize)len);
- if ((*env)->ExceptionCheck(env))
- fz_throw_java(ctx, env);
- if (!arr)
- fz_throw(ctx, FZ_ERROR_GENERIC, "cannot create byte array");
- (*env)->SetByteArrayRegion(env, arr, 0, (jsize)len, (signed char *) &data[0]);
- if ((*env)->ExceptionCheck(env))
- fz_throw_java(ctx, env);
- }
- fz_always(ctx)
- fz_drop_buffer(ctx, buf);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return arr;
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_writeObject)(JNIEnv *env, jobject self, jobject jobj)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *ref = from_PDFObject(env, self);
- pdf_document *pdf = pdf_get_bound_document(ctx, ref);
- pdf_obj *obj = from_PDFObject(env, jobj);
- if (!ctx || !obj) return;
- if (!pdf) jni_throw_arg_void(env, "object not bound to document");
- if (!obj) jni_throw_arg_void(env, "object must not be null");
- fz_try(ctx)
- pdf_update_object(ctx, pdf, pdf_to_num(ctx, ref), obj);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_writeStreamBuffer)(JNIEnv *env, jobject self, jobject jbuf)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- pdf_document *pdf = pdf_get_bound_document(ctx, obj);
- fz_buffer *buf = from_Buffer(env, jbuf);
- if (!ctx || !obj) return;
- if (!pdf) jni_throw_arg_void(env, "object not bound to document");
- if (!buf) jni_throw_arg_void(env, "buffer must not be null");
- fz_try(ctx)
- pdf_update_stream(ctx, pdf, obj, buf, 0);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_writeStreamString)(JNIEnv *env, jobject self, jstring jstr)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- pdf_document *pdf = pdf_get_bound_document(ctx, obj);
- const char *str = NULL;
- fz_buffer *buf = NULL;
- if (!ctx || !obj) return;
- if (!pdf) jni_throw_arg_void(env, "object not bound to document");
- if (!jstr) jni_throw_arg_void(env, "string must not be null");
- str = (*env)->GetStringUTFChars(env, jstr, NULL);
- if (!str) return;
- fz_var(buf);
- fz_try(ctx)
- {
- buf = fz_new_buffer_from_copied_data(ctx, (const unsigned char *)str, strlen(str));
- pdf_update_stream(ctx, pdf, obj, buf, 0);
- }
- fz_always(ctx)
- {
- fz_drop_buffer(ctx, buf);
- (*env)->ReleaseStringUTFChars(env, jstr, str);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_writeRawStreamBuffer)(JNIEnv *env, jobject self, jobject jbuf)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- pdf_document *pdf = pdf_get_bound_document(ctx, obj);
- fz_buffer *buf = from_Buffer(env, jbuf);
- if (!ctx || !obj) return;
- if (!pdf) jni_throw_arg_void(env, "object not bound to document");
- if (!buf) jni_throw_arg_void(env, "buffer must not be null");
- fz_try(ctx)
- pdf_update_stream(ctx, pdf, obj, buf, 1);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_writeRawStreamString)(JNIEnv *env, jobject self, jstring jstr)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- pdf_document *pdf = pdf_get_bound_document(ctx, obj);
- const char *str = NULL;
- fz_buffer *buf = NULL;
- if (!ctx || !obj) return;
- if (!pdf) jni_throw_arg_void(env, "object not bound to document");
- if (!jstr) jni_throw_arg_void(env, "string must not be null");
- str = (*env)->GetStringUTFChars(env, jstr, NULL);
- if (!str) return;
- fz_var(buf);
- fz_try(ctx)
- {
- buf = fz_new_buffer_from_copied_data(ctx, (const unsigned char *)str, strlen(str));
- pdf_update_stream(ctx, pdf, obj, buf, 1);
- }
- fz_always(ctx)
- {
- fz_drop_buffer(ctx, buf);
- (*env)->ReleaseStringUTFChars(env, jstr, str);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT jobject JNICALL
- FUN(PDFObject_resolve)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- pdf_obj *ind = NULL;
- jobject jobj;
- if (!ctx) return NULL;
- if (!obj) return to_PDFObject_safe(ctx, env, NULL);
- fz_try(ctx)
- ind = pdf_resolve_indirect(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- pdf_keep_obj(ctx, ind);
- jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(ind));
- if (!jobj)
- pdf_drop_obj(ctx, ind);
- return jobj;
- }
- JNIEXPORT jobject JNICALL
- FUN(PDFObject_getArray)(JNIEnv *env, jobject self, jint index)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- pdf_obj *val = NULL;
- if (!ctx) return NULL;
- if (!arr) return to_PDFObject_safe(ctx, env, NULL);
- fz_try(ctx)
- val = pdf_array_get(ctx, arr, index);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return to_PDFObject_safe(ctx, env, val);
- }
- JNIEXPORT jobject JNICALL
- FUN(PDFObject_getDictionary)(JNIEnv *env, jobject self, jstring jname, jboolean inheritable)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- const char *name = NULL;
- pdf_obj *val = NULL;
- if (!ctx) return NULL;
- if (!jname) jni_throw_arg(env, "name must not be null");
- if (!dict) return to_PDFObject_safe(ctx, env, NULL);
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) jni_throw_run(env, "cannot get name to lookup");
- fz_try(ctx)
- if (inheritable)
- val = pdf_dict_gets_inheritable(ctx, dict, name);
- else
- val = pdf_dict_gets(ctx, dict, name);
- fz_always(ctx)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return to_PDFObject_safe(ctx, env, val);
- }
- JNIEXPORT jobject JNICALL
- FUN(PDFObject_getDictionaryKey)(JNIEnv *env, jobject self, jint index)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *key = NULL;
- if (!ctx) return NULL;
- if (!dict) return to_PDFObject_safe(ctx, env, NULL);
- fz_try(ctx)
- key = pdf_dict_get_key(ctx, dict, index);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return to_PDFObject_safe(ctx, env, key);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putArrayBoolean)(JNIEnv *env, jobject self, jint index, jboolean b)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_put(ctx, arr, index, b ? PDF_TRUE : PDF_FALSE);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putArrayInteger)(JNIEnv *env, jobject self, jint index, jint i)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_put_drop(ctx, arr, index, pdf_new_int(ctx, i));
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putArrayFloat)(JNIEnv *env, jobject self, jint index, jfloat f)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_put_drop(ctx, arr, index, pdf_new_real(ctx, f));
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putArrayString)(JNIEnv *env, jobject self, jint index, jstring jstr)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- const char *str = NULL;
- if (!ctx || !arr) return;
- if (jstr)
- {
- str = (*env)->GetStringUTFChars(env, jstr, NULL);
- if (!str) return;
- }
- fz_try(ctx)
- {
- if (str)
- pdf_array_put_string(ctx, arr, index, str, strlen(str));
- else
- pdf_array_put(ctx, arr, index, PDF_NULL);
- }
- fz_always(ctx)
- {
- if (str)
- (*env)->ReleaseStringUTFChars(env, jstr, str);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putArrayPDFObject)(JNIEnv *env, jobject self, jint index, jobject jobj)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- pdf_obj *obj = from_PDFObject(env, jobj);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_put(ctx, arr, index, obj);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringBoolean)(JNIEnv *env, jobject self, jstring jname, jboolean b)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- const char *name = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- pdf_dict_put(ctx, dict, key, b ? PDF_TRUE : PDF_FALSE);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringInteger)(JNIEnv *env, jobject self, jstring jname, jint i)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- const char *name = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- pdf_dict_put_int(ctx, dict, key, i);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringFloat)(JNIEnv *env, jobject self, jstring jname, jfloat f)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- const char *name = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- pdf_dict_put_real(ctx, dict, key, f);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringString)(JNIEnv *env, jobject self, jstring jname, jstring jstr)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- const char *name = NULL;
- const char *str = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- if (jstr)
- {
- str = (*env)->GetStringUTFChars(env, jstr, NULL);
- if (!str)
- {
- (*env)->ReleaseStringUTFChars(env, jname, str);
- return;
- }
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- if (str)
- pdf_dict_put_string(ctx, dict, key, str, strlen(str));
- else
- pdf_dict_put(ctx, dict, key, PDF_NULL);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (str)
- (*env)->ReleaseStringUTFChars(env, jstr, str);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringPDFObject)(JNIEnv *env, jobject self, jstring jname, jobject jobj)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *val = from_PDFObject(env, jobj);
- const char *name = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- pdf_dict_put(ctx, dict, key, val);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectBoolean)(JNIEnv *env, jobject self, jobject jname, jboolean b)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_put(ctx, dict, name, b ? PDF_TRUE : PDF_FALSE);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectInteger)(JNIEnv *env, jobject self, jobject jname, jint i)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_put_int(ctx, dict, name, i);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectFloat)(JNIEnv *env, jobject self, jobject jname, jfloat f)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_put_real(ctx, dict, name, f);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectString)(JNIEnv *env, jobject self, jobject jname, jstring jstr)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- const char *str = NULL;
- if (!ctx || !dict) return;
- if (jstr)
- {
- str = (*env)->GetStringUTFChars(env, jstr, NULL);
- if (!str) return;
- }
- fz_try(ctx)
- {
- if (str)
- pdf_dict_put_string(ctx, dict, name, str, strlen(str));
- else
- pdf_dict_put(ctx, dict, name, PDF_NULL);
- }
- fz_always(ctx)
- {
- if (str)
- (*env)->ReleaseStringUTFChars(env, jstr, str);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectPDFObject)(JNIEnv *env, jobject self, jobject jname, jobject jobj)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- pdf_obj *obj = from_PDFObject(env, jobj);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_put(ctx, dict, name, obj);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectRect)(JNIEnv *env, jobject self, jobject jname, jobject jrect)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- fz_rect rect = from_Rect(env, jrect);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_put_rect(ctx, dict, name, rect);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectMatrix)(JNIEnv *env, jobject self, jobject jname, jobject jmatrix)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- fz_matrix matrix = from_Matrix(env, jmatrix);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_put_matrix(ctx, dict, name, matrix);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryPDFObjectDate)(JNIEnv *env, jobject self, jobject jname, jlong secs)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_put_date(ctx, dict, name, secs);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringRect)(JNIEnv *env, jobject self, jstring jname, jobject jrect)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- fz_rect rect = from_Rect(env, jrect);
- const char *name = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- pdf_dict_put_rect(ctx, dict, key, rect);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringMatrix)(JNIEnv *env, jobject self, jstring jname, jobject jmatrix)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- fz_matrix matrix = from_Matrix(env, jmatrix);
- const char *name = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- pdf_dict_put_matrix(ctx, dict, key, matrix);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_putDictionaryStringDate)(JNIEnv *env, jobject self, jstring jname, jlong time)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- const char *name = NULL;
- pdf_obj *key = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_var(key);
- fz_try(ctx)
- {
- key = name ? pdf_new_name(ctx, name) : NULL;
- pdf_dict_put_date(ctx, dict, key, time);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, key);
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_deleteArray)(JNIEnv *env, jobject self, jint index)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_delete(ctx, arr, index);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_deleteDictionaryString)(JNIEnv *env, jobject self, jstring jname)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- const char *name = NULL;
- if (!ctx || !dict) return;
- if (jname)
- {
- name = (*env)->GetStringUTFChars(env, jname, NULL);
- if (!name) return;
- }
- fz_try(ctx)
- {
- pdf_dict_dels(ctx, dict, name);
- }
- fz_always(ctx)
- {
- if (name)
- (*env)->ReleaseStringUTFChars(env, jname, name);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_deleteDictionaryPDFObject)(JNIEnv *env, jobject self, jobject jname)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *dict = from_PDFObject(env, self);
- pdf_obj *name = from_PDFObject(env, jname);
- if (!ctx || !dict) return;
- fz_try(ctx)
- pdf_dict_del(ctx, dict, name);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_asBoolean)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int b = 0;
- if (!ctx || !obj) return JNI_FALSE;
- fz_try(ctx)
- b = pdf_to_bool(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return b ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jint JNICALL
- FUN(PDFObject_asInteger)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int i = 0;
- if (!ctx || !obj) return 0;
- fz_try(ctx)
- i = pdf_to_int(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return i;
- }
- JNIEXPORT jfloat JNICALL
- FUN(PDFObject_asFloat)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- float f = 0;
- if (!ctx || !obj) return 0;
- fz_try(ctx)
- f = pdf_to_real(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return f;
- }
- JNIEXPORT jint JNICALL
- FUN(PDFObject_asIndirect)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int ind = 0;
- if (!ctx || !obj) return 0;
- fz_try(ctx)
- ind = pdf_to_num(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return ind;
- }
- JNIEXPORT jstring JNICALL
- FUN(PDFObject_asString)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- const char *str = NULL;
- if (!ctx || !obj) return NULL;
- fz_try(ctx)
- str = pdf_to_text_string(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return (*env)->NewStringUTF(env, str);
- }
- JNIEXPORT jobject JNICALL
- FUN(PDFObject_asByteString)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- const char *str = NULL;
- jobject jbs = NULL;
- jbyte *bs = NULL;
- size_t len;
- if (!ctx || !obj) return NULL;
- fz_try(ctx)
- {
- str = pdf_to_str_buf(ctx, obj);
- len = pdf_to_str_len(ctx, obj);
- }
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- jbs = (*env)->NewByteArray(env, len);
- if ((*env)->ExceptionCheck(env)) return NULL;
- if (!jbs) jni_throw_run(env, "cannot create byte array");
- bs = (*env)->GetByteArrayElements(env, jbs, NULL);
- if (!bs) return NULL;
- memcpy(bs, str, len);
- (*env)->ReleaseByteArrayElements(env, jbs, bs, 0);
- return jbs;
- }
- JNIEXPORT jstring JNICALL
- FUN(PDFObject_asName)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- const char *str = NULL;
- if (!ctx || !obj) return NULL;
- fz_try(ctx)
- str = pdf_to_name(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return (*env)->NewStringUTF(env, str);
- }
- JNIEXPORT jint JNICALL
- FUN(PDFObject_size)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject(env, self);
- int len;
- if (!ctx || !obj) return 0;
- fz_try(ctx)
- {
- if (pdf_is_array(ctx, obj))
- len = pdf_array_len(ctx, obj);
- else if (pdf_is_dict(ctx, obj))
- len = pdf_dict_len(ctx, obj);
- else
- len = 0;
- }
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return len;
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_pushBoolean)(JNIEnv *env, jobject self, jboolean b)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_push_bool(ctx, arr, b);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_pushInteger)(JNIEnv *env, jobject self, jint i)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_push_int(ctx, arr, i);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_pushFloat)(JNIEnv *env, jobject self, jfloat f)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_push_real(ctx, arr, f);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_pushString)(JNIEnv *env, jobject self, jstring jstr)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- const char *str = NULL;
- if (!ctx || !arr) return;
- if (jstr)
- {
- str = (*env)->GetStringUTFChars(env, jstr, NULL);
- if (!str) return;
- }
- fz_try(ctx)
- {
- if (str)
- pdf_array_push_string(ctx, arr, str, strlen(str));
- else
- pdf_array_push(ctx, arr, PDF_NULL);
- }
- fz_always(ctx)
- {
- if (str)
- (*env)->ReleaseStringUTFChars(env, jstr, str);
- }
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT void JNICALL
- FUN(PDFObject_pushPDFObject)(JNIEnv *env, jobject self, jobject jitem)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *arr = from_PDFObject(env, self);
- pdf_obj *item = from_PDFObject(env, jitem);
- if (!ctx || !arr) return;
- fz_try(ctx)
- pdf_array_push(ctx, arr, item);
- fz_always(ctx)
- pdf_drop_obj(ctx, item);
- fz_catch(ctx)
- jni_rethrow_void(env, ctx);
- }
- JNIEXPORT jstring JNICALL
- FUN(PDFObject_toString)(JNIEnv *env, jobject self, jboolean tight, jboolean ascii)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject_safe(env, self);
- jstring string = NULL;
- char *s = NULL;
- size_t n = 0;
- if (!ctx || !obj) return NULL;
- fz_var(s);
- fz_try(ctx)
- {
- s = pdf_sprint_obj(ctx, NULL, 0, &n, obj, tight, ascii);
- string = (*env)->NewStringUTF(env, s);
- }
- fz_always(ctx)
- fz_free(ctx, s);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return string;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_equals)(JNIEnv *env, jobject self, jobject jother)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject_safe(env, self);
- pdf_obj *other = NULL;
- int result = 0;
- if (!ctx) return JNI_FALSE;
- if (!(*env)->IsInstanceOf(env, jother, cls_PDFObject))
- return JNI_FALSE;
- other = from_PDFObject_safe(env, jother);
- fz_try(ctx)
- result = pdf_objcmp(ctx, obj, other);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return result == 0 ? JNI_TRUE : JNI_FALSE;
- }
- JNIEXPORT jboolean JNICALL
- FUN(PDFObject_isFileSpec)(JNIEnv *env, jobject self)
- {
- fz_context *ctx = get_context(env);
- pdf_obj *obj = from_PDFObject_safe(env, self);
- int result = 0;
- if (!ctx) return JNI_FALSE;
- fz_try(ctx)
- result = pdf_is_filespec(ctx, obj);
- fz_catch(ctx)
- jni_rethrow(env, ctx);
- return result ? JNI_TRUE : JNI_FALSE;
- }
|