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 2017/07/16 11:19:49 UTC
svn commit: r1802044 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font:
PDTrueTypeFont.java PDType0Font.java
Author: lehmi
Date: Sun Jul 16 11:19:49 2017
New Revision: 1802044
URL: http://svn.apache.org/viewvc?rev=1802044&view=rev
Log:
PDFBOX-3826: close the ttf if the underlying resource is no longer needed, added another load method using a TrueTypeFont as input
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
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=1802044&r1=1802043&r2=1802044&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 Sun Jul 16 11:19:49 2017
@@ -138,7 +138,8 @@ public class PDTrueTypeFont extends PDSi
/**
* Creates a new TrueType font for embedding.
*/
- private PDTrueTypeFont(PDDocument document, TrueTypeFont ttf, Encoding encoding)
+ private PDTrueTypeFont(PDDocument document, TrueTypeFont ttf, Encoding encoding,
+ boolean closeTTF)
throws IOException
{
PDTrueTypeFontEmbedder embedder = new PDTrueTypeFontEmbedder(document, dict, ttf,
@@ -149,6 +150,11 @@ public class PDTrueTypeFont extends PDSi
isEmbedded = true;
isDamaged = false;
glyphList = GlyphList.getAdobeGlyphList();
+ if (closeTTF)
+ {
+ // the TTF is fully loaded and it is save to close the underlying data source
+ ttf.close();
+ }
}
/**
@@ -166,7 +172,7 @@ public class PDTrueTypeFont extends PDSi
public static PDTrueTypeFont load(PDDocument doc, File file, Encoding encoding)
throws IOException
{
- return new PDTrueTypeFont(doc, new TTFParser().parse(file), encoding);
+ return new PDTrueTypeFont(doc, new TTFParser().parse(file), encoding, true);
}
/**
@@ -184,7 +190,27 @@ public class PDTrueTypeFont extends PDSi
public static PDTrueTypeFont load(PDDocument doc, InputStream input, Encoding encoding)
throws IOException
{
- return new PDTrueTypeFont(doc, new TTFParser().parse(input), encoding);
+ return new PDTrueTypeFont(doc, new TTFParser().parse(input), encoding, true);
+ }
+
+ /**
+ * Loads a TTF to be embedded into a document as a simple font.
+ *
+ * <p>
+ * <b>Note:</b> Simple fonts only support 256 characters. For Unicode support, use
+ * {@link PDType0Font#load(PDDocument, InputStream)} instead.
+ * </p>
+ *
+ * @param doc The PDF document that will hold the embedded font.
+ * @param ttf A true type font
+ * @param encoding The PostScript encoding vector to be used for embedding.
+ * @return a PDTrueTypeFont instance.
+ * @throws IOException If there is an error loading the data.
+ */
+ public static PDTrueTypeFont load(PDDocument doc, TrueTypeFont ttf, Encoding encoding)
+ throws IOException
+ {
+ return new PDTrueTypeFont(doc, ttf, encoding, false);
}
/**
@@ -200,7 +226,7 @@ public class PDTrueTypeFont extends PDSi
@Deprecated
public static PDTrueTypeFont loadTTF(PDDocument doc, File file) throws IOException
{
- return new PDTrueTypeFont(doc, new TTFParser().parse(file), WinAnsiEncoding.INSTANCE);
+ return new PDTrueTypeFont(doc, new TTFParser().parse(file), WinAnsiEncoding.INSTANCE, true);
}
/**
@@ -216,7 +242,8 @@ public class PDTrueTypeFont extends PDSi
@Deprecated
public static PDTrueTypeFont loadTTF(PDDocument doc, InputStream input) throws IOException
{
- return new PDTrueTypeFont(doc, new TTFParser().parse(input), WinAnsiEncoding.INSTANCE);
+ return new PDTrueTypeFont(doc, new TTFParser().parse(input), WinAnsiEncoding.INSTANCE,
+ true);
}
/**
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java?rev=1802044&r1=1802043&r2=1802044&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java Sun Jul 16 11:19:49 2017
@@ -88,7 +88,15 @@ public class PDType0Font extends PDFont
fetchCMapUCS2();
if (closeOnSubset)
{
- this.ttf = ttf;
+ if (embedSubset)
+ {
+ this.ttf = ttf;
+ }
+ else
+ {
+ // the TTF is fully loaded and it is save to close the underlying data source
+ ttf.close();
+ }
}
}