aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/pdfbox/encoding/DictionaryEncoding.java
diff options
context:
space:
mode:
authortknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2006-12-01 12:20:24 +0000
committertknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2006-12-01 12:20:24 +0000
commit6025b6016517c6d898d8957d1d7e03ba71431912 (patch)
treeb15bd6fa5ffe9588a9bca3f2b8a7e358f83b6eba /src/main/java/org/pdfbox/encoding/DictionaryEncoding.java
parentd2c77e820ab4aba8235d71275755021347b3ad10 (diff)
downloadpdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.tar.gz
pdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.tar.bz2
pdf-as-3-6025b6016517c6d898d8957d1d7e03ba71431912.zip
Initial import of release 2.2.REL-2.2@923
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@4 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/org/pdfbox/encoding/DictionaryEncoding.java')
-rw-r--r--src/main/java/org/pdfbox/encoding/DictionaryEncoding.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/main/java/org/pdfbox/encoding/DictionaryEncoding.java b/src/main/java/org/pdfbox/encoding/DictionaryEncoding.java
new file mode 100644
index 0000000..4378898
--- /dev/null
+++ b/src/main/java/org/pdfbox/encoding/DictionaryEncoding.java
@@ -0,0 +1,112 @@
+/**
+ * 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.encoding;
+
+import java.io.IOException;
+
+import org.pdfbox.cos.COSArray;
+import org.pdfbox.cos.COSBase;
+import org.pdfbox.cos.COSDictionary;
+import org.pdfbox.cos.COSName;
+import org.pdfbox.cos.COSNumber;
+
+/**
+ * This will perform the encoding from a dictionary.
+ *
+ * @author Ben Litchfield (ben@csh.rit.edu)
+ * @version $Revision: 1.12 $
+ */
+public class DictionaryEncoding extends Encoding
+{
+ private COSDictionary encoding = null;
+
+ /**
+ * Constructor.
+ *
+ * @param fontEncoding The encoding dictionary.
+ *
+ * @throws IOException If there is a problem getting the base font.
+ */
+ public DictionaryEncoding( COSDictionary fontEncoding ) throws IOException
+ {
+ encoding = fontEncoding;
+
+ //first set up the base encoding
+ //The previious value WinAnsiEncoding() has been changed to StandardEnding
+ //see p 389 of the PDF 1.5 reférence table 5.11 entries in a dictionary encoding
+ //"If this entry is absent, the Differences entry describes differences from an implicit
+ //base encoding. For a font program that is embedded in the PDF file, the
+ //implicit base encoding is the font program’s built-in encoding, as described
+ //above and further elaborated in the sections on specific font types below. Otherwise,
+ //for a nonsymbolic font, it is StandardEncoding, and for a symbolic font, it
+ //is the font’s built-in encoding."
+
+ //so the default base encoding is standardEncoding
+ Encoding baseEncoding = new StandardEncoding();
+ COSName baseEncodingName = (COSName)encoding.getDictionaryObject( COSName.BASE_ENCODING );
+
+ if( baseEncodingName != null )
+ {
+ EncodingManager manager = new EncodingManager();
+ baseEncoding = manager.getEncoding( baseEncodingName );
+ }
+ nameToCode.putAll( baseEncoding.nameToCode );
+ codeToName.putAll( baseEncoding.codeToName );
+
+
+ //now replace with the differences.
+ COSArray differences = (COSArray)encoding.getDictionaryObject( COSName.DIFFERENCES );
+ int currentIndex = -1;
+ for( int i=0; differences != null && i<differences.size(); i++ )
+ {
+ COSBase next = differences.getObject( i );
+ if( next instanceof COSNumber )
+ {
+ currentIndex = (int)((COSNumber)next).intValue();
+ }
+ else if( next instanceof COSName )
+ {
+ COSName name = (COSName)next;
+ addCharacterEncoding( currentIndex++, name );
+ }
+ }
+ }
+
+ /**
+ * Convert this standard java object to a COS object.
+ *
+ * @return The cos object that matches this Java object.
+ */
+ public COSBase getCOSObject()
+ {
+ return encoding;
+ }
+}