You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2012/07/14 21:53:50 UTC

svn commit: r1361579 [3/3] - in /pdfbox/trunk: pdfbox/src/main/java/org/apache/pdfbox/cos/ preflight/src/main/java/org/apache/padaf/preflight/contentstream/ preflight/src/main/java/org/apache/pdfbox/preflight/ preflight/src/main/java/org/apache/pdfbox/...

Added: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java?rev=1361579&view=auto
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java (added)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java Sat Jul 14 19:53:48 2012
@@ -0,0 +1,166 @@
+/*****************************************************************************
+ * 
+ * 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.pdfbox.preflight.font.descriptor;
+
+import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_CHARSET_MISSING_FOR_SUBSET;
+import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_CID_DAMAGED;
+import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_FONT_FILEX_INVALID;
+import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_TYPE1_DAMAGED;
+import static org.apache.pdfbox.preflight.PreflightConstants.FONT_DICTIONARY_KEY_LENGTH2;
+import static org.apache.pdfbox.preflight.PreflightConstants.FONT_DICTIONARY_KEY_LENGTH3;
+import static org.apache.pdfbox.preflight.font.FontValidator.isSubSet;
+
+import java.awt.Font;
+import java.awt.FontFormatException;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.fontbox.cff.CFFFont;
+import org.apache.fontbox.cff.CFFParser;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDFontDescriptorDictionary;
+import org.apache.pdfbox.preflight.PreflightContext;
+import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
+import org.apache.pdfbox.preflight.exception.ValidationException;
+import org.apache.pdfbox.preflight.font.container.Type1Container;
+import org.apache.pdfbox.preflight.font.util.Type1;
+import org.apache.pdfbox.preflight.font.util.Type1Parser;
+
+public class Type1DescriptorHelper extends FontDescriptorHelper<Type1Container> {
+	private boolean isFontFile1 = true;
+
+	public Type1DescriptorHelper(PreflightContext context, PDFont font, Type1Container fontContainer) {
+		super(context, font, fontContainer);
+	}
+
+	protected boolean checkMandatoryFields(COSDictionary fDescriptor) {
+		boolean result = super.checkMandatoryFields(fDescriptor);
+		/*
+		 * if the this font is a Subset, the CharSet entry must be present in
+		 * the FontDescriptor
+		 */
+		if (isSubSet(fontDescriptor.getFontName())) {
+			String charsetStr = fontDescriptor.getCharSet();
+			if (charsetStr == null || "".equals(charsetStr)) {
+				this.fContainer.push(new ValidationError(ERROR_FONTS_CHARSET_MISSING_FOR_SUBSET, "The Charset entry is missing for the Type1 Subset"));
+				result = false;
+			}
+		}
+		return result;
+	}
+
+	@Override
+	public PDStream extractFontFile(PDFontDescriptorDictionary fontDescriptor) {
+		PDStream ff1 = fontDescriptor.getFontFile();
+		PDStream ff3 = fontDescriptor.getFontFile3();
+
+		if (ff1 != null) {
+			COSStream stream = ff1.getStream();
+			if (stream == null) {
+				this.fContainer.push(new ValidationError(ERROR_FONTS_FONT_FILEX_INVALID, "The FontFile is missing"));
+				this.fContainer.notEmbedded();
+				return null;
+			}
+
+			boolean hasLength1 = stream.getInt(COSName.LENGTH1) > 0;
+			boolean hasLength2 = stream.getInt(COSName.getPDFName(FONT_DICTIONARY_KEY_LENGTH2)) > 0;
+			boolean hasLength3 = stream.getInt(COSName.getPDFName(FONT_DICTIONARY_KEY_LENGTH3)) > 0;
+			if (!(hasLength1 && hasLength2 && hasLength3)) {
+				this.fContainer.push(new ValidationError(ERROR_FONTS_FONT_FILEX_INVALID, "The FontFile is invalid"));
+				return null;
+			}
+
+			return ff1;
+		} else {
+			this.isFontFile1 = false;
+			this.fContainer.setFontFile1(isFontFile1);
+			return ff3;
+		}
+	}
+
+	@Override
+	protected void processFontFile(PDFontDescriptorDictionary fontDescriptor,	PDStream fontFile) {
+		if (isFontFile1) {
+			processFontFile1(fontDescriptor, fontFile);
+		} else {
+			processFontFile3(fontDescriptor, fontFile);
+		}
+	}
+
+	/**
+	 * Try to load the font using the java.awt.font object.
+	 * if the font is invalid, an exception will be pushed in the font container
+	 * @param fontDescriptor
+	 * @param fontFile
+	 */
+	protected void processFontFile1(PDFontDescriptorDictionary fontDescriptor,	PDStream fontFile) {
+		ByteArrayInputStream bis = null;
+		try {
+			bis = new ByteArrayInputStream(fontFile.getByteArray());
+			Font.createFont(Font.TYPE1_FONT, bis);
+			IOUtils.closeQuietly(bis);
+
+			// Parse the Type1 Font program in order to extract Glyph Width
+			bis = new ByteArrayInputStream(fontFile.getByteArray());
+			COSStream streamObj = fontFile.getStream();
+			int length1 = streamObj.getInt(COSName.LENGTH1);
+			int length2 = streamObj.getInt(COSName.LENGTH2);
+			Type1Parser parserForMetrics = Type1Parser.createParserWithEncodingObject(bis, length1, length2, font.getFontEncoding());
+			Type1 parsedData = parserForMetrics.parse();
+
+			this.fContainer.setType1Font(parsedData);
+
+		} catch (IOException e) {
+			this.fContainer.push(new ValidationError(ERROR_FONTS_TYPE1_DAMAGED, "The FontFile can't be read"));
+		} catch (FontFormatException e) {
+			this.fContainer.push(new ValidationError(ERROR_FONTS_TYPE1_DAMAGED, "The FontFile is damaged"));
+		} finally {
+			IOUtils.closeQuietly(bis);
+		}
+	}
+
+	/**
+	 * Type1C is a CFF font format, extract all CFFFont object from the stream
+	 * 
+	 * @param fontStream
+	 * @return
+	 * @throws ValidationException
+	 */
+	protected void processFontFile3(PDFontDescriptorDictionary fontDescriptor,	PDStream fontFile) {
+		try {
+			CFFParser cffParser = new CFFParser();
+			List<CFFFont> lCFonts = cffParser.parse(fontFile.getByteArray());
+			if (lCFonts == null || lCFonts.isEmpty()) {
+				this.fContainer.push(new ValidationError(ERROR_FONTS_CID_DAMAGED, "The FontFile can't be read"));
+			}
+			this.fContainer.setCFFFontObjects(lCFonts);
+		} catch (IOException e) {
+			this.fContainer.push(new ValidationError(ERROR_FONTS_CID_DAMAGED, "The FontFile can't be read"));
+		}
+	}
+}

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

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/CIDToGIDMap.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDToGIDMap.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/CIDToGIDMap.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/CIDToGIDMap.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDToGIDMap.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDToGIDMap.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/CIDToGIDMap.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font;
+package org.apache.pdfbox.preflight.font.util;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java (from r1359830, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontMetaDataValidation.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontMetaDataValidation.java&r1=1359830&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontMetaDataValidation.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font;
+package org.apache.pdfbox.preflight.font.util;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -37,6 +37,7 @@ import org.apache.pdfbox.pdmodel.font.PD
 import org.apache.pdfbox.preflight.PreflightConstants;
 import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
 import org.apache.pdfbox.preflight.exception.ValidationException;
+import org.apache.pdfbox.preflight.font.FontValidator;
 
 /**
  * Class used to validate the MetaData entry of the Font File Stream dictionary.
@@ -63,16 +64,12 @@ public class FontMetaDataValidation {
 	 *          The FontDescriptor dictionary
 	 * @param ve
 	 *          the list of validation error to update if the validation fails
-	 * @throws ValidationException
 	 */
-	public boolean analyseFontName(XMPMetadata metadata,
-			PDFontDescriptor fontDesc, List<ValidationError> ve)
-	throws ValidationException {
+	public boolean analyseFontName(XMPMetadata metadata,PDFontDescriptor fontDesc, List<ValidationError> ve){
 		String fontName = fontDesc.getFontName();
 		String noSubSetName = fontName;
-		if (AbstractFontValidator.isSubSet(fontName)) {
-			noSubSetName = fontName.split(AbstractFontValidator
-					.getSubSetPatternDelimiter())[1];
+		if (FontValidator.isSubSet(fontName)) {
+			noSubSetName = fontName.split(FontValidator.getSubSetPatternDelimiter())[1];
 		}
 
 		DublinCoreSchema dc = metadata.getDublinCoreSchema();
@@ -149,10 +146,8 @@ public class FontMetaDataValidation {
 	 *          The FontDescriptor dictionary
 	 * @param ve
 	 *          the list of validation error to update if the validation fails
-	 * @throws ValidationException
 	 */
-	public boolean analyseRights(XMPMetadata metadata, PDFontDescriptor fontDesc, List<ValidationError> ve)
-	throws ValidationException {
+	public boolean analyseRights(XMPMetadata metadata, PDFontDescriptor fontDesc, List<ValidationError> ve)  {
 
 		DublinCoreSchema dc = metadata.getDublinCoreSchema();
 		if (dc != null) {

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/GlyphDescription.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/GlyphDescription.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/GlyphDescription.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font.type1;
+package org.apache.pdfbox.preflight.font.util;
 
 import java.util.List;
 

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDetail.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/GlyphDetail.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDetail.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDetail.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/GlyphDetail.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/GlyphDetail.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDetail.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font;
+package org.apache.pdfbox.preflight.font.util;
 
 public class GlyphDetail {
 	private GlyphException invalidGlyphError = null;

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphException.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/GlyphException.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphException.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphException.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/GlyphException.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/GlyphException.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphException.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font;
+package org.apache.pdfbox.preflight.font.util;
 
 public class GlyphException extends Exception {
 	private String errorCode;

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PDFAType3StreamParser.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/PDFAType3StreamParser.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PDFAType3StreamParser.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PDFAType3StreamParser.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/PDFAType3StreamParser.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/PDFAType3StreamParser.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PDFAType3StreamParser.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font;
+package org.apache.pdfbox.preflight.font.util;
 
 import java.awt.Image;
 import java.io.IOException;

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PeekInputStream.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/PeekInputStream.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PeekInputStream.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PeekInputStream.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/PeekInputStream.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/PeekInputStream.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/PeekInputStream.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font.type1;
+package org.apache.pdfbox.preflight.font.util;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/Type1.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/Type1.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/Type1.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font.type1;
+package org.apache.pdfbox.preflight.font.util;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 
-import org.apache.pdfbox.preflight.font.GlyphException;
 import org.apache.pdfbox.encoding.Encoding;
 import org.apache.pdfbox.preflight.PreflightConstants;
 

Copied: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java (from r1355309, pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/Type1Parser.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java?p2=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java&p1=pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/Type1Parser.java&r1=1355309&r2=1361579&rev=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/type1/Type1Parser.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java Sat Jul 14 19:53:48 2012
@@ -19,7 +19,7 @@
  * 
  ****************************************************************************/
 
-package org.apache.pdfbox.preflight.font.type1;
+package org.apache.pdfbox.preflight.font.util;
 
 import static org.apache.pdfbox.preflight.PreflightConstants.FONT_DICTIONARY_VALUE_ENCODING_MAC;
 import static org.apache.pdfbox.preflight.PreflightConstants.FONT_DICTIONARY_VALUE_ENCODING_MAC_EXP;

Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java?rev=1361579&r1=1361578&r2=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java Sat Jul 14 19:53:48 2012
@@ -35,11 +35,12 @@ import org.apache.pdfbox.pdmodel.font.PD
 import org.apache.pdfbox.preflight.PreflightContext;
 import org.apache.pdfbox.preflight.PreflightPath;
 import org.apache.pdfbox.preflight.exception.ValidationException;
-import org.apache.pdfbox.preflight.font.CompositeFontValidator;
 import org.apache.pdfbox.preflight.font.FontValidator;
 import org.apache.pdfbox.preflight.font.TrueTypeFontValidator;
+import org.apache.pdfbox.preflight.font.Type0FontValidator;
 import org.apache.pdfbox.preflight.font.Type1FontValidator;
 import org.apache.pdfbox.preflight.font.Type3FontValidator;
+import org.apache.pdfbox.preflight.font.container.FontContainer;
 import org.apache.pdfbox.preflight.process.AbstractProcess;
 
 public class FontValidationProcess extends AbstractProcess {
@@ -47,12 +48,15 @@ public class FontValidationProcess exten
 	public void validate(PreflightContext context)	throws ValidationException {
 		PreflightPath vPath = context.getValidationPath();
 		if (vPath.isEmpty() || !vPath.isExpectedType(PDFont.class)) {
-		 throw new ValidationException("Font validation process needs at least one PDFont object");
+			throw new ValidationException("Font validation process needs at least one PDFont object");
 		}
 
 		PDFont font = (PDFont)vPath.peek();
-		FontValidator validator = getFontValidator(context, font);
-		validator.validate();
+		FontContainer fontContainer = context.getFontContainer(font.getCOSObject());
+		if (fontContainer == null) { // if fontContainer isn't null the font is already checked
+			FontValidator<? extends FontContainer> validator = getFontValidator(context, font);
+			validator.validate();
+		}
 	}
 
 	/**
@@ -60,7 +64,7 @@ public class FontValidationProcess exten
 	 * @param font
 	 * @return
 	 */
-	protected FontValidator getFontValidator(PreflightContext context, PDFont font)
+	protected FontValidator<? extends FontContainer> getFontValidator(PreflightContext context, PDFont font)
 			throws ValidationException {
 		String subtype = font.getSubType();
 		if (FONT_DICTIONARY_VALUE_TRUETYPE.equals(subtype)) {
@@ -71,7 +75,7 @@ public class FontValidationProcess exten
 		} else if (FONT_DICTIONARY_VALUE_TYPE3.equals(subtype)) {
 			return new Type3FontValidator(context, font);
 		} else if (FONT_DICTIONARY_VALUE_COMPOSITE.equals(subtype)) {
-			return new CompositeFontValidator(context, font);
+			return new Type0FontValidator(context, font);
 		} else if (FONT_DICTIONARY_VALUE_TYPE2.equals(subtype)
 				|| FONT_DICTIONARY_VALUE_TYPE1C.equals(subtype)
 				|| FONT_DICTIONARY_VALUE_TYPE0C.equals(subtype)

Modified: pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestInvalidDirectory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestInvalidDirectory.java?rev=1361579&r1=1361578&r2=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestInvalidDirectory.java (original)
+++ pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestInvalidDirectory.java Sat Jul 14 19:53:48 2012
@@ -38,55 +38,56 @@ import org.junit.runners.Parameterized.P
 
 @RunWith(Parameterized.class)
 public class TestInvalidDirectory {
-  
-  
-  protected static File directory;
-    
-  protected File target = null;
-  
-  
-  public TestInvalidDirectory (File file) {
-    this.target = file;
-  }
-  
-  @Test
-  public void validate () throws Exception {
-  		PreflightParser parser = new PreflightParser(new FileDataSource(target));
-  		parser.parse();
-  		PreflightDocument document = (PreflightDocument) parser.getPDDocument();
-  		document.validate();
-  		Assert.assertFalse(document.getResult().isValid());
-  		document.close();
-  }
-  
-  @Parameters
-  public static Collection<Object[]> initializeParameters() throws Exception {
-    // check directory
-    File directory = null;
-    String pdfPath = System.getProperty("pdfa.invalid", null);
-    if ("${user.pdfa.invalid}".equals(pdfPath)) {pdfPath=null;}
-    if (pdfPath!=null) {
-      directory = new File(pdfPath);
-      if (!directory.exists()) throw new Exception ("directory does not exists : "+directory.getAbsolutePath());
-      if (!directory.isDirectory()) throw new Exception ("not a directory : "+directory.getAbsolutePath());
-    } else {
-      System.err.println("System property 'pdfa.invalid' not defined, will not run TestValidaDirectory");
-    }
-    // create list
-    if (directory==null) {
-      return new ArrayList<Object[]>(0);
-    } else {
-      File [] files = directory.listFiles();
-      List<Object[]> data = new ArrayList<Object[]>(files.length);
-      for (File file : files) {
-        if (file.isFile()) {
-          data.add(new Object [] {file});
-        }
-      }
-      return data;
-    }
-  }
-  
-  
-  
+
+
+	protected static File directory;
+
+	protected File target = null;
+
+
+	public TestInvalidDirectory (File file) {
+		this.target = file;
+	}
+
+	@Test
+	public void validate () throws Exception {
+		System.out.println(target);
+		PreflightParser parser = new PreflightParser(new FileDataSource(target));
+		parser.parse();
+		PreflightDocument document = (PreflightDocument) parser.getPDDocument();
+		document.validate();
+		Assert.assertFalse(document.getResult().isValid());
+		document.close();
+	}
+
+	@Parameters
+	public static Collection<Object[]> initializeParameters() throws Exception {
+		// check directory
+		File directory = null;
+		String pdfPath = System.getProperty("pdfa.invalid", null);
+		if ("${user.pdfa.invalid}".equals(pdfPath)) {pdfPath=null;}
+		if (pdfPath!=null) {
+			directory = new File(pdfPath);
+			if (!directory.exists()) throw new Exception ("directory does not exists : "+directory.getAbsolutePath());
+			if (!directory.isDirectory()) throw new Exception ("not a directory : "+directory.getAbsolutePath());
+		} else {
+			System.err.println("System property 'pdfa.invalid' not defined, will not run TestValidaDirectory");
+		}
+		// create list
+		if (directory==null) {
+			return new ArrayList<Object[]>(0);
+		} else {
+			File [] files = directory.listFiles();
+			List<Object[]> data = new ArrayList<Object[]>(files.length);
+			for (File file : files) {
+				if (file.isFile()) {
+					data.add(new Object [] {file});
+				}
+			}
+			return data;
+		}
+	}
+
+
+
 }

Modified: pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestValidDirectory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestValidDirectory.java?rev=1361579&r1=1361578&r2=1361579&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestValidDirectory.java (original)
+++ pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestValidDirectory.java Sat Jul 14 19:53:48 2012
@@ -30,11 +30,8 @@ import javax.activation.FileDataSource;
 
 import junit.framework.Assert;
 
-import org.apache.padaf.preflight.PdfAValidator;
-import org.apache.padaf.preflight.PdfAValidatorFactory;
 import org.apache.padaf.preflight.ValidationResult;
 import org.apache.pdfbox.preflight.parser.PreflightParser;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;