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/09/06 19:58:46 UTC
svn commit: r1622898 - in /pdfbox/trunk:
fontbox/src/main/java/org/apache/fontbox/ttf/
fontbox/src/test/java/org/apache/fontbox/ttf/
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/
pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/ preflight/src...
Author: jahewson
Date: Sat Sep 6 17:58:46 2014
New Revision: 1622898
URL: http://svn.apache.org/r1622898
Log:
PDFBOX-2322: Added basic support for OpenType fonts
Added:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java
pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/CIDType2DescriptorHelper.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/TrueTypeDescriptorHelper.java
Added: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java?rev=1622898&view=auto
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java (added)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java Sat Sep 6 17:58:46 2014
@@ -0,0 +1,60 @@
+/*
+ * 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.fontbox.ttf;
+
+import java.io.IOException;
+import org.apache.fontbox.cff.CFFFont;
+import org.apache.fontbox.cff.CFFParser;
+
+/**
+ * PostScript font program (compact font format).
+ */
+public class CFFTable extends TTFTable
+{
+ /**
+ * A tag that identifies this table type.
+ */
+ public static final String TAG = "CFF ";
+
+ private CFFFont cffFont;
+
+ /**
+ * This will read the required data from the stream.
+ *
+ * @param ttf The font that is being read.
+ * @param data The stream to read the data from.
+ * @throws java.io.IOException If there is an error reading the data.
+ */
+ public void read(TrueTypeFont ttf, TTFDataStream data) throws IOException
+ {
+ byte[] bytes = data.read((int)getLength());
+
+ CFFParser parser = new CFFParser();
+ cffFont = parser.parse(bytes).get(0);
+
+ initialized = true;
+ }
+
+ /**
+ * Returns the CFF font, which is a compact representation of a PostScript Type 1, or CIDFont
+ */
+ public CFFFont getFont()
+ {
+ return cffFont;
+ }
+}
Added: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java?rev=1622898&view=auto
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java (added)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java Sat Sep 6 17:58:46 2014
@@ -0,0 +1,107 @@
+/*
+ * 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.fontbox.ttf;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * OpenType font file parser.
+ */
+public class OTFParser extends TTFParser
+{
+ /**
+ * Constructor.
+ */
+ public OTFParser()
+ {
+ super();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param isEmbedded true if the font is embedded in PDF
+ */
+ public OTFParser(boolean isEmbedded)
+ {
+ this(isEmbedded, false);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param isEmbedded true if the font is embedded in PDF
+ * @param parseOnDemand true if the tables of the font should be parsed on demand
+ */
+ public OTFParser(boolean isEmbedded, boolean parseOnDemand)
+ {
+ super(isEmbedded, parseOnDemand);
+ }
+
+ @Override
+ public OpenTypeFont parse(String file) throws IOException
+ {
+ return (OpenTypeFont)super.parse(file);
+ }
+
+ @Override
+ public OpenTypeFont parse(File file) throws IOException
+ {
+ return (OpenTypeFont)super.parse(file);
+ }
+
+ @Override
+ public OpenTypeFont parse(InputStream data) throws IOException
+ {
+ return (OpenTypeFont)super.parse(data);
+ }
+
+ @Override
+ public OpenTypeFont parse(TTFDataStream raf) throws IOException
+ {
+ return (OpenTypeFont)super.parse(raf);
+ }
+
+ @Override
+ protected OpenTypeFont newFont(TTFDataStream raf)
+ {
+ return new OpenTypeFont(raf);
+ }
+
+ @Override
+ protected TTFTable readTable(String tag)
+ {
+ // todo: this is a stub, a full implementation is needed
+
+ if (tag.equals("BASE") || tag.equals("GDEF") || tag.equals("GPOS") ||
+ tag.equals("GSUB") || tag.equals("JSTF"))
+ {
+ return new OTLTable();
+ }
+ else if (tag.equals("CFF "))
+ {
+ return new CFFTable();
+ }
+ else
+ {
+ return super.readTable(tag);
+ }
+ }
+}
Added: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java?rev=1622898&view=auto
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java (added)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTLTable.java Sat Sep 6 17:58:46 2014
@@ -0,0 +1,26 @@
+/*
+ * 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.fontbox.ttf;
+
+/**
+ * OpenType Layout (OTL) table. Uses the OpenType Layout Common Table Format.
+ */
+public class OTLTable extends TTFTable
+{
+ // todo: this is a stub, a full implementation is needed
+}
Added: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java?rev=1622898&view=auto
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java (added)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java Sat Sep 6 17:58:46 2014
@@ -0,0 +1,71 @@
+/*
+ * 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.fontbox.ttf;
+
+import java.io.IOException;
+
+/**
+ * An OpenType font.
+ */
+public class OpenTypeFont extends TrueTypeFont
+{
+ /**
+ * Constructor. Clients should use the OTFParser to create a new OpenTypeFont object.
+ *
+ * @param fontData The font data.
+ */
+ OpenTypeFont(TTFDataStream fontData)
+ {
+ super(fontData);
+ }
+
+ /**
+ * Get the "cmap" table for this TTF.
+ *
+ * @return The "cmap" table.
+ */
+ public synchronized CFFTable getCFF() throws IOException
+ {
+ CFFTable cmap = (CFFTable)tables.get(CFFTable.TAG);
+ if (cmap != null && !cmap.getInitialized())
+ {
+ readTable(cmap);
+ }
+ return cmap;
+ }
+
+ /**
+ * Returns true if this font is a PostScript outline font.
+ */
+ public boolean isPostScript()
+ {
+ return tables.containsKey(CFFTable.TAG);
+ }
+
+ /**
+ * Returns true if this font uses OpenType Layout (Advanced Typographic) tables.
+ */
+ public boolean hasLayoutTables()
+ {
+ return tables.containsKey("BASE") ||
+ tables.containsKey("GDEF") ||
+ tables.containsKey("GPOS") ||
+ tables.containsKey("GSUB") ||
+ tables.containsKey("JSTF");
+ }
+}
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java Sat Sep 6 17:58:46 2014
@@ -67,9 +67,9 @@ public class TTFParser
* @return A true type font.
* @throws IOException If there is an error parsing the true type font.
*/
- public TrueTypeFont parseTTF(String ttfFile) throws IOException
+ public TrueTypeFont parse(String ttfFile) throws IOException
{
- return parseTTF(new File(ttfFile));
+ return parse(new File(ttfFile));
}
/**
@@ -79,9 +79,9 @@ public class TTFParser
* @return A true type font.
* @throws IOException If there is an error parsing the true type font.
*/
- public TrueTypeFont parseTTF(File ttfFile) throws IOException
+ public TrueTypeFont parse(File ttfFile) throws IOException
{
- return parseTTF(new RAFDataStream(ttfFile, "r"));
+ return parse(new RAFDataStream(ttfFile, "r"));
}
/**
@@ -91,9 +91,9 @@ public class TTFParser
* @return A true type font.
* @throws IOException If there is an error parsing the true type font.
*/
- public TrueTypeFont parseTTF(InputStream ttfData) throws IOException
+ public TrueTypeFont parse(InputStream ttfData) throws IOException
{
- return parseTTF(new MemoryTTFDataStream(ttfData));
+ return parse(new MemoryTTFDataStream(ttfData));
}
/**
@@ -103,9 +103,9 @@ public class TTFParser
* @return A true type font.
* @throws IOException If there is an error parsing the true type font.
*/
- public TrueTypeFont parseTTF(TTFDataStream raf) throws IOException
+ public TrueTypeFont parse(TTFDataStream raf) throws IOException
{
- TrueTypeFont font = new TrueTypeFont(raf);
+ TrueTypeFont font = newFont(raf);
font.setVersion(raf.read32Fixed());
int numberOfTables = raf.readUnsignedShort();
int searchRange = raf.readUnsignedShort();
@@ -125,6 +125,11 @@ public class TTFParser
return font;
}
+ protected TrueTypeFont newFont(TTFDataStream raf)
+ {
+ return new TrueTypeFont(raf);
+ }
+
/**
* Parse all tables and check if all needed tables are present.
*
@@ -195,61 +200,66 @@ public class TTFParser
private TTFTable readTableDirectory(TTFDataStream raf) throws IOException
{
- TTFTable retval = null;
+ TTFTable table = null;
String tag = raf.readString(4);
if (tag.equals(CmapTable.TAG))
{
- retval = new CmapTable();
+ table = new CmapTable();
}
else if (tag.equals(GlyphTable.TAG))
{
- retval = new GlyphTable();
+ table = new GlyphTable();
}
else if (tag.equals(HeaderTable.TAG))
{
- retval = new HeaderTable();
+ table = new HeaderTable();
}
else if (tag.equals(HorizontalHeaderTable.TAG))
{
- retval = new HorizontalHeaderTable();
+ table = new HorizontalHeaderTable();
}
else if (tag.equals(HorizontalMetricsTable.TAG))
{
- retval = new HorizontalMetricsTable();
+ table = new HorizontalMetricsTable();
}
else if (tag.equals(IndexToLocationTable.TAG))
{
- retval = new IndexToLocationTable();
+ table = new IndexToLocationTable();
}
else if (tag.equals(MaximumProfileTable.TAG))
{
- retval = new MaximumProfileTable();
+ table = new MaximumProfileTable();
}
else if (tag.equals(NamingTable.TAG))
{
- retval = new NamingTable();
+ table = new NamingTable();
}
else if (tag.equals(OS2WindowsMetricsTable.TAG))
{
- retval = new OS2WindowsMetricsTable();
+ table = new OS2WindowsMetricsTable();
}
else if (tag.equals(PostScriptTable.TAG))
{
- retval = new PostScriptTable();
+ table = new PostScriptTable();
}
else if (tag.equals(DigitalSignatureTable.TAG))
{
- retval = new DigitalSignatureTable();
+ table = new DigitalSignatureTable();
}
else
{
- // unknown table type but read it anyway.
- retval = new TTFTable();
+ table = readTable(tag);
}
- retval.setTag(tag);
- retval.setCheckSum(raf.readUnsignedInt());
- retval.setOffset(raf.readUnsignedInt());
- retval.setLength(raf.readUnsignedInt());
- return retval;
+ table.setTag(tag);
+ table.setCheckSum(raf.readUnsignedInt());
+ table.setOffset(raf.readUnsignedInt());
+ table.setLength(raf.readUnsignedInt());
+ return table;
+ }
+
+ protected TTFTable readTable(String tag)
+ {
+ // unknown table type but read it anyway.
+ return new TTFTable();
}
}
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFTable.java Sat Sep 6 17:58:46 2014
@@ -23,7 +23,7 @@ import java.io.IOException;
*
* @author Ben Litchfield (ben@benlitchfield.com)
*/
-public class TTFTable
+public class TTFTable
{
private String tag;
private long checkSum;
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java Sat Sep 6 17:58:46 2014
@@ -38,7 +38,7 @@ public class TrueTypeFont implements Typ
private int numberOfGlyphs = -1;
private int unitsPerEm = -1;
private int[] advanceWidths = null;
- private Map<String,TTFTable> tables = new HashMap<String,TTFTable>();
+ protected Map<String,TTFTable> tables = new HashMap<String,TTFTable>();
private TTFDataStream data;
private Map<String, Integer> postScriptNames;
Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java Sat Sep 6 17:58:46 2014
@@ -45,7 +45,7 @@ public class TestTTFParser extends TestC
//Set the default to something not UTC and see if a UTC timeZone is returned
TimeZone.setDefault(TimeZone.getTimeZone("America/Los Angeles"));
TTFParser parser = new TTFParser();
- TrueTypeFont ttf = parser.parseTTF(testFile);
+ TrueTypeFont ttf = parser.parse(testFile);
Calendar created = ttf.getHeader().getCreated();
assertEquals(created.getTimeZone(), utc);
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java Sat Sep 6 17:58:46 2014
@@ -70,7 +70,7 @@ public final class ExternalFonts
throw new IOException("Error loading resource: " + ttfName);
}
TTFParser ttfParser = new TTFParser();
- ttfFallbackFont = ttfParser.parseTTF(ttfStream);
+ ttfFallbackFont = ttfParser.parse(ttfStream);
// cff
String cffName = "org/apache/pdfbox/resources/otf/AdobeBlank.otf";
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java Sat Sep 6 17:58:46 2014
@@ -105,7 +105,7 @@ final class FileSystemFontProvider imple
TrueTypeFont ttf = null;
try
{
- ttf = ttfParser.parseTTF(otfFile);
+ ttf = ttfParser.parse(otfFile);
}
catch (NullPointerException e) // TTF parser is buggy
{
@@ -204,7 +204,7 @@ final class FileSystemFontProvider imple
TTFParser ttfParser = new TTFParser(false, true);
try
{
- ttf = ttfParser.parseTTF(file);
+ ttf = ttfParser.parse(file);
ttfFonts.put(postScriptName, ttf);
if (LOG.isDebugEnabled())
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java Sat Sep 6 17:58:46 2014
@@ -24,6 +24,8 @@ import org.apache.commons.logging.LogFac
import org.apache.fontbox.cmap.CMap;
import org.apache.fontbox.ttf.CmapSubtable;
import org.apache.fontbox.ttf.CmapTable;
+import org.apache.fontbox.ttf.OTFParser;
+import org.apache.fontbox.ttf.OpenTypeFont;
import org.apache.fontbox.ttf.TTFParser;
import org.apache.fontbox.ttf.TrueTypeFont;
import org.apache.fontbox.util.BoundingBox;
@@ -63,16 +65,7 @@ public class PDCIDFontType2 extends PDCI
PDFontDescriptorDictionary fd = (PDFontDescriptorDictionary) getFontDescriptor();
PDStream ff2Stream = fd.getFontFile2();
-
- if (ff2Stream == null)
- {
- PDStream ff3Stream = fd.getFontFile3();
- if (ff3Stream != null)
- {
- LOG.info("fontfile3 not supported yet, subType is " +
- ff3Stream.getStream().getNameAsString(COSName.SUBTYPE));
- }
- }
+ PDStream ff3Stream = fd.getFontFile3();
if (ff2Stream != null)
{
@@ -80,7 +73,7 @@ public class PDCIDFontType2 extends PDCI
{
// embedded
TTFParser ttfParser = new TTFParser(true);
- ttf = ttfParser.parseTTF(ff2Stream.createInputStream());
+ ttf = ttfParser.parse(ff2Stream.createInputStream());
isEmbedded = true;
}
catch (NullPointerException e) // TTF parser is buggy
@@ -92,6 +85,38 @@ public class PDCIDFontType2 extends PDCI
throw new IOException("Could not read embedded TTF for font " + getBaseFont(), e);
}
}
+ else if (ff3Stream != null)
+ {
+ try
+ {
+ // embedded
+ OTFParser otfParser = new OTFParser(true);
+ OpenTypeFont otf = otfParser.parse(ff3Stream.createInputStream());
+ ttf = otf;
+ isEmbedded = true;
+
+ if (otf.isPostScript())
+ {
+ // todo: we need more abstraction to support CFF fonts here
+ throw new IOException("Not implemented: OpenType font with CFF table " +
+ getBaseFont());
+ }
+
+ if (otf.hasLayoutTables())
+ {
+ LOG.error("OpenType Layout tables used in font " + getBaseFont() +
+ " are not implemented in PDFBox and will be ignored");
+ }
+ }
+ catch (NullPointerException e) // TTF parser is buggy
+ {
+ throw new IOException("Could not read embedded OTF for font " + getBaseFont(), e);
+ }
+ catch (IOException e)
+ {
+ throw new IOException("Could not read embedded OTF for font " + getBaseFont(), e);
+ }
+ }
else
{
// substitute
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java Sat Sep 6 17:58:46 2014
@@ -105,7 +105,7 @@ public class PDTrueTypeFont extends PDSi
{
// embedded
TTFParser ttfParser = new TTFParser(true);
- ttfFont = ttfParser.parseTTF(ff2Stream.createInputStream());
+ ttfFont = ttfParser.parse(ff2Stream.createInputStream());
}
catch (NullPointerException e) // TTF parser is buggy
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java Sat Sep 6 17:58:46 2014
@@ -84,7 +84,7 @@ class PDTrueTypeFontEmbedder
try
{
stream2 = stream.createInputStream();
- ttf = new TTFParser().parseTTF(stream2);
+ ttf = new TTFParser().parse(stream2);
fd = createFontDescriptor(dict, ttf);
}
finally
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java Sat Sep 6 17:58:46 2014
@@ -50,7 +50,7 @@ public class TestTTFParser
TTFParser parser = new TTFParser();
- TrueTypeFont arial = parser.parseTTF(arialIs);
+ TrueTypeFont arial = parser.parse(arialIs);
CmapTable cmap = arial.getCmap();
Assert.assertNotNull(cmap);
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/CIDType2DescriptorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/CIDType2DescriptorHelper.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/CIDType2DescriptorHelper.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/CIDType2DescriptorHelper.java Sat Sep 6 17:58:46 2014
@@ -106,7 +106,7 @@ public class CIDType2DescriptorHelper ex
* 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 TTFParser(true).parseTTF(new ByteArrayInputStream(fontFile.getByteArray()));
+ ttf = new TTFParser(true).parse(new ByteArrayInputStream(fontFile.getByteArray()));
this.fContainer.setTtf(ttf);
}
catch (Exception e)
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/TrueTypeDescriptorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/TrueTypeDescriptorHelper.java?rev=1622898&r1=1622897&r2=1622898&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/TrueTypeDescriptorHelper.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/TrueTypeDescriptorHelper.java Sat Sep 6 17:58:46 2014
@@ -81,7 +81,7 @@ public class TrueTypeDescriptorHelper ex
{
bis = new ByteArrayInputStream(fontFile.getByteArray());
- TrueTypeFont ttf = new TTFParser(true).parseTTF(bis);
+ TrueTypeFont ttf = new TTFParser(true).parse(bis);
if (fontDescriptor.isSymbolic() && ttf.getCmap().getCmaps().length != 1)
{