summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Annotation.java3
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Buffer.java39
-rw-r--r--platform/java/com/artifex/mupdf/fitz/DisplayList.java7
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Document.java8
-rw-r--r--platform/java/com/artifex/mupdf/fitz/DocumentWriter.java27
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Image.java1
-rw-r--r--platform/java/com/artifex/mupdf/fitz/PDFDocument.java57
-rw-r--r--platform/java/com/artifex/mupdf/fitz/PDFObject.java155
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Page.java5
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Path.java1
-rw-r--r--platform/java/com/artifex/mupdf/fitz/Pixmap.java9
-rw-r--r--platform/java/com/artifex/mupdf/fitz/StructuredText.java21
-rw-r--r--platform/java/mupdf_native.c2439
-rw-r--r--platform/java/mupdf_native.h875
14 files changed, 3645 insertions, 2 deletions
diff --git a/platform/java/com/artifex/mupdf/fitz/Annotation.java b/platform/java/com/artifex/mupdf/fitz/Annotation.java
index 5f652246..855ff5a1 100644
--- a/platform/java/com/artifex/mupdf/fitz/Annotation.java
+++ b/platform/java/com/artifex/mupdf/fitz/Annotation.java
@@ -16,6 +16,9 @@ public class Annotation
}
public native void run(Device dev, Matrix ctm, Cookie cookie);
+ public native Pixmap toPixmap(Matrix ctm, ColorSpace colorspace, boolean alpha);
+ public native Rect getBounds();
+ public native DisplayList toDisplayList();
private native long advance();
}
diff --git a/platform/java/com/artifex/mupdf/fitz/Buffer.java b/platform/java/com/artifex/mupdf/fitz/Buffer.java
new file mode 100644
index 00000000..7f23b062
--- /dev/null
+++ b/platform/java/com/artifex/mupdf/fitz/Buffer.java
@@ -0,0 +1,39 @@
+package com.artifex.mupdf.fitz;
+
+public class Buffer
+{
+ static {
+ Context.init();
+ }
+
+ public static final int DEFAULT_BUFFER_SIZE = 1024;
+
+ private long pointer;
+
+ protected native void finalize();
+
+ public void destroy() {
+ finalize();
+ pointer = 0;
+ }
+
+ private native long newNativeBuffer(int n);
+
+ public Buffer(int n) {
+ pointer = newNativeBuffer(n);
+ }
+
+ public Buffer() {
+ pointer = newNativeBuffer(DEFAULT_BUFFER_SIZE);
+ }
+
+ public native int getLength();
+ public native void writeByte(byte b);
+ public native void writeBytes(byte[] bs);
+ public native void writeBuffer(Buffer buf);
+ public native void writeRune(int rune);
+ public native void writeLine(String line);
+ public native void writeLines(String... lines);
+
+ public native void save(String filename);
+}
diff --git a/platform/java/com/artifex/mupdf/fitz/DisplayList.java b/platform/java/com/artifex/mupdf/fitz/DisplayList.java
index 1933f9ae..3e822eea 100644
--- a/platform/java/com/artifex/mupdf/fitz/DisplayList.java
+++ b/platform/java/com/artifex/mupdf/fitz/DisplayList.java
@@ -17,6 +17,13 @@ public class DisplayList
pointer = newNative();
}
+ private DisplayList(long p) {
+ pointer = p;
+ }
+
+ public native Pixmap toPixmap(Matrix ctm, ColorSpace colorspace, boolean alpha);
+ public native Rect[] search(String needle);
+
public native void run(Device dev, Matrix ctm, Rect scissor, Cookie cookie);
public void run(Device dev, Matrix ctm, Cookie cookie) {
diff --git a/platform/java/com/artifex/mupdf/fitz/Document.java b/platform/java/com/artifex/mupdf/fitz/Document.java
index 22d2f9bf..89e3013b 100644
--- a/platform/java/com/artifex/mupdf/fitz/Document.java
+++ b/platform/java/com/artifex/mupdf/fitz/Document.java
@@ -32,6 +32,10 @@ public class Document
pointer = newNativeWithBuffer(buffer, magic);
}
+ private Document(long p) {
+ pointer = p;
+ }
+
public native boolean needsPassword();
public native boolean authenticatePassword(String password);
@@ -39,6 +43,10 @@ public class Document
public native Page loadPage(int number);
public native Outline loadOutline();
public native String getMetaData(String key);
+ public native boolean isReflowable();
+ public native void layout(float width, float height, float em);
public native boolean isUnencryptedPDF();
+
+ public native PDFDocument toPDFDocument();
}
diff --git a/platform/java/com/artifex/mupdf/fitz/DocumentWriter.java b/platform/java/com/artifex/mupdf/fitz/DocumentWriter.java
new file mode 100644
index 00000000..dce9d73d
--- /dev/null
+++ b/platform/java/com/artifex/mupdf/fitz/DocumentWriter.java
@@ -0,0 +1,27 @@
+package com.artifex.mupdf.fitz;
+
+public class DocumentWriter
+{
+ static {
+ Context.init();
+ }
+
+ private long pointer;
+
+ protected native void finalize();
+
+ public void destroy() {
+ finalize();
+ pointer = 0;
+ }
+
+ private native long newNativeDocumentWriter(String filename, String format, String options);
+
+ public DocumentWriter(String filename, String format, String options) {
+ pointer = newNativeDocumentWriter(filename, format, options);
+ }
+
+ public native Device beingPage(Rect mediabox);
+ public native void endPage(Device device);
+ public native void close();
+}
diff --git a/platform/java/com/artifex/mupdf/fitz/Image.java b/platform/java/com/artifex/mupdf/fitz/Image.java
index a9eb2ffa..4d2f7eb5 100644
--- a/platform/java/com/artifex/mupdf/fitz/Image.java
+++ b/platform/java/com/artifex/mupdf/fitz/Image.java
@@ -31,6 +31,7 @@ public class Image
public native int getXResolution();
public native int getYResolution();
+ public native ColorSpace getColorSpace();
public native int getNumberOfComponents();
public native int getBitsPerComponent();
public native boolean getImageMask();
diff --git a/platform/java/com/artifex/mupdf/fitz/PDFDocument.java b/platform/java/com/artifex/mupdf/fitz/PDFDocument.java
new file mode 100644
index 00000000..58a3e3a6
--- /dev/null
+++ b/platform/java/com/artifex/mupdf/fitz/PDFDocument.java
@@ -0,0 +1,57 @@
+package com.artifex.mupdf.fitz;
+
+public class PDFDocument
+{
+ static {
+ Context.init();
+ }
+
+ private long pointer;
+
+ protected native void finalize();
+
+ public void destroy() {
+ finalize();
+ pointer = 0;
+ }
+
+ private PDFDocument(long p) {
+ pointer = p;
+ }
+
+ public native Document toDocument();
+
+ public native int countPages();
+ public native PDFObject findPage(int at);
+
+ public native PDFObject getTrailer();
+ public native int countObjects();
+
+ public native PDFObject newNull();
+ public native PDFObject newBoolean(boolean b);
+ public native PDFObject newInteger(int i);
+ public native PDFObject newReal(float f);
+ public native PDFObject newString(String s);
+ public native PDFObject newName(String name);
+ public native PDFObject newIndirect(int num, int gen);
+ public native PDFObject newArray();
+ public native PDFObject newDictionary();
+
+ public native PDFObject addObject(PDFObject obj);
+ public native PDFObject createObject();
+ public native void deleteObject(int i);
+
+ public native PDFObject addStream(Buffer buf);
+
+ public native PDFObject addPage(Rect mediabox, int rotate, PDFObject resources, Buffer contents);
+ public native void insertPage(int at, PDFObject page);
+ public native void deletePage(int at);
+ public native PDFObject addImage(Image image);
+ public native PDFObject addSimpleFont(Font font);
+ public native PDFObject addFont(Font font);
+ public native void save(String filename, String options);
+
+ public void deleteObject(PDFObject obj) {
+ deleteObject(obj.toIndirect());
+ }
+}
diff --git a/platform/java/com/artifex/mupdf/fitz/PDFObject.java b/platform/java/com/artifex/mupdf/fitz/PDFObject.java
new file mode 100644
index 00000000..f2e926f2
--- /dev/null
+++ b/platform/java/com/artifex/mupdf/fitz/PDFObject.java
@@ -0,0 +1,155 @@
+package com.artifex.mupdf.fitz;
+
+public class PDFObject
+{
+ static {
+ Context.init();
+ }
+
+ private long pointer;
+
+ protected native void finalize();
+
+ public void destroy() {
+ finalize();
+ pointer = 0;
+ }
+
+ private PDFObject(long p) {
+ pointer = p;
+ }
+
+ public native boolean isIndirect();
+ public native boolean isNull();
+ public native boolean isBoolean();
+ public native boolean isInteger();
+ public native boolean isReal();
+ public native boolean isNumber();
+ public native boolean isString();
+ public native boolean isName();
+ public native boolean isArray();
+ public native boolean isDictionary();
+ public native boolean isStream();
+
+ public native boolean toBoolean();
+ public native int toInteger();
+ public native float toFloat();
+ public native byte[] toByteString();
+ public native int toIndirect();
+ public native String toString(boolean tight);
+
+ public String toString() {
+ return toString(false);
+ }
+
+ public native PDFObject resolve();
+
+ public native byte[] readStream();
+ public native byte[] readRawStream();
+
+ public native PDFObject getArray(int index);
+ public native PDFObject getDictionary(String name);
+
+ public PDFObject get(int index) {
+ return getArray(index);
+ }
+
+ public PDFObject get(String name) {
+ return getDictionary(name);
+ }
+
+ public native void putArrayBoolean(int index, boolean b);
+ public native void putArrayInteger(int index, int i);
+ public native void putArrayFloat(int index, float f);
+ public native void putArrayString(int index, String str);
+ public native void putArrayPDFObject(int index, PDFObject obj);
+
+ public native void putDictionaryStringBoolean(String name, boolean b);
+ public native void putDictionaryStringInteger(String name, int i);
+ public native void putDictionaryStringFloat(String name, float f);
+ public native void putDictionaryStringString(String name, String str);
+ public native void putDictionaryStringPDFObject(String name, PDFObject obj);
+
+ public native void putDictionaryPDFObjectBoolean(PDFObject name, boolean b);
+ public native void putDictionaryPDFObjectInteger(PDFObject name, int i);
+ public native void putDictionaryPDFObjectFloat(PDFObject name, float f);
+ public native void putDictionaryPDFObjectString(PDFObject name, String str);
+ public native void putDictionaryPDFObjectPDFObject(PDFObject name, PDFObject obj);
+
+
+ public void put(int index, boolean b) {
+ putArrayBoolean(index, b);
+ }
+
+ public void put(int index, int i) {
+ putArrayInteger(index, i);
+ }
+
+ public void put(int index, float f) {
+ putArrayFloat(index, f);
+ }
+
+ public void put(int index, String s) {
+ putArrayString(index, s);
+ }
+
+ public void put(int index, PDFObject obj) {
+ putArrayPDFObject(index, obj);
+ }
+
+ public void put(String name, boolean b) {
+ putDictionaryStringBoolean(name, b);
+ }
+
+ public void put(String name, int i) {
+ putDictionaryStringInteger(name, i);
+ }
+
+ public void put(String name, float f) {
+ putDictionaryStringFloat(name, f);
+ }
+
+ public void put(String name, String str) {
+ putDictionaryStringString(name, str);
+ }
+
+ public void put(String name, PDFObject obj) {
+ putDictionaryStringPDFObject(name, obj);
+ }
+
+ public void put(PDFObject name, boolean b) {
+ putDictionaryPDFObjectBoolean(name, b);
+ }
+
+ public void put(PDFObject name, int i) {
+ putDictionaryPDFObjectInteger(name, i);
+ }
+
+ public void put(PDFObject name, float f) {
+ putDictionaryPDFObjectFloat(name, f);
+ }
+
+ public void put(PDFObject name, String str) {
+ putDictionaryPDFObjectString(name, str);
+ }
+
+ public void put(PDFObject name, PDFObject obj) {
+ putDictionaryPDFObjectPDFObject(name, obj);
+ }
+
+ public native void deleteArray(int index);
+ public native void deleteDictionaryString(String name);
+ public native void deleteDictionaryPDFObject(PDFObject name);
+
+ public void delete(int index) {
+ deleteArray(index);
+ }
+
+ public void delete(String name) {
+ deleteDictionaryString(name);
+ }
+
+ public void delete(PDFObject name) {
+ deleteDictionaryPDFObject(name);
+ }
+}
diff --git a/platform/java/com/artifex/mupdf/fitz/Page.java b/platform/java/com/artifex/mupdf/fitz/Page.java
index 71f39857..64fe4030 100644
--- a/platform/java/com/artifex/mupdf/fitz/Page.java
+++ b/platform/java/com/artifex/mupdf/fitz/Page.java
@@ -35,4 +35,9 @@ public class Page
// FIXME: Later. Much later.
//fz_transition *fz_page_presentation(fz_document *doc, fz_page *page, float *duration);
+
+ public native DisplayList toDisplayList(boolean no_annotations);
+ public native StructuredText toStructuredText();
+
+ public native Rect[] search(String needle);
}
diff --git a/platform/java/com/artifex/mupdf/fitz/Path.java b/platform/java/com/artifex/mupdf/fitz/Path.java
index fa925bab..455dce69 100644
--- a/platform/java/com/artifex/mupdf/fitz/Path.java
+++ b/platform/java/com/artifex/mupdf/fitz/Path.java
@@ -33,6 +33,7 @@ public class Path implements PathWalker
public native void curveTo(float cx1, float cy1, float cx2, float cy2, float ex, float ey);
public native void curveToV(float cx, float cy, float ex, float ey);
public native void curveToY(float cx, float cy, float ex, float ey);
+ public native void rect(int x1, int y1, int x2, int y2);
public native void closePath();
public void moveTo(Point xy) {
diff --git a/platform/java/com/artifex/mupdf/fitz/Pixmap.java b/platform/java/com/artifex/mupdf/fitz/Pixmap.java
index ac14e95c..52432fea 100644
--- a/platform/java/com/artifex/mupdf/fitz/Pixmap.java
+++ b/platform/java/com/artifex/mupdf/fitz/Pixmap.java
@@ -55,12 +55,21 @@ public class Pixmap
public native boolean getAlpha();
public native ColorSpace getColorSpace();
public native byte[] getSamples();
+ public native byte getSamples(int x, int y, int n);
public native int[] getPixels(); /* only valid for RGBA or BGRA pixmaps */
+ public native int getXResolution();
+ public native int getYResolution();
public void clear(int value) {
clearWithValue(value);
}
+ public Rect getBounds() {
+ int x = getX();
+ int y = getY();
+ return new Rect(x, y, x + getWidth(), y+ getHeight());
+ }
+
public String toString() {
return "Pixmap(w=" + getWidth() +
" h=" + getHeight() +
diff --git a/platform/java/com/artifex/mupdf/fitz/StructuredText.java b/platform/java/com/artifex/mupdf/fitz/StructuredText.java
new file mode 100644
index 00000000..0f3549d5
--- /dev/null
+++ b/platform/java/com/artifex/mupdf/fitz/StructuredText.java
@@ -0,0 +1,21 @@
+package com.artifex.mupdf.fitz;
+
+public class StructuredText
+{
+ private long pointer;
+
+ protected native void finalize();
+
+ public void destroy() {
+ finalize();
+ pointer = 0;
+ }
+
+ private StructuredText(long p) {
+ pointer = p;
+ }
+
+ public native Rect[] search(String needle);
+ public native Rect[] highlight(Rect rect);
+ public native String copy(Rect rect);
+}
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index 9b910d22..ef9a04b8 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -50,11 +50,13 @@ static inline jlong jlong_cast(const void *p)
/* All the cached classes/mids/fids we need. */
static jclass cls_Annot;
+static jclass cls_Buffer;
static jclass cls_ColorSpace;
static jclass cls_Cookie;
static jclass cls_Device;
static jclass cls_DisplayList;
static jclass cls_Document;
+static jclass cls_DocumentWriter;
static jclass cls_Exception;
static jclass cls_Font;
static jclass cls_Image;
@@ -67,21 +69,26 @@ static jclass cls_Outline;
static jclass cls_Page;
static jclass cls_Path;
static jclass cls_PathWalker;
+static jclass cls_PDFDocument;
+static jclass cls_PDFObject;
static jclass cls_Pixmap;
static jclass cls_Point;
static jclass cls_Rect;
static jclass cls_Shade;
static jclass cls_StrokeState;
+static jclass cls_StructuredText;
static jclass cls_Text;
static jclass cls_TextWalker;
static jclass cls_TryLaterException;
static jfieldID fid_Annot_pointer;
+static jfieldID fid_Buffer_pointer;
static jfieldID fid_ColorSpace_pointer;
static jfieldID fid_Cookie_pointer;
static jfieldID fid_Device_pointer;
static jfieldID fid_DisplayList_pointer;
static jfieldID fid_Document_pointer;
+static jfieldID fid_DocumentWriter_pointer;
static jfieldID fid_Font_pointer;
static jfieldID fid_Image_pointer;
static jfieldID fid_Link_pointer;
@@ -97,6 +104,8 @@ static jfieldID fid_Outline_pointer;
static jfieldID fid_Page_nativeAnnots;
static jfieldID fid_Page_pointer;
static jfieldID fid_Path_pointer;
+static jfieldID fid_PDFDocument_pointer;
+static jfieldID fid_PDFObject_pointer;
static jfieldID fid_Pixmap_pointer;
static jfieldID fid_Rect_x0;
static jfieldID fid_Rect_x1;
@@ -104,6 +113,7 @@ static jfieldID fid_Rect_y0;
static jfieldID fid_Rect_y1;
static jfieldID fid_Shade_pointer;
static jfieldID fid_StrokeState_pointer;
+static jfieldID fid_StructuredText_pointer;
static jfieldID fid_Text_pointer;
static jmethodID mid_Annot_init;
@@ -126,9 +136,12 @@ static jmethodID mid_Device_fillPath;
static jmethodID mid_Device_fillShade;
static jmethodID mid_Device_fillText;
static jmethodID mid_Device_ignoreText;
+static jmethodID mid_Device_init;
static jmethodID mid_Device_popClip;
static jmethodID mid_Device_strokePath;
static jmethodID mid_Device_strokeText;
+static jmethodID mid_DisplayList_init;
+static jmethodID mid_Document_init;
static jmethodID mid_Font_init;
static jmethodID mid_Image_init;
static jmethodID mid_Matrix_init;
@@ -140,11 +153,14 @@ static jmethodID mid_PathWalker_curveTo;
static jmethodID mid_PathWalker_lineTo;
static jmethodID mid_PathWalker_moveTo;
static jmethodID mid_Path_init;
+static jmethodID mid_PDFDocument_init;
+static jmethodID mid_PDFObject_init;
static jmethodID mid_Pixmap_init;
static jmethodID mid_Point_init;
static jmethodID mid_Rect_init;
static jmethodID mid_Shade_init;
static jmethodID mid_StrokeState_init;
+static jmethodID mid_StructuredText_init;
static jmethodID mid_Text_init;
static jmethodID mid_TextWalker_showGlyph;
@@ -291,6 +307,9 @@ static int find_fids(JNIEnv *env)
fid_Annot_pointer = get_field(&err, env, "pointer", "J");
mid_Annot_init = get_method(&err, env, "<init>", "(J)V");
+ cls_Buffer = get_class(&err, env, PKG"Buffer");
+ fid_Buffer_pointer = get_field(&err, env, "pointer", "J");
+
cls_ColorSpace = get_class(&err, env, PKG"ColorSpace");
fid_ColorSpace_pointer = get_field(&err, env, "pointer", "J");
mid_ColorSpace_init = get_method(&err, env, "<init>", "(J)V");
@@ -301,6 +320,7 @@ static int find_fids(JNIEnv *env)
cls_Device = get_class(&err, env, PKG"Device");
fid_Device_pointer = get_field(&err, env, "pointer", "J");
+ mid_Device_init = get_method(&err, env, "<init>", "(J)V");
mid_Device_fillPath = get_method(&err, env, "fillPath", "(L"PKG"Path;ZL"PKG"Matrix;L"PKG"ColorSpace;[FF)V");
mid_Device_strokePath = get_method(&err, env, "strokePath", "(L"PKG"Path;L"PKG"StrokeState;L"PKG"Matrix;L"PKG"ColorSpace;[FF)V");
mid_Device_clipPath = get_method(&err, env, "clipPath", "(L"PKG"Path;ZL"PKG"Matrix;)V");
@@ -328,9 +348,14 @@ static int find_fids(JNIEnv *env)
cls_DisplayList = get_class(&err, env, PKG"DisplayList");
fid_DisplayList_pointer = get_field(&err, env, "pointer", "J");
+ mid_DisplayList_init = get_method(&err, env, "<init>", "(J)V");
cls_Document = get_class(&err, env, PKG"Document");
fid_Document_pointer = get_field(&err, env, "pointer", "J");
+ mid_Document_init = get_method(&err, env, "<init>", "(J)V");
+
+ cls_DocumentWriter = get_class(&err, env, PKG"DocumentWriter");
+ fid_DocumentWriter_pointer = get_field(&err, env, "pointer", "J");
cls_Font = get_class(&err, env, PKG"Font");
fid_Font_pointer = get_field(&err, env, "pointer", "J");
@@ -365,6 +390,14 @@ static int find_fids(JNIEnv *env)
fid_Path_pointer = get_field(&err, env, "pointer", "J");
mid_Path_init = get_method(&err, env, "<init>", "(J)V");
+ cls_PDFDocument = get_class(&err, env, PKG"PDFDocument");
+ fid_PDFDocument_pointer = get_field(&err, env, "pointer", "J");
+ mid_PDFDocument_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");
+
cls_Pixmap = get_class(&err, env, PKG"Pixmap");
fid_Pixmap_pointer = get_field(&err, env, "pointer", "J");
mid_Pixmap_init = get_method(&err, env, "<init>", "(J)V");
@@ -393,6 +426,10 @@ static int find_fids(JNIEnv *env)
fid_StrokeState_pointer = get_field(&err, env, "pointer", "J");
mid_StrokeState_init = get_method(&err, env, "<init>", "(J)V");
+ cls_StructuredText = get_class(&err, env, PKG"StructuredText");
+ fid_StructuredText_pointer = get_field(&err, env, "pointer", "J");
+ mid_StructuredText_init = get_method(&err, env, "<init>", "(J)V");
+
cls_Text = get_class(&err, env, PKG"Text");
fid_Text_pointer = get_field(&err, env, "pointer", "J");
mid_Text_init = get_method(&err, env, "<init>", "(J)V");
@@ -434,6 +471,8 @@ static void lose_fids(JNIEnv *env)
(*env)->DeleteGlobalRef(env, cls_Page);
(*env)->DeleteGlobalRef(env, cls_Path);
(*env)->DeleteGlobalRef(env, cls_PathWalker);
+ (*env)->DeleteGlobalRef(env, cls_PDFDocument);
+ (*env)->DeleteGlobalRef(env, cls_PDFObject);
(*env)->DeleteGlobalRef(env, cls_Pixmap);
(*env)->DeleteGlobalRef(env, cls_Point);
(*env)->DeleteGlobalRef(env, cls_Rect);
@@ -679,6 +718,42 @@ static inline jobject to_ColorSpace(fz_context *ctx, JNIEnv *env, fz_colorspace
return jobj;
}
+/* take ownership and don't throw fitz exceptions */
+static inline jobject to_Device_safe_own(fz_context *ctx, JNIEnv *env, fz_device *device)
+{
+ jobject jdev;
+
+ if (ctx == NULL || device == NULL)
+ return NULL;
+
+ jdev = (*env)->NewObject(env, cls_DisplayList, mid_Device_init, jlong_cast(device));
+ if (jdev == NULL)
+ {
+ fz_drop_device(ctx, device);
+ return NULL;
+ }
+
+ return jdev;
+}
+
+/* take ownership and don't throw fitz exceptions */
+static inline jobject to_DisplayList_safe_own(fz_context *ctx, JNIEnv *env, fz_display_list *list)
+{
+ jobject jlist;
+
+ if (ctx == NULL || list == NULL)
+ return NULL;
+
+ jlist = (*env)->NewObject(env, cls_DisplayList, mid_DisplayList_init, jlong_cast(list));
+ if (jlist == NULL)
+ {
+ fz_drop_display_list(ctx, list);
+ return NULL;
+ }
+
+ return jlist;
+}
+
/* don't throw fitz exceptions */
static inline jobject to_Font_safe(fz_context *ctx, JNIEnv *env, fz_font *font)
{
@@ -762,6 +837,69 @@ static inline jobject to_Path(fz_context *ctx, JNIEnv *env, const fz_path *path)
return jobj;
}
+/* don't throw fitz exceptions */
+static inline jobject to_Document_safe(fz_context *ctx, JNIEnv *env, fz_document *doc)
+{
+ jobject jdoc;
+
+ if (ctx == NULL || doc == NULL)
+ return NULL;
+
+ jdoc = (*env)->NewObject(env, cls_Document, mid_Document_init, jlong_cast(doc));
+ if (jdoc != NULL)
+ fz_keep_document(ctx, doc);
+
+ return jdoc;
+}
+
+/* don't throw fitz exceptions */
+static inline jobject to_PDFDocument_safe(fz_context *ctx, JNIEnv *env, pdf_document *pdf)
+{
+ jobject jpdf;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ jpdf = (*env)->NewObject(env, cls_PDFDocument, mid_PDFDocument_init, jlong_cast(pdf));
+ if (jpdf != NULL)
+ fz_keep_document(ctx, (fz_document *) pdf);
+
+ return jpdf;
+}
+
+/* don't throw fitz exceptions */
+static inline jobject to_PDFObject_safe(fz_context *ctx, JNIEnv *env, jobject pdf, pdf_obj *obj)
+{
+ jobject jobj;
+
+ if (ctx == NULL || obj == NULL)
+ return NULL;
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), pdf);
+ if (jobj != NULL)
+ pdf_keep_obj(ctx, obj);
+
+ return jobj;
+}
+
+/* take ownership and don't throw fitz exceptions */
+static inline jobject to_PDFObject_safe_own(fz_context *ctx, JNIEnv *env, jobject pdf, pdf_obj *obj)
+{
+ jobject jobj;
+
+ if (ctx == NULL || obj == NULL)
+ return NULL;
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), pdf);
+ if (jobj == NULL)
+ {
+ pdf_drop_obj(ctx, obj);
+ return NULL;
+ }
+
+ return jobj;
+}
+
/* take ownership and don't throw fitz exceptions */
static inline jobject to_Pixmap_safe_own(fz_context *ctx, JNIEnv *env, fz_pixmap *pixmap)
{
@@ -812,6 +950,24 @@ static inline jobject to_StrokeState(fz_context *ctx, JNIEnv *env, const fz_stro
return jobj;
}
+/* take ownership and don't throw fitz exceptions */
+static inline jobject to_StructuredText_safe_own(fz_context *ctx, JNIEnv *env, fz_stext_page *text)
+{
+ jobject jtext;
+
+ if (ctx == NULL || text == NULL)
+ return NULL;
+
+ jtext = (*env)->NewObject(env, cls_StructuredText, mid_StructuredText_init, jlong_cast(text));
+ if (jtext == NULL)
+ {
+ fz_drop_stext_page(ctx, text);
+ return NULL;
+ }
+
+ return jtext;
+}
+
static inline jobject to_Text(fz_context *ctx, JNIEnv *env, const fz_text *text)
{
jobject jobj;
@@ -886,6 +1042,13 @@ static inline fz_annot *from_Annotation(JNIEnv *env, jobject jobj)
return CAST(fz_annot *, (*env)->GetLongField(env, jobj, fid_Annot_pointer));
}
+static inline fz_buffer *from_Buffer(JNIEnv *env, jobject jobj)
+{
+ if (jobj == NULL)
+ return NULL;
+ return CAST(fz_buffer *, (*env)->GetLongField(env, jobj, fid_Buffer_pointer));
+}
+
static inline fz_cookie *from_Cookie(JNIEnv *env, jobject jobj)
{
if (jobj == NULL)
@@ -921,6 +1084,27 @@ static inline fz_document *from_Document(JNIEnv *env, jobject jobj)
return CAST(fz_document *, (*env)->GetLongField(env, jobj, fid_Document_pointer));
}
+static inline fz_document_writer *from_DocumentWriter(JNIEnv *env, jobject jobj)
+{
+ if (jobj == NULL)
+ return NULL;
+ return CAST(fz_document_writer *, (*env)->GetLongField(env, jobj, fid_DocumentWriter_pointer));
+}
+
+static inline pdf_document *from_PDFDocument(JNIEnv *env, jobject jobj)
+{
+ if (jobj == NULL)
+ return NULL;
+ return CAST(pdf_document *, (*env)->GetLongField(env, jobj, fid_PDFDocument_pointer));
+}
+
+static inline pdf_obj *from_PDFObject(JNIEnv *env, jobject jobj)
+{
+ if (jobj == NULL)
+ return NULL;
+ return CAST(pdf_obj *, (*env)->GetLongField(env, jobj, fid_PDFObject_pointer));
+}
+
static inline fz_font *from_Font(JNIEnv *env, jobject jobj)
{
if (jobj == NULL)
@@ -984,6 +1168,13 @@ static inline fz_stroke_state *from_StrokeState(JNIEnv *env, jobject jobj)
return CAST(fz_stroke_state *, (*env)->GetLongField(env, jobj, fid_StrokeState_pointer));
}
+static inline fz_stext_page *from_StructuredText(JNIEnv *env, jobject jobj)
+{
+ if (jobj == NULL)
+ return NULL;
+ return CAST(fz_stext_page *, (*env)->GetLongField(env, jobj, fid_StructuredText_pointer));
+}
+
static inline fz_text *from_Text(JNIEnv *env, jobject jobj)
{
if (jobj == NULL)
@@ -2466,6 +2657,34 @@ FUN(Pixmap_getSamples)(JNIEnv *env, jobject self)
return arr;
}
+JNIEXPORT jbyte JNICALL
+FUN(Pixmap_getSample)(JNIEnv *env, jobject self, jint x, jint y, jint k)
+{
+ fz_context *ctx = get_context(env);
+ fz_pixmap *pixmap = from_Pixmap(env, self);
+
+ if (ctx == NULL || pixmap == NULL)
+ return 0;
+
+ if (x < 0 || x >= pixmap->w)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "X out of range");
+ return 0;
+ }
+ if (y < 0 || y >= pixmap->h)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "Y out of range");
+ return 0;
+ }
+ if (k < 0 || k >= pixmap->n)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "K out of range");
+ return 0;
+ }
+
+ return pixmap->samples[(x + y * pixmap->w) * pixmap->n + k];
+}
+
JNIEXPORT jintArray JNICALL
FUN(Pixmap_getPixels)(JNIEnv *env, jobject self)
{
@@ -2498,6 +2717,30 @@ FUN(Pixmap_getPixels)(JNIEnv *env, jobject self)
return arr;
}
+JNIEXPORT jint JNICALL
+FUN(Pixmap_getXResolution)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_pixmap *pixmap = from_Pixmap(env, self);
+
+ if (ctx == NULL || pixmap == NULL)
+ return 0;
+
+ return pixmap->xres;
+}
+
+JNIEXPORT jint JNICALL
+FUN(Pixmap_getYResolution)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_pixmap *pixmap = from_Pixmap(env, self);
+
+ if (ctx == NULL || pixmap == NULL)
+ return 0;
+
+ return pixmap->yres;
+}
+
/* Path Interface */
JNIEXPORT void JNICALL
@@ -2623,6 +2866,21 @@ FUN(Path_curveToY)(JNIEnv *env, jobject self, jfloat cx, jfloat cy, jfloat ex, j
}
JNIEXPORT void JNICALL
+FUN(Path_rect)(JNIEnv *env, jobject self, jint x1, jint y1, jint x2, jint y2)
+{
+ fz_context *ctx = get_context(env);
+ fz_path *path = from_Path(env, self);
+
+ if (ctx == NULL || path == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_rectto(ctx, path, x1, y1, x2, y2);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
FUN(Path_closePath)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
@@ -3134,6 +3392,24 @@ FUN(Image_getNumberOfComponents)(JNIEnv *env, jobject self)
return image ? image->n : 0;
}
+JNIEXPORT jobject JNICALL
+FUN(Image_getColorSpace)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_image *image = from_Image(env, self);
+ jobject jcs = NULL;
+
+ if (ctx == NULL || image == NULL)
+ return NULL;
+
+ fz_try (ctx)
+ jcs = to_ColorSpace(ctx, env, image->colorspace);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return jcs;
+}
+
JNIEXPORT jint JNICALL
FUN(Image_getBitsPerComponent)(JNIEnv *env, jobject self)
{
@@ -3272,6 +3548,63 @@ FUN(Annotation_advance)(JNIEnv *env, jobject self)
return jlong_cast(annot);
}
+JNIEXPORT jobject JNICALL
+FUN(Annotation_toPixmap)(JNIEnv *env, jobject self, jobject jctm, jobject jcs, jboolean alpha)
+{
+ fz_context *ctx = get_context(env);
+ fz_annot *annot = from_Annotation(env, self);
+ fz_matrix ctm = from_Matrix(env, jctm);
+ fz_colorspace *cs = from_ColorSpace(env, jcs);
+ fz_pixmap *pixmap = NULL;
+
+ if (ctx == NULL || cs == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ pixmap = fz_new_pixmap_from_annot(ctx, annot, &ctm, cs, alpha);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_Pixmap_safe_own(ctx, env, pixmap);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(Annotation_getBounds)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_annot *annot = from_Annotation(env, self);
+ jobject jrect = NULL;
+ fz_rect rect;
+
+ if (ctx == NULL || annot == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ jrect = to_Rect(ctx, env, fz_bound_annot(ctx, annot, &rect));
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return jrect;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(Annotation_toDisplayList)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_annot *annot = from_Annotation(env, self);
+ fz_display_list *list = NULL;
+
+ if (ctx == NULL || annot == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ list = fz_new_display_list_from_annot(ctx, annot);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_DisplayList_safe_own(ctx, env, list);
+}
+
/* Link interface */
JNIEXPORT void JNICALL
@@ -3398,6 +3731,39 @@ FUN(Document_countPages)(JNIEnv *env, jobject self)
return count;
}
+JNIEXPORT jboolean JNICALL
+FUN(Document_isReflowable)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_document *doc = from_Document(env, self);
+ int is_reflowable = 0;
+
+ if (ctx == NULL || doc == NULL)
+ return 0;
+
+ fz_try(ctx)
+ is_reflowable = fz_is_document_reflowable(ctx, doc);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return is_reflowable;
+}
+
+JNIEXPORT void JNICALL
+FUN(Document_layout)(JNIEnv *env, jobject self, jfloat w, jfloat h, jfloat em)
+{
+ fz_context *ctx = get_context(env);
+ fz_document *doc = from_Document(env, self);
+
+ if (ctx == NULL || doc == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_layout_document(ctx, doc, w, h, em);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
JNIEXPORT jobject JNICALL
FUN(Document_loadPage)(JNIEnv *env, jobject self, jint number)
{
@@ -3483,6 +3849,24 @@ FUN(Document_loadOutline)(JNIEnv *env, jobject self)
return to_Outline_safe_own(ctx, env, outline);
}
+JNIEXPORT jobject JNICALL
+FUN(Document_toPDFDocument)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_document *doc = from_Document(env, self);
+ pdf_document *pdf = NULL;
+
+ if (ctx == NULL || doc == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ pdf = pdf_specifics(ctx, doc);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFDocument_safe(ctx, env, pdf);
+}
+
/* Page interface */
JNIEXPORT void JNICALL
@@ -3636,10 +4020,108 @@ FUN(Page_getAnnotations)(JNIEnv *env, jobject self)
fz_throw(ctx, FZ_ERROR_GENERIC, "getAnnotations failed (4)");
}
fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return jannots;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(Page_search)(JNIEnv *env, jobject self, jstring jneedle)
+{
+ fz_context *ctx = get_context(env);
+ fz_page *page = from_Page(env, self);
+ fz_rect hits[256] = { 0 };
+ const char *needle = NULL;
+ jobject jhits = NULL;
+ int n = 0;
+ int i;
+
+ if (ctx == NULL || page == NULL || jneedle == NULL)
+ return NULL;
+
+ needle = (*env)->GetStringUTFChars(env, jneedle, NULL);
+ if (needle == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ n = fz_search_page(ctx, page, needle, hits, nelem(hits));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jneedle, needle);
+ fz_catch(ctx)
{
jni_rethrow(env, ctx);
+ return NULL;
}
- return jannots;
+
+ jhits = (*env)->NewObjectArray(env, n, cls_Rect, NULL);
+ if (jhits == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "search failed");
+ return NULL;
+ }
+
+ fz_try(ctx)
+ {
+ for (i = 0; i < n; i++)
+ {
+ jobject jhit = to_Rect(ctx, env, &hits[i]);
+ (*env)->SetObjectArrayElement(env, jhits, i, jhit);
+ }
+ }
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ return jhits;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(Page_toDisplayList)(JNIEnv *env, jobject self, jboolean no_annotations)
+{
+ fz_context *ctx = get_context(env);
+ fz_page *page = from_Page(env, self);
+ fz_display_list *list = NULL;
+
+ if (ctx == NULL || page == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ if (no_annotations)
+ list = fz_new_display_list_from_page_contents(ctx, page);
+ else
+ list = fz_new_display_list_from_page(ctx, page);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_DisplayList_safe_own(ctx, env, list);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(Page_toStructuredText)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_page *page = from_Page(env, self);
+ fz_stext_sheet *sheet = NULL;
+ fz_stext_page *text = NULL;
+
+ if (ctx == NULL || page == NULL)
+ return NULL;
+
+ fz_var(sheet);
+
+ fz_try(ctx)
+ {
+ sheet = fz_new_stext_sheet(ctx);
+ text = fz_new_stext_page_from_page(ctx, page, sheet);
+ }
+ fz_always(ctx)
+ fz_drop_stext_sheet(ctx, sheet);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_StructuredText_safe_own(ctx, env, text);
}
/* Cookie interface */
@@ -3691,6 +4173,7 @@ JNIEXPORT jlong JNICALL
FUN(DisplayList_newNative)(JNIEnv *env, jobject self)
{
fz_context *ctx = get_context(env);
+
fz_display_list *list = NULL;
if (ctx == NULL)
@@ -3746,3 +4229,1957 @@ FUN(DisplayList_finalize)(JNIEnv *env, jobject self)
fz_drop_display_list(ctx, list);
}
+
+JNIEXPORT jobject JNICALL
+FUN(DisplayList_toPixmap)(JNIEnv *env, jobject self, jobject jctm, jobject jcs, jboolean alpha)
+{
+ fz_context *ctx = get_context(env);
+ fz_display_list *list = from_DisplayList(env, self);
+ fz_matrix ctm = from_Matrix(env, jctm);
+ fz_colorspace *cs = from_ColorSpace(env, jcs);
+ fz_pixmap *pixmap = NULL;
+
+ if (ctx == NULL || list == NULL || cs == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ pixmap = fz_new_pixmap_from_display_list(ctx, list, &ctm, cs, alpha);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_Pixmap_safe_own(ctx, env, pixmap);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(DisplayList_search)(JNIEnv *env, jobject self, jstring jneedle)
+{
+ fz_context *ctx = get_context(env);
+ fz_display_list *list = from_DisplayList(env, self);
+ fz_rect hits[256] = { 0 };
+ const char *needle = NULL;
+ jobject jhits = NULL;
+ int n = 0;
+ int i;
+
+ if (ctx == NULL || list == NULL || jneedle == NULL)
+ return NULL;
+
+ needle = (*env)->GetStringUTFChars(env, jneedle, NULL);
+ if (needle == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ n = fz_search_display_list(ctx, list, needle, hits, nelem(hits));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jneedle, needle);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jhits = (*env)->NewObjectArray(env, n, cls_Rect, NULL);
+ if (jhits == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "search failed");
+ return NULL;
+ }
+
+ fz_try(ctx)
+ {
+ for (i = 0; i < n; i++)
+ {
+ jobject jhit = to_Rect(ctx, env, &hits[i]);
+ (*env)->SetObjectArrayElement(env, jhits, i, jhit);
+ }
+ }
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ return jhits;
+}
+
+/* Buffer interface */
+
+JNIEXPORT void JNICALL
+FUN(Buffer_finalize)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+
+ if (ctx == NULL || buf == NULL)
+ return;
+
+ fz_drop_buffer(ctx, buf);
+}
+
+JNIEXPORT jlong JNICALL
+FUN(Buffer_newNativeBuffer)(JNIEnv *env, jobject self, jint n)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = NULL;
+
+ if (ctx == NULL)
+ return 0;
+
+ fz_try(ctx)
+ buf = fz_new_buffer(ctx, n);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return jlong_cast(buf);
+}
+
+JNIEXPORT jint JNICALL
+FUN(Buffer_getLength)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+
+ if (ctx == NULL || buf == NULL)
+ return 0;
+
+ return buf->len;
+}
+
+JNIEXPORT void JNICALL
+FUN(Buffer_writeByte)(JNIEnv *env, jobject self, jbyte b)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+
+ if (ctx == NULL || buf == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_write_buffer_byte(ctx, buf, b);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
+FUN(Buffer_writeBytes)(JNIEnv *env, jobject self, jobject jbs)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+ jbyte *bs = NULL;
+ int n = 0;
+
+ if (ctx == NULL || buf == NULL || jbs == NULL)
+ return;
+
+ n = (*env)->GetArrayLength(env, jbs);
+ bs = (*env)->GetByteArrayElements(env, jbs, NULL);
+
+ fz_try(ctx)
+ fz_write_buffer(ctx, buf, bs, n);
+ fz_always(ctx)
+ (*env)->ReleaseByteArrayElements(env, jbs, bs, JNI_ABORT);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
+FUN(Buffer_writeBuffer)(JNIEnv *env, jobject self, jobject jbuf)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+ fz_buffer *cat = from_Buffer(env, jbuf);
+
+ if (ctx == NULL || buf == NULL || cat == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_append_buffer(ctx, buf, cat);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
+FUN(Buffer_writeRune)(JNIEnv *env, jobject self, jint rune)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+
+ if (ctx == NULL || buf == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_write_buffer_rune(ctx, buf, rune);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
+FUN(Buffer_writeLine)(JNIEnv *env, jobject self, jstring jline)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+ const char *line = NULL;
+
+ if (ctx == NULL || buf == NULL || jline == NULL)
+ return;
+
+ line = (*env)->GetStringUTFChars(env, jline, NULL);
+ if (line == NULL)
+ return;
+
+ fz_try(ctx)
+ {
+ fz_write_buffer(ctx, buf, line, strlen(line));
+ fz_write_buffer_byte(ctx, buf, '\n');
+ }
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jline, line);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
+FUN(Buffer_writeLines)(JNIEnv *env, jobject self, jobject jlines)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+ int i = 0;
+ int n = 0;
+
+ if (ctx == NULL || buf == NULL || jlines == NULL)
+ return;
+
+ n = (*env)->GetArrayLength(env, jlines);
+
+ for (i = 0; i < n; ++i)
+ {
+ jobject jline = (*env)->GetObjectArrayElement(env, jlines, i);
+ const char *line = NULL;
+
+ if (jline == NULL)
+ continue;
+
+ line = (*env)->GetStringUTFChars(env, jline, NULL);
+ if (line == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "writeLines failed");
+ return;
+ }
+
+ fz_try(ctx)
+ {
+ fz_write_buffer(ctx, buf, line, strlen(line));
+ fz_write_buffer_byte(ctx, buf, '\n');
+ }
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jline, line);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return;
+ }
+ }
+}
+
+JNIEXPORT void JNICALL
+FUN(Buffer_save)(JNIEnv *env, jobject self, jstring jfilename)
+{
+ fz_context *ctx = get_context(env);
+ fz_buffer *buf = from_Buffer(env, self);
+ const char *filename = NULL;
+
+ if (ctx == NULL || buf == NULL || jfilename == NULL)
+ return;
+
+ filename = (*env)->GetStringUTFChars(env, jfilename, NULL);
+ if (filename == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_save_buffer(ctx, buf, filename);
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jfilename, filename);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+/* DocumentWriter interface */
+
+JNIEXPORT void JNICALL
+FUN(DocumentWriter_finalize)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_document_writer *wri = from_DocumentWriter(env, self);
+
+ if (ctx == NULL || wri == NULL)
+ return;
+
+ fz_drop_document_writer(ctx, wri);
+}
+
+JNIEXPORT jlong JNICALL
+FUN(DocumentWriter_newNativeDocumentWriter)(JNIEnv *env, jobject self, jstring jfilename, jstring jformat, jstring joptions)
+{
+ fz_context *ctx = get_context(env);
+ fz_document_writer *wri = from_DocumentWriter(env, self);
+ const char *filename = NULL;
+ const char *format = NULL;
+ const char *options = NULL;
+
+ if (ctx == NULL || wri == NULL || jfilename == NULL)
+ return 0;
+
+ filename = (*env)->GetStringUTFChars(env, jfilename, NULL);
+ if (filename == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "DocumentWriter constructor failed (1)");
+ return 0;
+ }
+ if (jformat != NULL)
+ {
+ format = (*env)->GetStringUTFChars(env, jformat, NULL);
+ if (format == NULL)
+ {
+ (*env)->ReleaseStringUTFChars(env, jfilename, filename);
+ jni_throw(env, FZ_ERROR_GENERIC, "DocumentWriter constructor failed (2)");
+ return 0;
+ }
+ }
+ if (joptions != NULL)
+ {
+ options = (*env)->GetStringUTFChars(env, joptions, NULL);
+ if (options == NULL)
+ {
+ if (format != NULL)
+ (*env)->ReleaseStringUTFChars(env, jformat, format);
+ (*env)->ReleaseStringUTFChars(env, jfilename, filename);
+ jni_throw(env, FZ_ERROR_GENERIC, "DocumentWriter constructor failed (3)");
+ return 0;
+ }
+ }
+
+ fz_try(ctx)
+ wri = fz_new_document_writer(ctx, filename, format, options);
+ fz_always(ctx)
+ {
+ if (options != NULL)
+ (*env)->ReleaseStringUTFChars(env, joptions, options);
+ if (format != NULL)
+ (*env)->ReleaseStringUTFChars(env, jformat, format);
+ (*env)->ReleaseStringUTFChars(env, jfilename, filename);
+ }
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return jlong_cast(wri);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(DocumentWriter_beginPage)(JNIEnv *env, jobject self, jobject jmediabox)
+{
+ fz_context *ctx = get_context(env);
+ fz_document_writer *wri = from_DocumentWriter(env, self);
+ fz_rect mediabox = from_Rect(env, jmediabox);
+ fz_device *device = NULL;
+
+ if (ctx == NULL || wri == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ device = fz_begin_page(ctx, wri, &mediabox);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_Device_safe_own(ctx, env, device);
+}
+
+JNIEXPORT void JNICALL
+FUN(DocumentWriter_endPage)(JNIEnv *env, jobject self, jobject jdev)
+{
+ fz_context *ctx = get_context(env);
+ fz_document_writer *wri = from_DocumentWriter(env, self);
+ fz_device *device = from_Device(env, jdev);
+
+ if (ctx == NULL || wri == NULL || device == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_end_page(ctx, wri, device);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
+FUN(DocumentWriter_close)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_document_writer *wri = from_DocumentWriter(env, self);
+
+ if (ctx == NULL || wri == NULL)
+ return;
+
+ fz_try(ctx)
+ fz_close_document_writer(ctx, wri);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+/* StructuredText interface */
+
+JNIEXPORT void JNICALL
+FUN(StructuredText_finalize)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ fz_stext_page *text = from_StructuredText(env, self);
+
+ if (ctx == NULL || text == NULL)
+ return;
+
+ fz_drop_stext_page(ctx, text);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(StructuredText_search)(JNIEnv *env, jobject self, jstring jneedle)
+{
+ fz_context *ctx = get_context(env);
+ fz_stext_page *text = from_StructuredText(env, self);
+ fz_rect hits[256] = { 0 };
+ const char *needle = NULL;
+ jobject jhits = NULL;
+ int n = 0;
+ int i;
+
+ if (ctx == NULL || text == NULL || jneedle == NULL)
+ return NULL;
+
+ needle = (*env)->GetStringUTFChars(env, jneedle, NULL);
+ if (needle == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ n = fz_search_stext_page(ctx, text, needle, hits, nelem(hits));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jneedle, needle);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jhits = (*env)->NewObjectArray(env, n, cls_Rect, NULL);
+ if (jhits == NULL)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "search failed");
+
+ fz_try(ctx)
+ {
+ for (i = 0; i < n; i++)
+ {
+ jobject jhit = to_Rect(ctx, env, &hits[i]);
+ (*env)->SetObjectArrayElement(env, jhits, i, jhit);
+ }
+ }
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ return jhits;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(StructuredText_highlight)(JNIEnv *env, jobject self, jobject jrect)
+{
+ fz_context *ctx = get_context(env);
+ fz_stext_page *text = from_StructuredText(env, self);
+ fz_rect rect = from_Rect(env, jrect);
+ fz_rect hits[256] = { 0 };
+ jobject jhits = NULL;
+ int n = 0;
+ int i;
+
+ if (ctx == NULL || text == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ n = fz_highlight_selection(ctx, text, rect, hits, nelem(hits));
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jhits = (*env)->NewObjectArray(env, n, cls_Rect, NULL);
+ if (jhits == NULL)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "search failed (1)");
+
+ fz_try(ctx)
+ {
+ for (i = 0; i < n; i++)
+ {
+ jobject jhit = to_Rect(ctx, env, &hits[i]);
+ (*env)->SetObjectArrayElement(env, jhits, i, jhit);
+ }
+ }
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ return jhits;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(StructuredText_copy)(JNIEnv *env, jobject self, jobject jrect)
+{
+ fz_context *ctx = get_context(env);
+ fz_stext_page *text = from_StructuredText(env, self);
+ fz_rect rect = from_Rect(env, jrect);
+ jobject jstring = NULL;
+ char *s = NULL;
+
+ if (ctx == NULL || text == NULL)
+ return NULL;
+
+ fz_var(s);
+
+ fz_try(ctx)
+ s = fz_copy_selection(ctx, text, rect);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jstring = (*env)->NewStringUTF(env, s);
+ fz_free(ctx, s);
+
+ return jstring;
+}
+
+/* PDFDocument interface */
+
+JNIEXPORT void JNICALL
+FUN(PDFDocument_finalize)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+
+ if (ctx == NULL || pdf == NULL)
+ return;
+
+ fz_drop_document(ctx, (fz_document *) pdf);
+}
+
+JNIEXPORT jint JNICALL
+FUN(PDFDocument_countObjects)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ int count = 0;
+
+ if (ctx == NULL || pdf == NULL)
+ return 0;
+
+ fz_try(ctx)
+ count = pdf_xref_len(ctx, pdf);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return count;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newNull)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_null(ctx, pdf);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newBoolean)(JNIEnv *env, jobject self, jboolean b)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_bool(ctx, pdf, b);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newInteger)(JNIEnv *env, jobject self, jint i)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_int(ctx, pdf, i);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newReal)(JNIEnv *env, jobject self, jfloat f)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_real(ctx, pdf, f);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newString)(JNIEnv *env, jobject self, jstring jstring)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+ const char *s = NULL;
+
+ if (ctx == NULL || pdf == NULL || jstring == NULL)
+ return NULL;
+
+ s = (*env)->GetStringUTFChars(env, jstring, NULL);
+ if (s == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_string(ctx, pdf, s, strlen(s));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jstring, s);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newName)(JNIEnv *env, jobject self, jstring jname)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+ const char *name = NULL;
+
+ if (ctx == NULL || pdf == NULL || jname == NULL)
+ return NULL;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_name(ctx, pdf, name);
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newIndirect)(JNIEnv *env, jobject self, jint num, jint gen)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_indirect(ctx, pdf, num, gen);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newArray)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_array(ctx, pdf, 0);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_newDictionary)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ jobject jobj = NULL;
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_new_dict(ctx, pdf, 0);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(obj), self);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_toDocument)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ return to_Document_safe(ctx, env, (fz_document *) pdf);
+}
+
+JNIEXPORT jint JNICALL
+FUN(PDFDocument_countPages)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ int count = 0;
+
+ if (ctx == NULL || pdf == NULL)
+ return 0;
+
+ fz_try(ctx)
+ count = pdf_count_pages(ctx, pdf);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return count;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_findPage)(JNIEnv *env, jobject self, jint at)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_lookup_page_obj(ctx, pdf, at);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe(ctx, env, self, obj);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_getTrailer)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_obj *obj = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_trailer(ctx, pdf);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe(ctx, env, self, obj);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_addObject)(JNIEnv *env, jobject self, jobject jobj)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_obj *obj = from_PDFObject(env, jobj);
+
+ if (ctx == NULL || pdf == NULL || obj == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ obj = pdf_add_object_drop(ctx, pdf, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return jobj;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_createObject)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_obj *ind = NULL;
+
+ if (ctx == NULL || pdf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ ind = pdf_new_indirect(ctx, pdf, pdf_create_object(ctx, pdf), 0);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe_own(ctx, env, self, ind);
+}
+
+JNIEXPORT void JNICALL
+FUN(PDFDocument_deleteObject)(JNIEnv *env, jobject self, jint num)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+
+ if (ctx == NULL || pdf == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_delete_object(ctx, pdf, num);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_addStream)(JNIEnv *env, jobject self, jobject jbuf)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ fz_buffer *buf = from_Buffer(env, jbuf);
+ pdf_obj *ind = NULL;
+
+ if (ctx == NULL || pdf == NULL || buf == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ ind = pdf_add_stream(ctx, pdf, buf);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe_own(ctx, env, self, ind);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_addPage)(JNIEnv *env, jobject self, jobject jmediabox, jint rotate, jobject jresources, jobject jcontents)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ fz_rect mediabox = from_Rect(env, jmediabox);
+ pdf_obj *resources = from_PDFObject(env, jresources);
+ fz_buffer *contents = from_Buffer(env, jcontents);
+ pdf_obj *ind = NULL;
+
+ if (ctx == NULL || pdf == NULL || resources == NULL || contents == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ ind = pdf_add_page(ctx, pdf, &mediabox, rotate, resources, contents);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe_own(ctx, env, self, ind);
+}
+
+JNIEXPORT void JNICALL
+FUN(PDFDocument_insertPage)(JNIEnv *env, jobject self, jint at, jobject jpage)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ pdf_obj *page = from_PDFObject(env, jpage);
+
+ if (ctx == NULL || pdf == NULL || page == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_insert_page(ctx, pdf, at, page);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT void JNICALL
+FUN(PDFDocument_deletePage)(JNIEnv *env, jobject self, jint at)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+
+ if (ctx == NULL || pdf == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_delete_page(ctx, pdf, at);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_addImage)(JNIEnv *env, jobject self, jobject jimage)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ fz_image *image = from_Image(env, jimage);
+ pdf_obj *ind = NULL;
+
+ if (ctx == NULL || pdf == NULL || image == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ ind = pdf_add_image(ctx, pdf, image, 0);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe_own(ctx, env, self, ind);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_addFont)(JNIEnv *env, jobject self, jobject jfont)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ fz_font *font = from_Font(env, jfont);
+ pdf_obj *ind = NULL;
+
+ if (ctx == NULL || pdf == NULL || font == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ ind = pdf_add_cid_font(ctx, pdf, font);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe_own(ctx, env, self, ind);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFDocument_addSimpleFont)(JNIEnv *env, jobject self, jobject jfont)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ fz_font *font = from_Font(env, jfont);
+ pdf_obj *ind = NULL;
+
+ if (ctx == NULL || pdf == NULL || font == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ ind = pdf_add_simple_font(ctx, pdf, font);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe_own(ctx, env, self, ind);
+}
+
+JNIEXPORT void JNICALL
+FUN(PDFDocument_save)(JNIEnv *env, jobject self, jstring jfilename, jstring joptions)
+{
+ fz_context *ctx = get_context(env);
+ pdf_document *pdf = from_PDFDocument(env, self);
+ const char *filename = NULL;
+ const char *options = NULL;
+ pdf_write_options pwo = { 0 };
+
+ if (ctx == NULL || pdf == NULL || jfilename == NULL)
+ return;
+
+ filename = (*env)->GetStringUTFChars(env, jfilename, NULL);
+ if (filename == NULL)
+ return;
+
+ if (joptions != NULL)
+ {
+ options = (*env)->GetStringUTFChars(env, joptions, NULL);
+ if (options == NULL)
+ return;
+ }
+
+ fz_try(ctx)
+ {
+ pdf_parse_write_options(ctx, &pwo, options);
+ pdf_save_document(ctx, pdf, filename, &pwo);
+ }
+ fz_always(ctx)
+ {
+ if (options != NULL)
+ (*env)->ReleaseStringUTFChars(env, joptions, options);
+ (*env)->ReleaseStringUTFChars(env, jfilename, filename);
+ }
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+/* PDFObject interface */
+
+JNIEXPORT void JNICALL
+FUN(PDFObject_finalize)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+
+ if (ctx == NULL || obj == NULL)
+ return;
+
+ 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 == NULL || obj == NULL)
+ 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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_indirect(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+JNIEXPORT jboolean JNICALL
+FUN(PDFObject_isNull)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ int b = 0;
+
+ if (ctx == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_null(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_bool(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_int(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_real(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_number(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_string(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_name(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_array(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_dict(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+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 == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_is_stream(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+JNIEXPORT jbyteArray JNICALL
+FUN(PDFObject_readStream)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ pdf_document *pdf = NULL;
+ fz_buffer *buf = NULL;
+ jbyteArray arr = NULL;
+
+ if (ctx == NULL || obj == NULL)
+ return NULL;
+
+ fz_var(buf);
+
+ fz_try(ctx)
+ {
+ if (!pdf_is_stream(ctx, obj))
+ fz_throw(ctx, FZ_ERROR_GENERIC, "not a stream");
+ pdf = pdf_get_indirect_document(ctx, obj);
+ buf = pdf_load_stream(ctx, pdf, pdf_to_num(ctx, obj));
+
+ arr = (*env)->NewByteArray(env, buf->len);
+ if (arr == NULL)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "JNI creation of byteArray failed");
+
+ (*env)->SetByteArrayRegion(env, arr, 0, buf->len, (signed char *) &buf->data[0]);
+ }
+ 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);
+ pdf_document *pdf = NULL;
+ fz_buffer *buf = NULL;
+ jbyteArray arr = NULL;
+
+ if (ctx == NULL || obj == NULL)
+ return NULL;
+
+ fz_var(buf);
+
+ fz_try(ctx)
+ {
+ if (!pdf_is_stream(ctx, obj))
+ fz_throw(ctx, FZ_ERROR_GENERIC, "not a stream");
+ pdf = pdf_get_indirect_document(ctx, obj);
+ buf = pdf_load_raw_stream(ctx, pdf, pdf_to_num(ctx, obj));
+
+ arr = (*env)->NewByteArray(env, buf->len);
+ if (arr == NULL)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "JNI creation of byteArray failed");
+
+ (*env)->SetByteArrayRegion(env, arr, 0, buf->len, (signed char *) &buf->data[0]);
+ }
+ fz_always(ctx)
+ fz_drop_buffer(ctx, buf);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return arr;
+}
+
+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 = NULL;
+
+ if (ctx == NULL || obj == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ ind = pdf_resolve_indirect(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ jobj = (*env)->NewObject(env, cls_PDFObject, mid_PDFObject_init, jlong_cast(ind), self);
+ if (jobj != NULL)
+ pdf_keep_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 *obj = from_PDFObject(env, self);
+ pdf_obj *val = NULL;
+
+ if (ctx == NULL || obj == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ val = pdf_array_get(ctx, obj, index);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe(ctx, env, self, val);
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFObject_getDictionary)(JNIEnv *env, jobject self, jstring jname)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ const char *name = NULL;
+ pdf_obj *val = NULL;
+
+ if (ctx == NULL || obj == NULL || jname == NULL)
+ return NULL;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ return NULL;
+
+ fz_try(ctx)
+ val = pdf_dict_gets(ctx, obj, name);
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return to_PDFObject_safe(ctx, env, self, val);
+}
+
+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);
+ pdf_document *pdf = arr ? pdf_get_bound_document(ctx, arr) : NULL;
+
+ if (ctx == NULL || arr == NULL || pdf == NULL)
+ return;
+
+ fz_try(ctx)
+ if (index == pdf_array_len(ctx, arr))
+ pdf_array_push(ctx, arr, pdf_new_bool(ctx, pdf, b));
+ else
+ pdf_array_put(ctx, arr, index, pdf_new_bool(ctx, pdf, b));
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = arr ? pdf_get_bound_document(ctx, arr) : NULL;
+
+ if (ctx == NULL || arr == NULL || pdf == NULL)
+ return;
+
+ fz_try(ctx)
+ if (index == pdf_array_len(ctx, arr))
+ pdf_array_push(ctx, arr, pdf_new_int(ctx, pdf, i));
+ else
+ pdf_array_put(ctx, arr, index, pdf_new_int(ctx, pdf, i));
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = arr ? pdf_get_bound_document(ctx, arr) : NULL;
+
+ if (ctx == NULL || arr == NULL || pdf == NULL)
+ return;
+
+ fz_try(ctx)
+ if (index == pdf_array_len(ctx, arr))
+ pdf_array_push(ctx, arr, pdf_new_real(ctx, pdf, f));
+ else
+ pdf_array_put(ctx, arr, index, pdf_new_real(ctx, pdf, f));
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = arr ? pdf_get_bound_document(ctx, arr) : NULL;
+ const char *str = NULL;
+
+ if (ctx == NULL || arr == NULL || pdf == NULL || jstr == NULL)
+ return;
+
+ str = (*env)->GetStringUTFChars(env, jstr, NULL);
+ if (str == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ fz_try(ctx)
+ if (index == pdf_array_len(ctx, arr))
+ pdf_array_push(ctx, arr, pdf_new_string(ctx, pdf, str, strlen(str)));
+ else
+ pdf_array_put(ctx, arr, index, pdf_new_string(ctx, pdf, str, strlen(str)));
+ fz_always(ctx)
+ if (str != NULL)
+ (*env)->ReleaseStringUTFChars(env, jstr, str);
+ fz_catch(ctx)
+ jni_rethrow(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 == NULL || arr == NULL || obj == NULL)
+ return;
+
+ fz_try(ctx)
+ if (index == pdf_array_len(ctx, arr))
+ pdf_array_push(ctx, arr, obj);
+ else
+ pdf_array_put(ctx, arr, index, obj);
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ const char *name = NULL;
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || jname == NULL)
+ return;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, pdf_new_name(ctx, pdf, name), pdf_new_bool(ctx, pdf, b));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ const char *name = NULL;
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || jname == NULL)
+ return;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, pdf_new_name(ctx, pdf, name), pdf_new_int(ctx, pdf, i));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ const char *name = NULL;
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || jname == NULL)
+ return;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, pdf_new_name(ctx, pdf, name), pdf_new_real(ctx, pdf, f));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ const char *name = NULL;
+ const char *str = NULL;
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || jname == NULL || jstr == NULL)
+ return;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ str = (*env)->GetStringUTFChars(env, jstr, NULL);
+ if (str == NULL)
+ {
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, pdf_new_name(ctx, pdf, name), pdf_new_string(ctx, pdf, str, strlen(str)));
+ fz_always(ctx)
+ {
+ (*env)->ReleaseStringUTFChars(env, jstr, str);
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ }
+ fz_catch(ctx)
+ jni_rethrow(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_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ pdf_obj *obj = from_PDFObject(env, jobj);
+ const char *name = NULL;
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || jname == NULL || obj == NULL)
+ return;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, pdf_new_name(ctx, pdf, name), obj);
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ fz_catch(ctx)
+ jni_rethrow(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_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ pdf_obj *name = from_PDFObject(env, jname);
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || name == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, name, pdf_new_bool(ctx, pdf, b));
+ fz_catch(ctx)
+ jni_rethrow(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_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ pdf_obj *name = from_PDFObject(env, jname);
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || name == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, name, pdf_new_int(ctx, pdf, i));
+ fz_catch(ctx)
+ jni_rethrow(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_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ pdf_obj *name = from_PDFObject(env, jname);
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || name == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, name, pdf_new_real(ctx, pdf, f));
+ fz_catch(ctx)
+ jni_rethrow(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_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ pdf_obj *name = from_PDFObject(env, jname);
+ const char *str = NULL;
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || name == NULL || jstr == NULL)
+ return;
+
+ str = (*env)->GetStringUTFChars(env, jstr, NULL);
+ if (str == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "put failed");
+ return;
+ }
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, name, pdf_new_string(ctx, pdf, str, strlen(str)));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jstr, str);
+ fz_catch(ctx)
+ jni_rethrow(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 == NULL || dict == NULL || name == NULL || obj == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_dict_put(ctx, dict, name, obj);
+ fz_catch(ctx)
+ jni_rethrow(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 == NULL || arr == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_array_delete(ctx, arr, index);
+ fz_catch(ctx)
+ jni_rethrow(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);
+ pdf_document *pdf = dict ? pdf_get_bound_document(ctx, dict) : NULL;
+ const char *name = NULL;
+
+ if (ctx == NULL || dict == NULL || pdf == NULL || jname == NULL)
+ return;
+
+ name = (*env)->GetStringUTFChars(env, jname, NULL);
+ if (name == NULL)
+ {
+ jni_throw(env, FZ_ERROR_GENERIC, "delete failed");
+ return;
+ }
+
+ fz_try(ctx)
+ pdf_dict_del(ctx, dict, pdf_new_name(ctx, pdf, name));
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jname, name);
+ fz_catch(ctx)
+ jni_rethrow(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 == NULL || dict == NULL || name == NULL)
+ return;
+
+ fz_try(ctx)
+ pdf_dict_del(ctx, dict, name);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
+JNIEXPORT jboolean JNICALL
+FUN(PDFObject_toBoolean)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ int b = 0;
+
+ if (ctx == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ b = pdf_to_bool(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return b;
+}
+
+JNIEXPORT jint JNICALL
+FUN(PDFObject_toInteger)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ int i = 0;
+
+ if (ctx == NULL || obj == NULL)
+ 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_toFloat)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ float f = 0;
+
+ if (ctx == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ f = pdf_to_real(ctx, obj);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return f;
+}
+
+JNIEXPORT jobject JNICALL
+FUN(PDFObject_toByteString)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ signed char *bs = NULL;
+ const char *str = NULL;
+ jobject jbs = NULL;
+
+ if (ctx == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ if (pdf_is_name(ctx, obj))
+ str = pdf_to_name(ctx, obj);
+ else
+ str = pdf_to_str_buf(ctx, obj);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ jbs = (*env)->NewByteArray(env, strlen(str) + 1);
+ bs = (*env)->GetByteArrayElements(env, jbs, NULL);
+
+ memcpy(bs, str, strlen(str) + 1);
+
+ (*env)->ReleaseByteArrayElements(env, jbs, bs, 0);
+
+ return jbs;
+}
+
+JNIEXPORT jstring JNICALL
+FUN(PDFObject_toString)(JNIEnv *env, jobject self, jboolean tight)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ jstring string = NULL;
+ char *s = NULL;
+ int n = 0;
+
+ if (ctx == NULL || obj == NULL)
+ return 0;
+
+ fz_try(ctx)
+ {
+ n = pdf_sprint_obj(ctx, NULL, 0, obj, tight);
+ s = fz_malloc(ctx, n + 1);
+ pdf_sprint_obj(ctx, s, n + 1, obj, tight);
+ string = (*env)->NewStringUTF(env, s);
+ }
+ fz_always(ctx)
+ fz_free(ctx, s);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+
+ return string;
+}
diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h
index 08d389a1..e56e43af 100644
--- a/platform/java/mupdf_native.h
+++ b/platform/java/mupdf_native.h
@@ -25,6 +25,30 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Annotation_run
/*
* Class: com_artifex_mupdf_fitz_Annotation
+ * Method: toPixmap
+ * Signature: (Lcom/artifex/mupdf/fitz/Matrix;Lcom/artifex/mupdf/fitz/ColorSpace;Z)Lcom/artifex/mupdf/fitz/Pixmap;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Annotation_toPixmap
+ (JNIEnv *, jobject, jobject, jobject, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Annotation
+ * Method: getBounds
+ * Signature: ()Lcom/artifex/mupdf/fitz/Rect;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Annotation_getBounds
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Annotation
+ * Method: toDisplayList
+ * Signature: ()Lcom/artifex/mupdf/fitz/DisplayList;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Annotation_toDisplayList
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Annotation
* Method: advance
* Signature: ()J
*/
@@ -35,6 +59,99 @@ JNIEXPORT jlong JNICALL Java_com_artifex_mupdf_fitz_Annotation_advance
}
#endif
#endif
+/* Header for class com_artifex_mupdf_fitz_Buffer */
+
+#ifndef _Included_com_artifex_mupdf_fitz_Buffer
+#define _Included_com_artifex_mupdf_fitz_Buffer
+#ifdef __cplusplus
+extern "C" {
+#endif
+#undef com_artifex_mupdf_fitz_Buffer_DEFAULT_BUFFER_SIZE
+#define com_artifex_mupdf_fitz_Buffer_DEFAULT_BUFFER_SIZE 1024L
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_finalize
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: newNativeBuffer
+ * Signature: (I)J
+ */
+JNIEXPORT jlong JNICALL Java_com_artifex_mupdf_fitz_Buffer_newNativeBuffer
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: getLength
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_Buffer_getLength
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: writeByte
+ * Signature: (B)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_writeByte
+ (JNIEnv *, jobject, jbyte);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: writeBytes
+ * Signature: ([B)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_writeBytes
+ (JNIEnv *, jobject, jbyteArray);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: writeBuffer
+ * Signature: (Lcom/artifex/mupdf/fitz/Buffer;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_writeBuffer
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: writeRune
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_writeRune
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: writeLine
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_writeLine
+ (JNIEnv *, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: writeLines
+ * Signature: ([Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_writeLines
+ (JNIEnv *, jobject, jobjectArray);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Buffer
+ * Method: save
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_save
+ (JNIEnv *, jobject, jstring);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
/* Header for class com_artifex_mupdf_fitz_ColorSpace */
#ifndef _Included_com_artifex_mupdf_fitz_ColorSpace
@@ -288,6 +405,22 @@ JNIEXPORT jlong JNICALL Java_com_artifex_mupdf_fitz_DisplayList_newNative
/*
* Class: com_artifex_mupdf_fitz_DisplayList
+ * Method: toPixmap
+ * Signature: (Lcom/artifex/mupdf/fitz/Matrix;Lcom/artifex/mupdf/fitz/ColorSpace;Z)Lcom/artifex/mupdf/fitz/Pixmap;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_DisplayList_toPixmap
+ (JNIEnv *, jobject, jobject, jobject, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_DisplayList
+ * Method: search
+ * Signature: (Ljava/lang/String;)[Lcom/artifex/mupdf/fitz/Rect;
+ */
+JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_DisplayList_search
+ (JNIEnv *, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_DisplayList
* Method: run
* Signature: (Lcom/artifex/mupdf/fitz/Device;Lcom/artifex/mupdf/fitz/Matrix;Lcom/artifex/mupdf/fitz/Rect;Lcom/artifex/mupdf/fitz/Cookie;)V
*/
@@ -462,12 +595,87 @@ JNIEXPORT jstring JNICALL Java_com_artifex_mupdf_fitz_Document_getMetaData
/*
* Class: com_artifex_mupdf_fitz_Document
+ * Method: isReflowable
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_Document_isReflowable
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Document
+ * Method: layout
+ * Signature: (FFF)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Document_layout
+ (JNIEnv *, jobject, jfloat, jfloat, jfloat);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Document
* Method: isUnencryptedPDF
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_Document_isUnencryptedPDF
(JNIEnv *, jobject);
+/*
+ * Class: com_artifex_mupdf_fitz_Document
+ * Method: toPDFDocument
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFDocument;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Document_toPDFDocument
+ (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+/* Header for class com_artifex_mupdf_fitz_DocumentWriter */
+
+#ifndef _Included_com_artifex_mupdf_fitz_DocumentWriter
+#define _Included_com_artifex_mupdf_fitz_DocumentWriter
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_artifex_mupdf_fitz_DocumentWriter
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_DocumentWriter_finalize
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_DocumentWriter
+ * Method: newNativeDocumentWriter
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_artifex_mupdf_fitz_DocumentWriter_newNativeDocumentWriter
+ (JNIEnv *, jobject, jstring, jstring, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_DocumentWriter
+ * Method: beingPage
+ * Signature: (Lcom/artifex/mupdf/fitz/Rect;)Lcom/artifex/mupdf/fitz/Device;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_DocumentWriter_beingPage
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_DocumentWriter
+ * Method: endPage
+ * Signature: (Lcom/artifex/mupdf/fitz/Device;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_DocumentWriter_endPage
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_DocumentWriter
+ * Method: close
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_DocumentWriter_close
+ (JNIEnv *, jobject);
+
#ifdef __cplusplus
}
#endif
@@ -671,6 +879,14 @@ JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_Image_getYResolution
/*
* Class: com_artifex_mupdf_fitz_Image
+ * Method: getColorSpace
+ * Signature: ()Lcom/artifex/mupdf/fitz/ColorSpace;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Image_getColorSpace
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Image
* Method: getNumberOfComponents
* Signature: ()I
*/
@@ -1029,6 +1245,564 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Outline_finalize
}
#endif
#endif
+/* Header for class com_artifex_mupdf_fitz_PDFDocument */
+
+#ifndef _Included_com_artifex_mupdf_fitz_PDFDocument
+#define _Included_com_artifex_mupdf_fitz_PDFDocument
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_finalize
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: toDocument
+ * Signature: ()Lcom/artifex/mupdf/fitz/Document;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_toDocument
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: countPages
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_countPages
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: findPage
+ * Signature: (I)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_findPage
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: getTrailer
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_getTrailer
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: countObjects
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_countObjects
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newNull
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newNull
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newBoolean
+ * Signature: (Z)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newBoolean
+ (JNIEnv *, jobject, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newInteger
+ * Signature: (I)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newInteger
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newReal
+ * Signature: (F)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newReal
+ (JNIEnv *, jobject, jfloat);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newString
+ * Signature: (Ljava/lang/String;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newString
+ (JNIEnv *, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newName
+ * Signature: (Ljava/lang/String;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newName
+ (JNIEnv *, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newIndirect
+ * Signature: (II)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newIndirect
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newArray
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newArray
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: newDictionary
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_newDictionary
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: addObject
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFObject;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addObject
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: createObject
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_createObject
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: deleteObject
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_deleteObject
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: addStream
+ * Signature: (Lcom/artifex/mupdf/fitz/Buffer;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addStream
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: addPage
+ * Signature: (Lcom/artifex/mupdf/fitz/Rect;ILcom/artifex/mupdf/fitz/PDFObject;Lcom/artifex/mupdf/fitz/Buffer;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addPage
+ (JNIEnv *, jobject, jobject, jint, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: insertPage
+ * Signature: (ILcom/artifex/mupdf/fitz/PDFObject;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_insertPage
+ (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: deletePage
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_deletePage
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: addImage
+ * Signature: (Lcom/artifex/mupdf/fitz/Image;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addImage
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: addSimpleFont
+ * Signature: (Lcom/artifex/mupdf/fitz/Font;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addSimpleFont
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: addFont
+ * Signature: (Lcom/artifex/mupdf/fitz/Font;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_addFont
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFDocument
+ * Method: save
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFDocument_save
+ (JNIEnv *, jobject, jstring, jstring);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+/* Header for class com_artifex_mupdf_fitz_PDFObject */
+
+#ifndef _Included_com_artifex_mupdf_fitz_PDFObject
+#define _Included_com_artifex_mupdf_fitz_PDFObject
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_finalize
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isIndirect
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isIndirect
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isNull
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isNull
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isBoolean
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isBoolean
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isInteger
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isInteger
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isReal
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isReal
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isNumber
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isNumber
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isString
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isString
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isName
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isName
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isArray
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isArray
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isDictionary
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isDictionary
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: isStream
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_isStream
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: toBoolean
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_artifex_mupdf_fitz_PDFObject_toBoolean
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: toInteger
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_PDFObject_toInteger
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: toFloat
+ * Signature: ()F
+ */
+JNIEXPORT jfloat JNICALL Java_com_artifex_mupdf_fitz_PDFObject_toFloat
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: toByteString
+ * Signature: ()[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_com_artifex_mupdf_fitz_PDFObject_toByteString
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: toIndirect
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_PDFObject_toIndirect
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: toString
+ * Signature: (Z)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_artifex_mupdf_fitz_PDFObject_toString
+ (JNIEnv *, jobject, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: resolve
+ * Signature: ()Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFObject_resolve
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: readStream
+ * Signature: ()[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_com_artifex_mupdf_fitz_PDFObject_readStream
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: readRawStream
+ * Signature: ()[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_com_artifex_mupdf_fitz_PDFObject_readRawStream
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: getArray
+ * Signature: (I)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFObject_getArray
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: getDictionary
+ * Signature: (Ljava/lang/String;)Lcom/artifex/mupdf/fitz/PDFObject;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_PDFObject_getDictionary
+ (JNIEnv *, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putArrayBoolean
+ * Signature: (IZ)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putArrayBoolean
+ (JNIEnv *, jobject, jint, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putArrayInteger
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putArrayInteger
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putArrayFloat
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putArrayFloat
+ (JNIEnv *, jobject, jint, jfloat);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putArrayString
+ * Signature: (ILjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putArrayString
+ (JNIEnv *, jobject, jint, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putArrayPDFObject
+ * Signature: (ILcom/artifex/mupdf/fitz/PDFObject;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putArrayPDFObject
+ (JNIEnv *, jobject, jint, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryStringBoolean
+ * Signature: (Ljava/lang/String;Z)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryStringBoolean
+ (JNIEnv *, jobject, jstring, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryStringInteger
+ * Signature: (Ljava/lang/String;I)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryStringInteger
+ (JNIEnv *, jobject, jstring, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryStringFloat
+ * Signature: (Ljava/lang/String;F)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryStringFloat
+ (JNIEnv *, jobject, jstring, jfloat);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryStringString
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryStringString
+ (JNIEnv *, jobject, jstring, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryStringPDFObject
+ * Signature: (Ljava/lang/String;Lcom/artifex/mupdf/fitz/PDFObject;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryStringPDFObject
+ (JNIEnv *, jobject, jstring, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryPDFObjectBoolean
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFObject;Z)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryPDFObjectBoolean
+ (JNIEnv *, jobject, jobject, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryPDFObjectInteger
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFObject;I)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryPDFObjectInteger
+ (JNIEnv *, jobject, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryPDFObjectFloat
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFObject;F)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryPDFObjectFloat
+ (JNIEnv *, jobject, jobject, jfloat);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryPDFObjectString
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFObject;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryPDFObjectString
+ (JNIEnv *, jobject, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: putDictionaryPDFObjectPDFObject
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFObject;Lcom/artifex/mupdf/fitz/PDFObject;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_putDictionaryPDFObjectPDFObject
+ (JNIEnv *, jobject, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: deleteArray
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_deleteArray
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: deleteDictionaryString
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_deleteDictionaryString
+ (JNIEnv *, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_PDFObject
+ * Method: deleteDictionaryPDFObject
+ * Signature: (Lcom/artifex/mupdf/fitz/PDFObject;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_PDFObject_deleteDictionaryPDFObject
+ (JNIEnv *, jobject, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
/* Header for class com_artifex_mupdf_fitz_Page */
#ifndef _Included_com_artifex_mupdf_fitz_Page
@@ -1092,6 +1866,30 @@ JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_Page_getAnnotations
JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_Page_getLinks
(JNIEnv *, jobject);
+/*
+ * Class: com_artifex_mupdf_fitz_Page
+ * Method: toDisplayList
+ * Signature: (Z)Lcom/artifex/mupdf/fitz/DisplayList;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Page_toDisplayList
+ (JNIEnv *, jobject, jboolean);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Page
+ * Method: toStructuredText
+ * Signature: ()Lcom/artifex/mupdf/fitz/StructuredText;
+ */
+JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Page_toStructuredText
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Page
+ * Method: search
+ * Signature: (Ljava/lang/String;)[Lcom/artifex/mupdf/fitz/Rect;
+ */
+JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_Page_search
+ (JNIEnv *, jobject, jstring);
+
#ifdef __cplusplus
}
#endif
@@ -1177,6 +1975,14 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Path_curveToY
/*
* Class: com_artifex_mupdf_fitz_Path
+ * Method: rect
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Path_rect
+ (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Path
* Method: closePath
* Signature: ()V
*/
@@ -1338,17 +2144,41 @@ JNIEXPORT jobject JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getColorSpace
* Method: getSamples
* Signature: ()[B
*/
-JNIEXPORT jbyteArray JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getSamples
+JNIEXPORT jbyteArray JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getSamples__
(JNIEnv *, jobject);
/*
* Class: com_artifex_mupdf_fitz_Pixmap
+ * Method: getSamples
+ * Signature: (III)B
+ */
+JNIEXPORT jbyte JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getSamples__III
+ (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Pixmap
* Method: getPixels
* Signature: ()[I
*/
JNIEXPORT jintArray JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getPixels
(JNIEnv *, jobject);
+/*
+ * Class: com_artifex_mupdf_fitz_Pixmap
+ * Method: getXResolution
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getXResolution
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_Pixmap
+ * Method: getYResolution
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_artifex_mupdf_fitz_Pixmap_getYResolution
+ (JNIEnv *, jobject);
+
#ifdef __cplusplus
}
#endif
@@ -1520,6 +2350,49 @@ JNIEXPORT jfloatArray JNICALL Java_com_artifex_mupdf_fitz_StrokeState_getDashes
}
#endif
#endif
+/* Header for class com_artifex_mupdf_fitz_StructuredText */
+
+#ifndef _Included_com_artifex_mupdf_fitz_StructuredText
+#define _Included_com_artifex_mupdf_fitz_StructuredText
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_artifex_mupdf_fitz_StructuredText
+ * Method: finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_StructuredText_finalize
+ (JNIEnv *, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_StructuredText
+ * Method: search
+ * Signature: (Ljava/lang/String;)[Lcom/artifex/mupdf/fitz/Rect;
+ */
+JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_StructuredText_search
+ (JNIEnv *, jobject, jstring);
+
+/*
+ * Class: com_artifex_mupdf_fitz_StructuredText
+ * Method: highlight
+ * Signature: (Lcom/artifex/mupdf/fitz/Rect;)[Lcom/artifex/mupdf/fitz/Rect;
+ */
+JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_StructuredText_highlight
+ (JNIEnv *, jobject, jobject);
+
+/*
+ * Class: com_artifex_mupdf_fitz_StructuredText
+ * Method: copy
+ * Signature: (Lcom/artifex/mupdf/fitz/Rect;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_com_artifex_mupdf_fitz_StructuredText_copy
+ (JNIEnv *, jobject, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
/* Header for class com_artifex_mupdf_fitz_Text */
#ifndef _Included_com_artifex_mupdf_fitz_Text