Author: leleueri
Date: Mon Dec 26 17:30:20 2011
New Revision: 1224778

URL: http://svn.apache.org/viewvc?rev=1224778&view=rev
Log:
[PDFBOX-1195] Font Validation Problem :
- Remove useless control in the CIDFontType2 validation.
- Check the WMode value to know if the WMode is missing from the Dictionary
- manage the CIDToGID map stream.

Added:
    
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CIDToGIDMap.java
   (with props)
Modified:
    
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/ValidationConstants.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/contentstream/ContentStreamWrapper.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CFFType2FontContainer.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CompositeFontValidator.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/helpers/CatalogValidationHelper.java

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/ValidationConstants.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/ValidationConstants.java?rev=1224778&r1=1224777&r2=1224778&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/ValidationConstants.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/ValidationConstants.java
 Mon Dec 26 17:30:20 2011
@@ -167,6 +167,7 @@ public interface ValidationConstants {
   static String FONT_DICTIONARY_KEY_CMAP_WMODE = "WMode";
   static String FONT_DICTIONARY_KEY_CMAP_USECMAP = "UseCMap";
   static String FONT_DICTIONARY_KEY_CIDSET = "CIDSet";
+  static int FONT_DICTIONARY_DEFAULT_CMAP_WMODE= 0;
 
   static String STREAM_DICTIONARY_KEY_LENGHT = "Length";
   static String STREAM_DICTIONARY_KEY_FILTER = "Filter";

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/contentstream/ContentStreamWrapper.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/contentstream/ContentStreamWrapper.java?rev=1224778&r1=1224777&r2=1224778&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/contentstream/ContentStreamWrapper.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/contentstream/ContentStreamWrapper.java
 Mon Dec 26 17:30:20 2011
@@ -32,13 +32,12 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-
 import org.apache.padaf.preflight.DocumentHandler;
 import org.apache.padaf.preflight.ValidationException;
 import org.apache.padaf.preflight.ValidationResult.ValidationError;
 import org.apache.padaf.preflight.font.AbstractFontContainer;
-import org.apache.padaf.preflight.font.GlyphException;
 import org.apache.padaf.preflight.font.AbstractFontContainer.State;
+import org.apache.padaf.preflight.font.GlyphException;
 import org.apache.padaf.preflight.utils.ContentStreamEngine;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CFFType2FontContainer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CFFType2FontContainer.java?rev=1224778&r1=1224777&r2=1224778&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CFFType2FontContainer.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CFFType2FontContainer.java
 Mon Dec 26 17:30:20 2011
@@ -21,7 +21,6 @@
 
 package org.apache.padaf.preflight.font;
 
-import org.apache.fontbox.cmap.CMap;
 import org.apache.fontbox.ttf.TrueTypeFont;
 import org.apache.padaf.preflight.ValidationConstants;
 
@@ -32,7 +31,7 @@ public class CFFType2FontContainer exten
         * extracted by the TrueTypeParser object
         */
        private TrueTypeFont fontObject = null;
-       private CMap cidToGidMap = null;
+       private CIDToGIDMap cidToGidMap = null;
 
        private int numberOfLongHorMetrics;
        private int unitsPerEm;
@@ -84,25 +83,10 @@ public class CFFType2FontContainer exten
                int glyphIndex = cid;
 
                if (this.cidToGidMap != null) {
-                       byte[] cidAsByteArray = null;
-                       if (cid < 256) {
-                               cidAsByteArray = new byte[1];
-                               cidAsByteArray[0] = (byte) (cid & 0xFF);
-                       } else {
-                               cidAsByteArray = new byte[1];
-                               cidAsByteArray[0] = (byte) ((cid >> 8) & 0xFF);
-                               cidAsByteArray[1] = (byte) (cid & 0xFF);
-                       }
-
-                       String glyphIdAsString = 
this.cidToGidMap.lookup(cidAsByteArray, 0,     cidAsByteArray.length);
-                       // ---- glyphIdAsString should be a Integer
-                       // TODO OD-PDFA-4 : A vérifier avec un PDF qui 
contient une stream pour
-                       // CidToGid...
-                       try {
-                               glyphIndex = Integer.parseInt(glyphIdAsString);
-                       } catch (NumberFormatException e) {
+                       glyphIndex = cidToGidMap.getGID(cid);
+                       if (glyphIndex==cidToGidMap.NOTDEF_GLYPH_INDEX) {
                                GlyphException ge = new 
GlyphException(ValidationConstants.ERROR_FONTS_GLYPH_MISSING, cid, 
-                                               "CID " + cid + " isn't linked 
with a GlyphIndex >> " + glyphIdAsString);
+                                               "CID " + cid + " can't be found 
in the cidToGid map");
                                addKnownCidElement(new GlyphDetail(cid, ge));
                                throw ge;
                        }
@@ -114,7 +98,7 @@ public class CFFType2FontContainer exten
                this.fontObject = fontObject;
        }
 
-       void setCmap(CMap cmap) {
+       void setCmap(CIDToGIDMap cmap) {
                this.cidToGidMap = cmap;
        }
 

Added: 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CIDToGIDMap.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CIDToGIDMap.java?rev=1224778&view=auto
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CIDToGIDMap.java
 (added)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CIDToGIDMap.java
 Mon Dec 26 17:30:20 2011
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ ****************************************************************************/
+
+package org.apache.padaf.preflight.font;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.pdfbox.cos.COSStream;
+
+public class CIDToGIDMap {
+
+       public final int NOTDEF_GLYPH_INDEX = 0;
+       private byte[] map = null;
+       
+       /**
+        * Copy the unfiltered stream content in a byte array.
+        * @param stream
+        * @throws IOException if the stream can't be copied
+        */
+       public void parseStream(COSStream stream) throws IOException {
+               InputStream is = stream.getUnfilteredStream();
+               ByteArrayOutputStream os = new ByteArrayOutputStream();
+               
+               try {
+                       IOUtils.copy(stream.getUnfilteredStream(), os);
+                       map  = os.toByteArray();
+               } catch (IOException e) {
+                       IOUtils.closeQuietly(is);
+                       IOUtils.closeQuietly(os);
+               }
+       }
+       
+       /**
+        * Return the glyph index according to the CID.
+        * @param cid
+        * @return
+        */
+       public int getGID(int cid) {
+               if (map == null || (cid*2+1) >= map.length) {
+                       return NOTDEF_GLYPH_INDEX;
+               }
+               int index = cid*2;
+               return ((map[index]&0xFF)<<8)^(map[index+1]&0xFF);
+       }
+}
\ No newline at end of file

Propchange: 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CIDToGIDMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CompositeFontValidator.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CompositeFontValidator.java?rev=1224778&r1=1224777&r2=1224778&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CompositeFontValidator.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/font/CompositeFontValidator.java
 Mon Dec 26 17:30:20 2011
@@ -55,12 +55,12 @@ public class CompositeFontValidator exte
        protected COSStream cmap;
        protected COSBase toUnicode;
 
-       protected CMap cidToGidMap = null;
+       protected CIDToGIDMap cidToGidMap = null;
 
        protected boolean isIdentityCMap = false;
 
        public CompositeFontValidator(DocumentHandler handler, COSObject obj)
-       throws ValidationException {
+                       throws ValidationException {
                super(handler, obj);
        }
 
@@ -83,7 +83,7 @@ public class CompositeFontValidator exte
                                || (subtype == null || "".equals(subtype))) {
                        this.fontContainer.addError(new ValidationError(
                                        ERROR_FONTS_DICTIONARY_INVALID,
-                       "Type and/or Subtype keys are missing"));
+                                       "Type and/or Subtype keys are 
missing"));
                        return false;
                }
 
@@ -101,7 +101,7 @@ public class CompositeFontValidator exte
                        // rule
                        this.fontContainer.addError(new ValidationError(
                                        ERROR_FONTS_DICTIONARY_INVALID,
-                       "BaseFont, Encoding or DescendantFonts keys are 
missing"));
+                                       "BaseFont, Encoding or DescendantFonts 
keys are missing"));
                        return false;
                }
 
@@ -133,7 +133,7 @@ public class CompositeFontValidator exte
                if (array == null) {
                        this.fontContainer.addError(new ValidationError(
                                        ERROR_FONTS_CIDKEYED_INVALID,
-                       "CIDFont is missing from the DescendantFonts array"));
+                                       "CIDFont is missing from the 
DescendantFonts array"));
                        return false;
                }
                // ---- in PDF 1.4, this array must contain only one element,
@@ -143,7 +143,7 @@ public class CompositeFontValidator exte
                if (array.size() != 1) {
                        this.fontContainer.addError(new ValidationError(
                                        ERROR_FONTS_CIDKEYED_INVALID,
-                       "The DescendantFonts array should have one element."));
+                                       "The DescendantFonts array should have 
one element."));
                        return false;
                }
 
@@ -151,7 +151,7 @@ public class CompositeFontValidator exte
                if (this.cidFont == null) {
                        this.fontContainer
                        .addError(new 
ValidationError(ERROR_FONTS_CIDKEYED_INVALID,
-                       "The DescendantFonts array should have one element with 
is a dictionary."));
+                                       "The DescendantFonts array should have 
one element with is a dictionary."));
                        return false;
                }
 
@@ -164,7 +164,7 @@ public class CompositeFontValidator exte
                                || (subtype == null || "".equals(subtype))) {
                        this.fontContainer.addError(new ValidationError(
                                        ERROR_FONTS_DICTIONARY_INVALID,
-                       "Type and/or Subtype keys are missing"));
+                                       "Type and/or Subtype keys are 
missing"));
                        return false;
                }
 
@@ -174,7 +174,7 @@ public class CompositeFontValidator exte
                if (!FONT_DICTIONARY_VALUE_FONT.equals(type) || !(isT0 || 
isT2)) {
                        this.fontContainer.addError(new ValidationError(
                                        ERROR_FONTS_DICTIONARY_INVALID,
-                       "Type and/or Subtype keys are missing"));
+                                       "Type and/or Subtype keys are 
missing"));
                        return false;
                }
 
@@ -273,8 +273,8 @@ public class CompositeFontValidator exte
                } else if (COSUtils.isStream(ctog, cDoc)) {
                        try {
                                COSStream ctogMap = COSUtils.getAsStream(ctog, 
cDoc);
-                               this.cidToGidMap = new CMapParser().parse(null, 
ctogMap
-                                               .getUnfilteredStream());
+                               this.cidToGidMap = new CIDToGIDMap();
+                               this.cidToGidMap.parseStream(ctogMap);
                        } catch (IOException e) {
                                // ---- map can be invalid, return a Validation 
Error
                                this.fontContainer.addError(new ValidationError(
@@ -308,7 +308,7 @@ public class CompositeFontValidator exte
                                        .equals(str))) {
                                this.fontContainer.addError(new ValidationError(
                                                ERROR_FONTS_CIDKEYED_INVALID,
-                               "The CMap is a string but it isn't an 
Identity-H/V"));
+                                               "The CMap is a string but it 
isn't an Identity-H/V"));
                                return false;
                        }
                        isIdentityCMap = true;
@@ -321,7 +321,7 @@ public class CompositeFontValidator exte
                        // ---- CMap type is invalid
                        this.fontContainer.addError(new ValidationError(
                                        
ERROR_FONTS_CIDKEYED_CMAP_INVALID_OR_MISSING,
-                       "The CMap type is invalid"));
+                                       "The CMap type is invalid"));
                        return false;
                }
                return true;
@@ -340,22 +340,24 @@ public class CompositeFontValidator exte
        private boolean processCMapAsStream(COSStream aCMap) {
                COSDocument cDoc = handler.getDocument().getDocument();
 
-               String type = aCMap
-               .getNameAsString(COSName.getPDFName(DICTIONARY_KEY_TYPE));
-               String cmapName = aCMap.getNameAsString(COSName
-                               .getPDFName(FONT_DICTIONARY_KEY_CMAP_NAME));
-               COSBase sysinfo = aCMap.getItem(COSName
-                               .getPDFName(FONT_DICTIONARY_KEY_CID_SYSINFO));
-               int wmode = aCMap
-               .getInt(COSName.getPDFName(FONT_DICTIONARY_KEY_CMAP_WMODE));
-               COSBase cmapUsed = aCMap.getItem(COSName
-                               .getPDFName(FONT_DICTIONARY_KEY_CMAP_USECMAP));
+               String type = 
aCMap.getNameAsString(COSName.getPDFName(DICTIONARY_KEY_TYPE));
+               String cmapName = 
aCMap.getNameAsString(COSName.getPDFName(FONT_DICTIONARY_KEY_CMAP_NAME));
+               COSBase sysinfo = 
aCMap.getItem(COSName.getPDFName(FONT_DICTIONARY_KEY_CID_SYSINFO));
+               int wmode = 
aCMap.getInt(COSName.getPDFName(FONT_DICTIONARY_KEY_CMAP_WMODE));
+               if (wmode == -1) {
+                       /*
+                        * According to the getInt javadoc, -1 is returned if 
there are no result.
+                        * In the PDF Reference v1.7 p449, we can read that 
Default value is 0.
+                        */
+                       wmode = FONT_DICTIONARY_DEFAULT_CMAP_WMODE;
+               }
+               COSBase cmapUsed = 
aCMap.getItem(COSName.getPDFName(FONT_DICTIONARY_KEY_CMAP_USECMAP));
 
                if (!FONT_DICTIONARY_VALUE_TYPE_CMAP.equals(type)) {
                        // ---- CMap type is invalid
                        this.fontContainer.addError(new ValidationError(
                                        
ERROR_FONTS_CIDKEYED_CMAP_INVALID_OR_MISSING,
-                       "The CMap type is invalid"));
+                                       "The CMap type is invalid"));
                        return false;
                }
 
@@ -367,23 +369,22 @@ public class CompositeFontValidator exte
                if (cmapName == null || "".equals(cmapName) || wmode > 1) {
                        this.fontContainer.addError(new ValidationError(
                                        
ERROR_FONTS_CIDKEYED_CMAP_INVALID_OR_MISSING,
-                       "Some elements in the CMap dictionary are missing or 
invalid"));
+                                       "Some elements in the CMap dictionary 
are missing or invalid"));
                        return false;
                }
 
                try {
 
-                       CMap fontboxCMap = new CMapParser().parse(null, aCMap
-                                       .getUnfilteredStream());
+                       CMap fontboxCMap = new CMapParser().parse(null, 
aCMap.getUnfilteredStream());
                        int wmValue = fontboxCMap.getWMode();
-                       String cmnValue = fontboxCMap.getName(); 
//getCmapEntry("CMapName");
+                       String cmnValue = fontboxCMap.getName();
 
 
                        if (wmValue != wmode) {
 
                                this.fontContainer.addError(new ValidationError(
                                                
ERROR_FONTS_CIDKEYED_CMAP_INVALID_OR_MISSING,
-                               "WMode is inconsistent"));
+                                               "WMode is inconsistent"));
                                return false;
                        }
 
@@ -391,7 +392,7 @@ public class CompositeFontValidator exte
 
                                this.fontContainer.addError(new ValidationError(
                                                
ERROR_FONTS_CIDKEYED_CMAP_INVALID_OR_MISSING,
-                               "CMapName is inconsistent"));
+                                               "CMapName is inconsistent"));
                                return false;
                        }
 
@@ -480,7 +481,7 @@ public class CompositeFontValidator exte
                        if (!(key instanceof COSName)) {
                                this.fontContainer.addError(new 
ValidationResult.ValidationError(
                                                
ValidationConstants.ERROR_SYNTAX_DICTIONARY_KEY_INVALID,
-                               "Invalid key in The font descriptor"));
+                                               "Invalid key in The font 
descriptor"));
                                return false;
                        }
 
@@ -530,12 +531,12 @@ public class CompositeFontValidator exte
         * @throws ValidationException
         */
        protected boolean processCIDFontType0(COSBase fontDesc)
-       throws ValidationException {
+                       throws ValidationException {
                COSDictionary fontDescDic = COSUtils.getAsDictionary(fontDesc, 
handler
                                .getDocument().getDocument());
                if (fontDescDic == null) {
                        throw new ValidationException(
-                       "Unable to process CIDFontType0 because of the font 
descriptor is invalid.");
+                                       "Unable to process CIDFontType0 because 
of the font descriptor is invalid.");
                }
                PDFontDescriptorDictionary pfDescriptor = new 
PDFontDescriptorDictionary(
                                fontDescDic);
@@ -569,7 +570,7 @@ public class CompositeFontValidator exte
                if (fontName == null) {
                        this.fontContainer.addError(new 
ValidationResult.ValidationError(
                                        ERROR_FONTS_DESCRIPTOR_INVALID,
-                       "The FontName in font descriptor is missing"));
+                                       "The FontName in font descriptor is 
missing"));
                        return false;
                }
 
@@ -579,7 +580,7 @@ public class CompositeFontValidator exte
                        this.fontContainer
                        .addError(new ValidationResult.ValidationError(
                                        ERROR_FONTS_DESCRIPTOR_INVALID,
-                       "The FontName in font descriptor isn't the same as the 
BaseFont in the Font dictionary"));
+                                       "The FontName in font descriptor isn't 
the same as the BaseFont in the Font dictionary"));
                        return false;
                }
                return true;
@@ -601,8 +602,8 @@ public class CompositeFontValidator exte
                PDStream ff3 = pfDescriptor.getFontFile3();
 
                boolean onlyOne = (ff1 != null && ff2 == null && ff3 == null)
-               || (ff1 == null && ff2 != null && ff3 == null)
-               || (ff1 == null && ff2 == null && ff3 != null);
+                               || (ff1 == null && ff2 != null && ff3 == null)
+                               || (ff1 == null && ff2 == null && ff3 != null);
 
                if ((ff3 == null) || !onlyOne) {
                        this.fontContainer.addError(new 
ValidationResult.ValidationError(
@@ -628,7 +629,7 @@ public class CompositeFontValidator exte
                                .equals(st))) {
                        this.fontContainer.addError(new 
ValidationResult.ValidationError(
                                        ERROR_FONTS_FONT_FILEX_INVALID,
-                       "The FontFile3 stream doesn't have the right Subtype"));
+                                       "The FontFile3 stream doesn't have the 
right Subtype"));
                        return false;
                }
 
@@ -645,7 +646,7 @@ public class CompositeFontValidator exte
                        }
 
                        return checkCIDFontWidths(lCFonts)
-                       && checkFontFileMetaData(pfDescriptor, ff3);
+                                       && checkFontFileMetaData(pfDescriptor, 
ff3);
                } catch (IOException e) {
                        this.fontContainer.addError(new 
ValidationResult.ValidationError(
                                        ERROR_FONTS_CID_DAMAGED, "The FontFile 
can't be read"));
@@ -663,7 +664,7 @@ public class CompositeFontValidator exte
         * @throws ValidationException
         */
        protected boolean checkTTFontMetrics(TrueTypeFont ttf)
-       throws ValidationException {
+                       throws ValidationException {
                int unitsPerEm = ttf.getHeader().getUnitsPerEm();
                int[] glyphWidths = 
ttf.getHorizontalMetrics().getAdvanceWidth();
                /* In a Mono space font program, the length of the AdvanceWidth 
array must be one.
@@ -690,7 +691,7 @@ public class CompositeFontValidator exte
         * @throws ValidationException
         */
        protected boolean checkCIDFontWidths(List<CFFFont> lCFonts)
-       throws ValidationException {
+                       throws ValidationException {
                // ---- Extract Widths and default Width from the CIDFont 
dictionary
                CFFType0FontContainer type0FontContainer = 
((CompositeFontContainer)this.fontContainer).getCFFType0();
                type0FontContainer.setFontObject(lCFonts);
@@ -713,8 +714,8 @@ public class CompositeFontValidator exte
                PDStream ff3 = pfDescriptor.getFontFile3();
 
                boolean onlyOne = (ff1 != null && ff2 == null && ff3 == null)
-               || (ff1 == null && ff2 != null && ff3 == null)
-               || (ff1 == null && ff2 == null && ff3 != null);
+                               || (ff1 == null && ff2 != null && ff3 == null)
+                               || (ff1 == null && ff2 == null && ff3 != null);
 
                if ((ff2 == null) || !onlyOne) {
                        this.fontContainer.addError(new 
ValidationResult.ValidationError(
@@ -732,33 +733,24 @@ public class CompositeFontValidator exte
                        return false;
                }
 
-               boolean hasLength1 = stream.getInt(COSName
-                               .getPDFName(FONT_DICTIONARY_KEY_LENGTH1)) > 0;
-                               if (!hasLength1) {
-                                       this.fontContainer.addError(new 
ValidationResult.ValidationError(
-                                                       
ValidationConstants.ERROR_FONTS_FONT_FILEX_INVALID,
-                                       "The FontFile is invalid"));
-                                       return false;
-                               }
-
-                               // ---- try to load the font using the 
java.awt.font object.
-                               // ---- if the font is invalid, an exception 
will be thrown
-                               TrueTypeFont ttf = null;
-                               try {
-                                       // ---- According to PDF Reference, 
CIDFontType2 is a TrueType font.
-                                       // ---- Remark : Java.awt.Font throws 
exception when a CIDFontType2 is
-                                       // parsed even if it is valid.
-                                       ttf = new 
CIDFontType2Parser(true).parseTTF(new ByteArrayInputStream(ff2
-                                                       .getByteArray()));
-                               } catch (Exception e) {
-                                       // ---- Exceptionally, Exception is 
catched Here because of damaged font
-                                       // can throw NullPointer Exception...
-                                       this.fontContainer.addError(new 
ValidationResult.ValidationError(
-                                                       
ERROR_FONTS_CID_DAMAGED, "The FontFile can't be read"));
-                                       return false;
-                               }
+               // ---- try to load the font using the java.awt.font object.
+               // ---- if the font is invalid, an exception will be thrown
+               TrueTypeFont ttf = null;
+               try {
+                       // ---- According to PDF Reference, CIDFontType2 is a 
TrueType font.
+                       // ---- Remark : Java.awt.Font throws exception when a 
CIDFontType2 is
+                       // parsed even if it is valid.
+                       ttf = new CIDFontType2Parser(true).parseTTF(new 
ByteArrayInputStream(ff2
+                                       .getByteArray()));
+               } catch (Exception e) {
+                       // ---- Exceptionally, Exception is catched Here 
because of damaged font
+                       // can throw NullPointer Exception...
+                       this.fontContainer.addError(new 
ValidationResult.ValidationError(
+                                       ERROR_FONTS_CID_DAMAGED, "The FontFile 
can't be read"));
+                       return false;
+               }
 
-                               return checkTTFontMetrics(ttf) && 
checkFontFileMetaData(pfDescriptor, ff2);
+               return checkTTFontMetrics(ttf) && 
checkFontFileMetaData(pfDescriptor, ff2);
        }
 
        /**
@@ -778,7 +770,7 @@ public class CompositeFontValidator exte
                                                        .getDocument())) {
                                this.fontContainer.addError(new 
ValidationResult.ValidationError(
                                                
ERROR_FONTS_CIDSET_MISSING_FOR_SUBSET,
-                               "The CIDSet entry is missing for the Composite 
Subset"));
+                                               "The CIDSet entry is missing 
for the Composite Subset"));
                                return false;
                        }
                }
@@ -792,12 +784,12 @@ public class CompositeFontValidator exte
         * @throws ValidationException
         */
        protected boolean processCIDFontType2(COSBase fontDesc)
-       throws ValidationException {
+                       throws ValidationException {
                COSDictionary fontDescDic = COSUtils.getAsDictionary(fontDesc, 
handler
                                .getDocument().getDocument());
                if (fontDescDic == null) {
                        throw new ValidationException(
-                       "Unable to process CIDFontType2 because of the font 
descriptor is invalid.");
+                                       "Unable to process CIDFontType2 because 
of the font descriptor is invalid.");
                }
                PDFontDescriptorDictionary pfDescriptor = new 
PDFontDescriptorDictionary(
                                fontDescDic);

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/helpers/CatalogValidationHelper.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/helpers/CatalogValidationHelper.java?rev=1224778&r1=1224777&r2=1224778&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/helpers/CatalogValidationHelper.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/padaf/preflight/helpers/CatalogValidationHelper.java
 Mon Dec 26 17:30:20 2011
@@ -387,7 +387,7 @@ public class CatalogValidationHelper ext
                        if (handler.getIccProfileWrapper() == null) {
                                handler.setIccProfileWrapper(new 
ICCProfileWrapper(iccp));
                        }
-
+                       
                        // ---- keep reference to avoid multiple profile 
definition
                        mapDestOutputProfile.put(new COSObjectKey((COSObject) 
destOutputProfile),
                                        true);


Reply via email to