From 61a2d23ef72630934c603fe9ffb96ebebff6ee09 Mon Sep 17 00:00:00 2001 From: netconomy Date: Thu, 29 Nov 2007 12:00:22 +0000 Subject: PDF-AS API git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@233 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../java/at/gv/egiz/pdfas/api/io/DataSink.java | 75 ++++++++++++++++++++++ .../java/at/gv/egiz/pdfas/api/io/DataSource.java | 74 +++++++++++++++++++++ .../java/at/gv/egiz/pdfas/api/io/FileBased.java | 31 +++++++++ .../java/at/gv/egiz/pdfas/api/io/TextBased.java | 30 +++++++++ 4 files changed, 210 insertions(+) create mode 100644 src/main/java/at/gv/egiz/pdfas/api/io/DataSink.java create mode 100644 src/main/java/at/gv/egiz/pdfas/api/io/DataSource.java create mode 100644 src/main/java/at/gv/egiz/pdfas/api/io/FileBased.java create mode 100644 src/main/java/at/gv/egiz/pdfas/api/io/TextBased.java (limited to 'src/main/java/at/gv/egiz/pdfas/api/io') diff --git a/src/main/java/at/gv/egiz/pdfas/api/io/DataSink.java b/src/main/java/at/gv/egiz/pdfas/api/io/DataSink.java new file mode 100644 index 0000000..0136cf7 --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/api/io/DataSink.java @@ -0,0 +1,75 @@ +package at.gv.egiz.pdfas.api.io; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Output document data sink. + * + *

+ * Actually, the DataSink can be seen as a factory for creating OutputStreams + * with mime type and character encoding provided. This allows the API user to + * decide how data is to be stored (e.g. in a file, in a byte array, etc.). + *

+ * + * @author wprinz + */ +public interface DataSink +{ + /** + * Creates an OutputStream for binary data. + * + *

+ * Note that the stream may be written only once. Creating another stream + * overwrites the existing one. + *

+ * + * @param mimeType + * The mime type of the output data. + * @return Returns the created output stream. + * @throws IOException + * Thrown if the stream cannot be created. + */ + public OutputStream createOutputStream(String mimeType) throws IOException; + + /** + * Creates an OutputStream for character data. + * + *

+ * This is basically the same as {@link #createOutputStream(String)}, but + * allows to specify the character encoding. + *

+ * + * @param mimeType + * The mime type of the output data. + * @param characterEncoding + * The character encoding of the data. + * @return Returns the created output stream. + * @throws IOException + * Thrown if the stream cannot be created. + */ + public OutputStream createOutputStream(String mimeType, String characterEncoding) throws IOException; + + /** + * Returns the mime type of the data stream. + * + *

+ * This is only valid after a stream has been created. + *

+ * + * @return Returns the mime type of the data stream. + */ + public String getMimeType(); + + /** + * Returns the character encoding of the data stream. + * + *

+ * This is only valid after a stream has been created. Null means that no + * character encoding was specified for the data (e.g. if the data is binary). + *

+ * + * @return Returns the character encoding of the data stream. + */ + public String getCharacterEncoding(); +} diff --git a/src/main/java/at/gv/egiz/pdfas/api/io/DataSource.java b/src/main/java/at/gv/egiz/pdfas/api/io/DataSource.java new file mode 100644 index 0000000..bd8e0db --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/api/io/DataSource.java @@ -0,0 +1,74 @@ +/** + * + */ +package at.gv.egiz.pdfas.api.io; + +import java.io.InputStream; + +/** + * Input document data source. + * + *

+ * This allows the holder of the data to decide how the data is to be stored (e.g. in a File or in a byte array). + *

+ * + * @author wprinz + * + */ +public interface DataSource +{ + /** + * Creates a new InputStream that allows to read out the document's binary + * data from the beginning. + * + * @return Returns the InputStream with the binary data. + */ + public InputStream createInputStream(); + + /** + * Returns the length (number of bytes) of the stream. + * + * @return Returns the length (number of bytes) of the stream. + */ + public int getLength(); + + /** + * Returns the data of this DataSource as a byte array for random read only access. + * + *

+ * Calling this method indicates that you need a byte array for random + * read only access. The DataSource implementation should of + * course cache this byte array to avoid too much memory usage. + *

+ *

+ * Performance analysis has shown that the libraries internally convert the + * streams to byte arrays and that file system access is very slow. + *

+ *

+ * Never write to this byte array! + *

+ * + * @return Returns the data of this DataSource as a byte array for random read only access. + */ + public byte[] getAsByteArray(); + + /** + * Returns the mime type of the data. + * + * @return Returns the mime type of the data. + */ + public String getMimeType(); + + /** + * Returns the character encoding of the data. + * + *

+ * This makes only sense for character based mime types. + *

+ * + * @return Returns the character encoding of the data or null if no encoding + * is applicable (e.g. if the data is binary). + */ + public String getCharacterEncoding(); + +} diff --git a/src/main/java/at/gv/egiz/pdfas/api/io/FileBased.java b/src/main/java/at/gv/egiz/pdfas/api/io/FileBased.java new file mode 100644 index 0000000..555b630 --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/api/io/FileBased.java @@ -0,0 +1,31 @@ +/** + * + */ +package at.gv.egiz.pdfas.api.io; + +import java.io.File; + +/** + * Tells that the IO element (DataSink or DataSource) is backed by a file in the local file system. + * + *

+ * This is a hint that may be used by PDF-AS to optimize data access. + *

+ * + * @author wprinz + */ +public interface FileBased +{ + + /** + * Returns the File "behind" this io element. + * + *

+ * This is usually used to determine the file name itself. + *

+ * + * @return Returns the File "behind" this io element. + */ + public File getFile (); + +} diff --git a/src/main/java/at/gv/egiz/pdfas/api/io/TextBased.java b/src/main/java/at/gv/egiz/pdfas/api/io/TextBased.java new file mode 100644 index 0000000..68b5729 --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/api/io/TextBased.java @@ -0,0 +1,30 @@ +/** + * + */ +package at.gv.egiz.pdfas.api.io; + +/** + * Tells, that the IO Element (DataSink - but mostly DataSource) is based upon + * character data. + * + *

+ * This can be used to retrieve the character text directly with the correct + * encoding etc. + *

+ *

+ * This makes most sense for text DataSources. + *

+ * + * @author wprinz + */ +public interface TextBased +{ + + /** + * Returns the text. + * + * @return Returns the text. + */ + public String getText(); + +} -- cgit v1.2.3