aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/pdfbox/filter/ASCIIHexFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/pdfbox/filter/ASCIIHexFilter.java')
-rw-r--r--src/main/java/org/pdfbox/filter/ASCIIHexFilter.java205
1 files changed, 205 insertions, 0 deletions
diff --git a/src/main/java/org/pdfbox/filter/ASCIIHexFilter.java b/src/main/java/org/pdfbox/filter/ASCIIHexFilter.java
new file mode 100644
index 0000000..b3cf506
--- /dev/null
+++ b/src/main/java/org/pdfbox/filter/ASCIIHexFilter.java
@@ -0,0 +1,205 @@
+/**
+ * Copyright (c) 2003, www.pdfbox.org
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of pdfbox; nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * http://www.pdfbox.org
+ *
+ */
+package org.pdfbox.filter;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.pdfbox.cos.COSDictionary;
+
+import org.pdfbox.persistence.util.COSHEXTable;
+
+/**
+ * This is the used for the ASCIIHexDecode filter.
+ *
+ * @author Ben Litchfield (ben@csh.rit.edu)
+ * @version $Revision: 1.7 $
+ */
+public class ASCIIHexFilter implements Filter
+{
+ private static final int ASCII_ZERO = (int)'0';
+
+
+ /**
+ * This will decode some compressed data.
+ *
+ * @param compressedData The compressed byte stream.
+ * @param result The place to write the uncompressed byte stream.
+ * @param options The options to use to encode the data.
+ *
+ * @throws IOException If there is an error decompressing the stream.
+ */
+ public void decode( InputStream compressedData, OutputStream result, COSDictionary options ) throws IOException
+ {
+ int value =0;
+ int firstByte = 0;
+ int secondByte = 0;
+ while( (firstByte = compressedData.read()) != -1 )
+ {
+ value = REVERSE_HEX[firstByte] * 16;
+ secondByte = compressedData.read();
+ if( secondByte >= 0 )
+ {
+ value += REVERSE_HEX[ secondByte ];
+ }
+ result.write( value );
+ }
+ result.flush();
+ }
+
+ private static final int[] REVERSE_HEX =
+ {
+ -1, //0
+ -1, //1
+ -1, //2
+ -1, //3
+ -1, //4
+ -1, //5
+ -1, //6
+ -1, //7
+ -1, //8
+ -1, //9
+ -1, //10
+ -1, //11
+ -1, //12
+ -1, //13
+ -1, //14
+ -1, //15
+ -1, //16
+ -1, //17
+ -1, //18
+ -1, //19
+ -1, //20
+ -1, //21
+ -1, //22
+ -1, //23
+ -1, //24
+ -1, //25
+ -1, //26
+ -1, //27
+ -1, //28
+ -1, //29
+ -1, //30
+ -1, //31
+ -1, //32
+ -1, //33
+ -1, //34
+ -1, //35
+ -1, //36
+ -1, //37
+ -1, //38
+ -1, //39
+ -1, //40
+ -1, //41
+ -1, //42
+ -1, //43
+ -1, //44
+ -1, //45
+ -1, //46
+ -1, //47
+ 0, //48
+ 1, //49
+ 2, //50
+ 3, //51
+ 4, //52
+ 5, //53
+ 6, //54
+ 7, //55
+ 8, //56
+ 9, //57
+ -1, //58
+ -1, //59
+ -1, //60
+ -1, //61
+ -1, //62
+ -1, //63
+ -1, //64
+ 10, //65
+ 11, //66
+ 12, //67
+ 13, //68
+ 14, //69
+ 15, //70
+ -1, //71
+ -1, //72
+ -1, //73
+ -1, //74
+ -1, //75
+ -1, //76
+ -1, //77
+ -1, //78
+ -1, //79
+ -1, //80
+ -1, //81
+ -1, //82
+ -1, //83
+ -1, //84
+ -1, //85
+ -1, //86
+ -1, //87
+ -1, //88
+ -1, //89
+ -1, //90
+ -1, //91
+ -1, //92
+ -1, //93
+ -1, //94
+ -1, //95
+ -1, //96
+ 10, //97
+ 11, //98
+ 12, //99
+ 13, //100
+ 14, //101
+ 15, //102
+ };
+
+ /**
+ * This will encode some data.
+ *
+ * @param rawData The raw data to encode.
+ * @param result The place to write to encoded results to.
+ * @param options The options to use to encode the data.
+ *
+ * @throws IOException If there is an error compressing the stream.
+ */
+ public void encode( InputStream rawData, OutputStream result, COSDictionary options ) throws IOException
+ {
+ int byteRead = 0;
+ while( (byteRead = rawData.read()) != -1 )
+ {
+ int value = (byteRead+256)%256;
+ result.write( COSHEXTable.TABLE[value] );
+ }
+ result.flush();
+ }
+} \ No newline at end of file