You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/08/23 04:36:06 UTC
svn commit: r1619957 - in
/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight:
content/ font/ font/container/ font/descriptor/ font/util/ process/reflect/
Author: jahewson
Date: Sat Aug 23 02:36:05 2014
New Revision: 1619957
URL: http://svn.apache.org/r1619957
Log:
PDFBOX-2262/PDFBOX-2149: Refactor CMaps and Encodings (Preflight)
These changes allow preflight to work with the changes from the commit 1619956
Added:
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontLike.java
Modified:
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType0FontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType2FontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/DescendantFontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/SimpleFontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/TrueTypeFontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type0FontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type1FontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType0Container.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType2Container.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/FontContainer.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/TrueTypeContainer.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type1Container.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java
pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java Sat Aug 23 02:36:05 2014
@@ -26,7 +26,9 @@ import static org.apache.pdfbox.prefligh
import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_SYNTAX_CONTENT_STREAM_INVALID_ARGUMENT;
import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_SYNTAX_CONTENT_STREAM_UNSUPPORTED_OP;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
import org.apache.pdfbox.cos.COSArray;
@@ -344,23 +346,13 @@ public class PreflightContentStream exte
return;
}
- int codeLength = 1;
- for (int i = 0; i < string.length; i += codeLength)
+ InputStream in = new ByteArrayInputStream(string);
+ while (in.available() > 0)
{
- // explore the string to detect character code (length can be 1 or 2 bytes)
- int cid = -1;
- codeLength = 1;
try
{
- // according to the encoding, extract the character identifier
- cid = font.encodeToCID(string, i, codeLength);
- if (cid == -1 && i + 1 < string.length)
- {
- // maybe a multibyte encoding
- codeLength++;
- cid = font.encodeToCID(string, i, codeLength);
- }
- fontContainer.checkGlyphWidth(cid);
+ int code = font.readCode(in);
+ fontContainer.checkGlyphWidth(code);
}
catch (IOException e)
{
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType0FontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType0FontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType0FontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType0FontValidator.java Sat Aug 23 02:36:05 2014
@@ -22,7 +22,7 @@
package org.apache.pdfbox.preflight.font;
import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDCIDFontType0;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.font.container.CIDType0Container;
import org.apache.pdfbox.preflight.font.descriptor.CIDType0DescriptorHelper;
@@ -30,7 +30,7 @@ import org.apache.pdfbox.preflight.font.
public class CIDType0FontValidator extends DescendantFontValidator<CIDType0Container>
{
- public CIDType0FontValidator(PreflightContext context, PDFont font)
+ public CIDType0FontValidator(PreflightContext context, PDCIDFontType0 font)
{
super(context, font, new CIDType0Container(font));
}
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType2FontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType2FontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType2FontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/CIDType2FontValidator.java Sat Aug 23 02:36:05 2014
@@ -22,7 +22,7 @@
package org.apache.pdfbox.preflight.font;
import org.apache.pdfbox.cos.COSBase;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDCIDFontType2;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.font.container.CIDType2Container;
import org.apache.pdfbox.preflight.font.descriptor.CIDType2DescriptorHelper;
@@ -31,7 +31,7 @@ import org.apache.pdfbox.preflight.font.
public class CIDType2FontValidator extends DescendantFontValidator<CIDType2Container>
{
- public CIDType2FontValidator(PreflightContext context, PDFont font)
+ public CIDType2FontValidator(PreflightContext context, PDCIDFontType2 font)
{
super(context, font, new CIDType2Container(font));
}
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/DescendantFontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/DescendantFontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/DescendantFontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/DescendantFontValidator.java Sat Aug 23 02:36:05 2014
@@ -33,7 +33,7 @@ import org.apache.pdfbox.cos.COSDictiona
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSStream;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDCIDFont;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.font.container.FontContainer;
@@ -42,20 +42,17 @@ import org.apache.pdfbox.preflight.utils
public abstract class DescendantFontValidator<T extends FontContainer> extends SimpleFontValidator<T>
{
-
protected COSDocument cosDocument = null;
- public DescendantFontValidator(PreflightContext context, PDFont font, T fContainer)
+ public DescendantFontValidator(PreflightContext context, PDCIDFont font, T fContainer)
{
- super(context, font, fContainer);
+ super(context, font.getCOSObject(), fContainer);
cosDocument = context.getDocument().getDocument();
}
@Override
protected void checkMandatoryField()
{
- COSDictionary fontDictionary = (COSDictionary) font.getCOSObject();
-
boolean arePresent = fontDictionary.containsKey(COSName.TYPE);
arePresent &= fontDictionary.containsKey(COSName.SUBTYPE);
arePresent &= fontDictionary.containsKey(COSName.BASE_FONT);
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/FontValidator.java Sat Aug 23 02:36:05 2014
@@ -21,7 +21,7 @@
package org.apache.pdfbox.preflight.font;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.exception.ValidationException;
import org.apache.pdfbox.preflight.font.container.FontContainer;
@@ -29,21 +29,18 @@ import org.apache.pdfbox.preflight.font.
public abstract class FontValidator<T extends FontContainer>
{
-
protected T fontContainer;
protected PreflightContext context;
- protected PDFont font;
protected FontDescriptorHelper<T> descriptorHelper;
private static final String SUB_SET_PATTERN = "^[A-Z]{6}\\+.*";
- public FontValidator(PreflightContext context, PDFont font, T fContainer)
+ public FontValidator(PreflightContext context, COSDictionary dict, T fContainer)
{
super();
this.context = context;
- this.font = font;
this.fontContainer = fContainer;
- this.context.addFontContainer(font.getCOSObject(), fContainer);
+ this.context.addFontContainer(dict, fContainer);
}
public static boolean isSubSet(String fontName)
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/SimpleFontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/SimpleFontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/SimpleFontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/SimpleFontValidator.java Sat Aug 23 02:36:05 2014
@@ -25,7 +25,7 @@ import static org.apache.pdfbox.prefligh
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDSimpleFont;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.exception.ValidationException;
@@ -33,10 +33,19 @@ import org.apache.pdfbox.preflight.font.
public abstract class SimpleFontValidator<T extends FontContainer> extends FontValidator<T>
{
+ protected PDSimpleFont font;
+ protected COSDictionary fontDictionary;
- public SimpleFontValidator(PreflightContext context, PDFont font, T fContainer)
+ public SimpleFontValidator(PreflightContext context, PDSimpleFont font, T fContainer)
{
- super(context, font, fContainer);
+ super(context, font.getCOSObject(), fContainer);
+ this.fontDictionary = font.getCOSObject();
+ }
+
+ public SimpleFontValidator(PreflightContext context, COSDictionary fontDictionary, T fContainer)
+ {
+ super(context, fontDictionary, fContainer);
+ this.fontDictionary = fontDictionary;
}
/**
@@ -60,7 +69,6 @@ public abstract class SimpleFontValidato
protected void checkMandatoryField()
{
- COSDictionary fontDictionary = (COSDictionary) font.getCOSObject();
boolean areFieldsPResent = fontDictionary.containsKey(COSName.TYPE);
areFieldsPResent &= fontDictionary.containsKey(COSName.SUBTYPE);
areFieldsPResent &= fontDictionary.containsKey(COSName.BASE_FONT);
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/TrueTypeFontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/TrueTypeFontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/TrueTypeFontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/TrueTypeFontValidator.java Sat Aug 23 02:36:05 2014
@@ -28,8 +28,8 @@ import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.encoding.Encoding;
import org.apache.pdfbox.encoding.MacRomanEncoding;
import org.apache.pdfbox.encoding.WinAnsiEncoding;
-import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDFontDescriptor;
+import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.font.container.TrueTypeContainer;
@@ -37,8 +37,7 @@ import org.apache.pdfbox.preflight.font.
public class TrueTypeFontValidator extends SimpleFontValidator<TrueTypeContainer>
{
-
- public TrueTypeFontValidator(PreflightContext context, PDFont font)
+ public TrueTypeFontValidator(PreflightContext context, PDTrueTypeFont font)
{
super(context, font, new TrueTypeContainer(font));
}
@@ -58,7 +57,7 @@ public class TrueTypeFontValidator exten
*/
if (fd.isNonSymbolic())
{
- Encoding encodingValue = this.font.getFontEncoding();
+ Encoding encodingValue = this.font.getEncoding();
if (encodingValue == null
|| !(encodingValue instanceof MacRomanEncoding || encodingValue instanceof WinAnsiEncoding))
{
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type0FontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type0FontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type0FontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type0FontValidator.java Sat Aug 23 02:36:05 2014
@@ -60,12 +60,12 @@ import org.apache.pdfbox.preflight.utils
public class Type0FontValidator extends FontValidator<Type0Container>
{
-
+ protected PDFont font;
protected COSDocument cosDocument = null;
public Type0FontValidator(PreflightContext context, PDFont font)
{
- super(context, font, new Type0Container(font));
+ super(context, font.getCOSObject(), new Type0Container(font));
cosDocument = this.context.getDocument().getDocument();
}
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type1FontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type1FontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type1FontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type1FontValidator.java Sat Aug 23 02:36:05 2014
@@ -32,7 +32,7 @@ import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDSimpleFont;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.font.container.Type1Container;
@@ -42,7 +42,7 @@ import org.apache.pdfbox.preflight.utils
public class Type1FontValidator extends SimpleFontValidator<Type1Container>
{
- public Type1FontValidator(PreflightContext context, PDFont font)
+ public Type1FontValidator(PreflightContext context, PDSimpleFont font)
{
super(context, font, new Type1Container(font));
}
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/Type3FontValidator.java Sat Aug 23 02:36:05 2014
@@ -28,6 +28,7 @@ import static org.apache.pdfbox.prefligh
import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_TYPE3_DAMAGED;
import java.io.IOException;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -41,9 +42,11 @@ import org.apache.pdfbox.encoding.Dictio
import org.apache.pdfbox.encoding.Encoding;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
+import org.apache.pdfbox.pdmodel.common.COSArrayList;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDFontFactory;
+import org.apache.pdfbox.pdmodel.font.PDType3Font;
import org.apache.pdfbox.preflight.PreflightConstants;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.PreflightPath;
@@ -59,15 +62,17 @@ import org.apache.pdfbox.preflight.utils
public class Type3FontValidator extends FontValidator<Type3Container>
{
+ protected PDFont font;
protected COSDictionary fontDictionary;
protected COSDocument cosDocument;
protected Encoding encoding;
- public Type3FontValidator(PreflightContext context, PDFont font)
+ public Type3FontValidator(PreflightContext context, PDType3Font font)
{
- super(context, font, new Type3Container(font));
+ super(context, font.getCOSObject(), new Type3Container(font));
this.cosDocument = context.getDocument().getDocument();
- this.fontDictionary = (COSDictionary) font.getCOSObject();
+ this.fontDictionary = font.getCOSObject();
+ this.font = font;
}
public void validate() throws ValidationException
@@ -224,22 +229,13 @@ public class Type3FontValidator extends
{
// Encoding is a Name, check if it is an Existing Encoding
String enc = COSUtils.getAsString(fontEncoding, cosDocument);
- try
- {
- this.encoding = Encoding.getInstance(COSName.getPDFName(enc));
- }
- catch (IOException e)
- {
- // the encoding doesn't exist
- this.fontContainer.push(new ValidationError(ERROR_FONTS_ENCODING));
- return;
- }
+ this.encoding = Encoding.getInstance(COSName.getPDFName(enc));
}
/**
* This method is called by the CheckEncoding method if the Encoding entry is an instance of COSDictionary. In this
* case, a new instance of {@link DictionaryEncoding} is created. If an IOException is thrown by the
- * DictionaryEncoding constructor the {@link PreflightConstants.ERROR_FONTS_ENCODING} is pushed in the
+ * DictionaryEncoding constructor the ERROR_FONTS_ENCODING is pushed in the
* FontContainer.
*
* Differences entry validation is implicitly done by the DictionaryEncoding constructor.
@@ -249,16 +245,7 @@ public class Type3FontValidator extends
private void checkEncodingAsDictionary(COSBase fontEncoding)
{
COSDictionary encodingDictionary = COSUtils.getAsDictionary(fontEncoding, cosDocument);
- try
- {
- this.encoding = new DictionaryEncoding(encodingDictionary);
- }
- catch (IOException e)
- {
- // the encoding doesn't exist
- this.fontContainer.push(new ValidationError(ERROR_FONTS_ENCODING));
- return;
- }
+ this.encoding = new DictionaryEncoding(encodingDictionary);
}
/**
@@ -269,13 +256,10 @@ public class Type3FontValidator extends
* the CharProcs doesn't know the Character, it is mapped with the .notdef one.
*
* For each character, the Glyph width must be the same as the Width value declared in the Widths array.
- *
- * @param errors
- * @return
*/
private void checkCharProcsAndMetrics() throws ValidationException
{
- List<Integer> widths = font.getWidths();
+ List<Integer> widths = getWidths(font);
if (widths == null || widths.isEmpty())
{
this.fontContainer.push(new ValidationError(ERROR_FONTS_DICTIONARY_INVALID,
@@ -291,8 +275,8 @@ public class Type3FontValidator extends
return;
}
- int fc = this.font.getFirstChar();
- int lc = this.font.getLastChar();
+ int fc = font.getCOSObject().getInt(COSName.FIRST_CHAR, -1);
+ int lc = font.getCOSObject().getInt(COSName.LAST_CHAR, -1);
/*
* wArr length = (lc - fc) + 1 and it is an array of int.
@@ -353,6 +337,21 @@ public class Type3FontValidator extends
}
}
+ public List<Integer> getWidths(PDFont font)
+ {
+ List<Integer> widths;
+ COSArray array = (COSArray) font.getCOSObject().getDictionaryObject(COSName.WIDTHS);
+ if (array != null)
+ {
+ widths = COSArrayList.convertIntegerCOSArrayToList(array);
+ }
+ else
+ {
+ widths = Collections.emptyList();
+ }
+ return widths;
+ }
+
private PDResources getPDResources()
{
COSBase res = this.fontDictionary.getItem(COSName.RESOURCES);
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType0Container.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType0Container.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType0Container.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType0Container.java Sat Aug 23 02:36:05 2014
@@ -27,15 +27,16 @@ import java.util.List;
import org.apache.fontbox.cff.CFFCIDFont;
import org.apache.fontbox.cff.CFFFont;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDCIDFontType0;
+import org.apache.pdfbox.preflight.font.util.FontLike;
public class CIDType0Container extends FontContainer
{
protected List<CFFFont> lCFonts = new ArrayList<CFFFont>();
- public CIDType0Container(PDFont font)
+ public CIDType0Container(PDCIDFontType0 font)
{
- super(font);
+ super(new FontLike(font));
}
@Override
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType2Container.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType2Container.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType2Container.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/CIDType2Container.java Sat Aug 23 02:36:05 2014
@@ -22,23 +22,22 @@
package org.apache.pdfbox.preflight.font.container;
import org.apache.fontbox.ttf.TrueTypeFont;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDCIDFontType2;
import org.apache.pdfbox.preflight.PreflightConstants;
import org.apache.pdfbox.preflight.font.util.CIDToGIDMap;
+import org.apache.pdfbox.preflight.font.util.FontLike;
import org.apache.pdfbox.preflight.font.util.GlyphException;
import java.io.IOException;
public class CIDType2Container extends FontContainer
{
-
protected CIDToGIDMap cidToGid = null;
-
protected TrueTypeFont ttf = null;
- public CIDType2Container(PDFont font)
+ public CIDType2Container(PDCIDFontType2 font)
{
- super(font);
+ super(new FontLike(font));
}
@Override
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/FontContainer.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/FontContainer.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/FontContainer.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/FontContainer.java Sat Aug 23 02:36:05 2014
@@ -30,6 +30,7 @@ import java.util.Map;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.preflight.PreflightConstants;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
+import org.apache.pdfbox.preflight.font.util.FontLike;
import org.apache.pdfbox.preflight.font.util.GlyphDetail;
import org.apache.pdfbox.preflight.font.util.GlyphException;
@@ -52,11 +53,15 @@ public abstract class FontContainer
protected boolean errorsAleadyMerged = false;
- protected PDFont font;
+ protected FontLike font;
public FontContainer(PDFont font)
{
- super();
+ this.font = new FontLike(font);
+ }
+
+ public FontContainer(FontLike font)
+ {
this.font = font;
}
@@ -102,7 +107,7 @@ public abstract class FontContainer
/**
*
- * @param cid
+ * @param cid todo: not a CID, this is actually a char code!
* @throws GlyphException
*/
public void checkGlyphWidth(int cid) throws GlyphException
@@ -113,7 +118,7 @@ public abstract class FontContainer
}
try
{
- final float expectedWidth = this.font.getFontWidth(cid);
+ final float expectedWidth = this.font.getWidth(cid);
final float foundWidth = getFontProgramWidth(cid);
checkWidthsConsistency(cid, expectedWidth, foundWidth);
}
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/TrueTypeContainer.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/TrueTypeContainer.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/TrueTypeContainer.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/TrueTypeContainer.java Sat Aug 23 02:36:05 2014
@@ -29,20 +29,20 @@ import org.apache.fontbox.ttf.CMAPEncodi
import org.apache.fontbox.ttf.CMAPTable;
import org.apache.fontbox.ttf.TrueTypeFont;
import org.apache.pdfbox.encoding.Encoding;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.preflight.PreflightConstants;
import org.apache.pdfbox.preflight.font.util.GlyphException;
public class TrueTypeContainer extends FontContainer
{
-
protected TrueTypeFont ttFont;
-
private CMAPEncodingEntry[] cmapEncodingEntries = null;
+ private PDTrueTypeFont trueTypeFont;
- public TrueTypeContainer(PDFont font)
+ public TrueTypeContainer(PDTrueTypeFont font)
{
super(font);
+ this.trueTypeFont = font;
}
public void setTrueTypeFont(TrueTypeFont ttFont)
@@ -70,7 +70,7 @@ public class TrueTypeContainer extends F
try
{
CMAPTable cmap = this.ttFont.getCMAP();
- if (this.font.getFontDescriptor().isSymbolic())
+ if (this.trueTypeFont.getFontDescriptor().isSymbolic())
{
this.cmapEncodingEntries = cmap.getCmaps();
}
@@ -160,7 +160,7 @@ public class TrueTypeContainer extends F
int innerFontCid = cid;
if (cmap.getPlatformEncodingId() == 1 && cmap.getPlatformId() == 3)
{
- Encoding fontEncoding = this.font.getFontEncoding();
+ Encoding fontEncoding = this.trueTypeFont.getEncoding();
String character = fontEncoding.getCharacter(cid);
if (character == null)
{
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type1Container.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type1Container.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type1Container.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/container/Type1Container.java Sat Aug 23 02:36:05 2014
@@ -26,7 +26,7 @@ import java.util.List;
import org.apache.fontbox.cff.CFFFont;
import org.apache.fontbox.cff.CFFType1Font;
-import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDSimpleFont;
import org.apache.pdfbox.preflight.PreflightConstants;
import org.apache.pdfbox.preflight.font.util.GlyphException;
import org.apache.pdfbox.preflight.font.util.Type1;
@@ -47,9 +47,12 @@ public class Type1Container extends Font
protected Type1 type1Font;
protected List<CFFFont> lCFonts;
- public Type1Container(PDFont font)
+ private PDSimpleFont simpleFont;
+
+ public Type1Container(PDSimpleFont font)
{
super(font);
+ this.simpleFont = font;
}
@Override
@@ -72,7 +75,7 @@ public class Type1Container extends Font
else
{
// assuming that "cid" is actually the character code
- String name = this.font.getFontEncoding().getName(cid);
+ String name = simpleFont.getEncoding().getName(cid);
if (name.equals(".notdef"))
{
throw new GlyphException(PreflightConstants.ERROR_FONTS_GLYPH_MISSING, cid, "Unknown character CID(" + cid+")");
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java Sat Aug 23 02:36:05 2014
@@ -44,6 +44,7 @@ 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.pdmodel.font.PDSimpleFont;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.exception.ValidationException;
@@ -151,7 +152,7 @@ public class Type1DescriptorHelper exten
int length2 = streamObj.getInt(COSName.LENGTH2);
bis = new ByteArrayInputStream(fontFile.getByteArray());
Type1Parser parserForMetrics = Type1Parser.createParserWithEncodingObject(bis, length1, length2,
- font.getFontEncoding());
+ ((PDSimpleFont) font).getEncoding());
Type1 parsedData = parserForMetrics.parse();
this.fContainer.setType1Font(parsedData);
@@ -173,8 +174,7 @@ public class Type1DescriptorHelper exten
/**
* Type1C is a CFF font format, extract all CFFFont object from the stream
- *
- * @param fontStream
+ *
* @return
* @throws ValidationException
*/
Added: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontLike.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontLike.java?rev=1619957&view=auto
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontLike.java (added)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontLike.java Sat Aug 23 02:36:05 2014
@@ -0,0 +1,88 @@
+/*****************************************************************************
+ *
+ * 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.util;
+
+import org.apache.pdfbox.pdmodel.font.PDCIDFont;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+
+import java.io.IOException;
+
+/**
+ * Wrapper over font-like objects.
+ */
+public class FontLike
+{
+ private PDFont font;
+ private PDCIDFont cidFont;
+
+ /**
+ * Constructor.
+ *
+ * @param font A font.
+ */
+ public FontLike(PDFont font)
+ {
+ this.font = font;
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cidFont A CIDFont, this is not actually a font.
+ */
+ public FontLike(PDCIDFont cidFont)
+ {
+ this.cidFont = cidFont;
+ }
+
+ /**
+ * The PostScript name of the font.
+ */
+ public String getBaseFont()
+ {
+ if (font != null)
+ {
+ return font.getBaseFont();
+ }
+ else
+ {
+ return cidFont.getBaseFont();
+ }
+ }
+
+ /**
+ * Returns the width of the given character.
+ *
+ * @param code character code
+ */
+ public float getWidth(int code) throws IOException
+ {
+ if (font != null)
+ {
+ return font.getWidth(code);
+ }
+ else
+ {
+ return cidFont.getWidth(code);
+ }
+ }
+}
Modified: pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java?rev=1619957&r1=1619956&r2=1619957&view=diff
==============================================================================
--- pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java (original)
+++ pdfbox/branches/no-awt/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/FontValidationProcess.java Sat Aug 23 02:36:05 2014
@@ -32,6 +32,9 @@ import static org.apache.pdfbox.prefligh
import static org.apache.pdfbox.preflight.PreflightConstants.FONT_DICTIONARY_VALUE_TYPE3;
import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDSimpleFont;
+import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
+import org.apache.pdfbox.pdmodel.font.PDType3Font;
import org.apache.pdfbox.preflight.PreflightConstants;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.PreflightPath;
@@ -82,15 +85,15 @@ public class FontValidationProcess exten
String subtype = font.getSubType();
if (FONT_DICTIONARY_VALUE_TRUETYPE.equals(subtype))
{
- return new TrueTypeFontValidator(context, font);
+ return new TrueTypeFontValidator(context, (PDTrueTypeFont)font);
}
else if (FONT_DICTIONARY_VALUE_MMTYPE.equals(subtype) || FONT_DICTIONARY_VALUE_TYPE1.equals(subtype))
{
- return new Type1FontValidator(context, font);
+ return new Type1FontValidator(context, (PDSimpleFont)font);
}
else if (FONT_DICTIONARY_VALUE_TYPE3.equals(subtype))
{
- return new Type3FontValidator(context, font);
+ return new Type3FontValidator(context, (PDType3Font)font);
}
else if (FONT_DICTIONARY_VALUE_COMPOSITE.equals(subtype))
{