diff options
author | Robin Watts <robin.watts@artifex.com> | 2015-07-14 16:35:12 +0100 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2015-07-20 17:19:04 +0100 |
commit | 28432abe9a2fcdb47750c0e49cb484c615f5a883 (patch) | |
tree | fdc545552883f44558d0aea3bc2fbbfb346e455f /platform/android/jni/mupdf.c | |
parent | 269fdfce2527cbba02e68d658af3f4b92ef40be0 (diff) | |
download | mupdf-28432abe9a2fcdb47750c0e49cb484c615f5a883.tar.xz |
Add Proofing button to Android UI.
Hit the proofing button, and we create a new temporary .gproof file.
We invoke a new version of MuPDF on that. When that finishes control
returns to us, and we delete the .gproof file.
Currently the new version of MuPDF loads the .gproof file, but fails
to generate any pages from it, as we have no version of ghostscript
on the system. Generating this new ghostscript is the next job.
Diffstat (limited to 'platform/android/jni/mupdf.c')
-rw-r--r-- | platform/android/jni/mupdf.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/platform/android/jni/mupdf.c b/platform/android/jni/mupdf.c index 7a5b90f8..add5598e 100644 --- a/platform/android/jni/mupdf.c +++ b/platform/android/jni/mupdf.c @@ -36,6 +36,7 @@ #define LINE_THICKNESS (0.07f) #define INK_THICKNESS (4.0f) #define SMALL_FLOAT (0.00001) +#define PROOF_RESOLUTION (300) enum { @@ -2675,3 +2676,94 @@ JNI_FN(MuPDFCore_abortCookie)(JNIEnv * env, jobject thiz, jlong cookiePtr) if (cookie != NULL) cookie->abort = 1; } + +static char *tmp_gproof_path(char *path) +{ + FILE *f; + int i; + char *buf = malloc(strlen(path) + 20 + 1); + if (!buf) + return NULL; + + for (i = 0; i < 10000; i++) + { + sprintf(buf, "%s.%d.gproof", path, i); + + LOGE("Trying for %s\n", buf); + f = fopen(buf, "r"); + if (f != NULL) + { + fclose(f); + continue; + } + + f = fopen(buf, "w"); + if (f != NULL) + { + fclose(f); + break; + } + } + if (i == 10000) + { + LOGE("Failed to find temp gproof name"); + free(buf); + return NULL; + } + + LOGE("Rewritten to %s\n", buf); + return buf; +} + +JNIEXPORT jstring JNICALL +JNI_FN(MuPDFCore_startProofInternal)(JNIEnv * env, jobject thiz) +{ + globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; + char *tmp; + jstring ret; + + if (!glo->doc || !glo->current_path) + return NULL; + + tmp = tmp_gproof_path(glo->current_path); + if (!tmp) + return NULL; + + fz_try(ctx) + { + fz_write_gproof_file(ctx, glo->current_path, glo->doc, tmp, PROOF_RESOLUTION); + + LOGE("Creating %s\n", tmp); + ret = (*env)->NewStringUTF(env, tmp); + } + fz_always(ctx) + { + free(tmp); + } + fz_catch(ctx) + { + ret = NULL; + } + return ret; +} + +JNIEXPORT void JNICALL +JNI_FN(MuPDFCore_endProofInternal)(JNIEnv * env, jobject thiz, jstring jfilename) +{ + globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; + const char *tmp; + + if (!glo->doc || !glo->current_path || jfilename == NULL) + return; + + tmp = (*env)->GetStringUTFChars(env, jfilename, NULL); + if (tmp) + { + LOGE("Deleting %s\n", tmp); + + unlink(tmp); + (*env)->ReleaseStringUTFChars(env, jfilename, tmp); + } +} |