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/12/14 03:45:41 UTC
svn commit: r1645377 - in /pdfbox/trunk:
fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java
Author: jahewson
Date: Sun Dec 14 02:45:40 2014
New Revision: 1645377
URL: http://svn.apache.org/r1645377
Log:
PDFBOX-2524: Check whether embedding is permitted, thanks to Keiji Suzuki
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java?rev=1645377&r1=1645376&r2=1645377&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java Sun Dec 14 02:45:40 2014
@@ -147,6 +147,37 @@ public class OS2WindowsMetricsTable exte
public static final int FAMILY_CLASS_SYMBOLIC = 12;
/**
+ * Restricted License embedding: must not be modified, embedded or exchanged in any manner.
+ *
+ * <p>For Restricted License embedding to take effect, it must be the only level of embedding
+ * selected.
+ */
+ public static final short FSTYPE_RESTRICTED = 0x0001;
+
+ /**
+ * Preview & Print embedding: the font may be embedded, and temporarily loaded on the
+ * remote system. No edits can be applied to the document.
+ */
+ public static final short FSTYPE_PREVIEW_AND_PRINT = 0x0004;
+
+ /**
+ * Editable embedding: the font may be embedded but must only be installed temporarily on other
+ * systems. Documents may be editied and changes saved.
+ */
+ public static final short FSTYPE_EDITIBLE = 0x0004;
+
+ /**
+ * No subsetting: the font must not be subsetted prior to embedding.
+ */
+ public static final short FSTYPE_NO_SUBSETTING = 0x0100;
+
+ /**
+ * Bitmap embedding only: only bitmaps contained in the font may be embedded. No outline data
+ * may be embedded. Other embedding restrictions specified in bits 0-3 and 8 also apply.
+ */
+ public static final short FSTYPE_BITMAP_ONLY = 0x0200;
+
+ /**
* @return Returns the achVendId.
*/
public String getAchVendId()
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java?rev=1645377&r1=1645376&r2=1645377&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java Sun Dec 14 02:45:40 2014
@@ -67,6 +67,10 @@ abstract class TrueTypeEmbedder
{
stream2 = stream.createInputStream();
ttf = new TTFParser().parse(stream2);
+ if (!isEmbeddingPermitted(ttf))
+ {
+ throw new IOException("This font does not permit embedding");
+ }
fd = createFontDescriptor(ttf);
}
finally
@@ -84,6 +88,32 @@ abstract class TrueTypeEmbedder
}
/**
+ * Returns true if the fsType in the OS/2 table permits embedding.
+ */
+ private boolean isEmbeddingPermitted(TrueTypeFont ttf) throws IOException
+ {
+ if (ttf.getOS2Windows() != null)
+ {
+ int fsType = ttf.getOS2Windows().getFsType();
+ int exclusive = fsType & 0x8; // bits 0-3 are a set of exclusive bits
+
+ if ((exclusive & OS2WindowsMetricsTable.FSTYPE_RESTRICTED) ==
+ OS2WindowsMetricsTable.FSTYPE_RESTRICTED)
+ {
+ // restricted License embedding
+ return false;
+ }
+ else if ((exclusive & OS2WindowsMetricsTable.FSTYPE_BITMAP_ONLY) ==
+ OS2WindowsMetricsTable.FSTYPE_BITMAP_ONLY)
+ {
+ // bitmap embedding only
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
* Creates a new font descriptor dictionary for the given TTF.
*/
private PDFontDescriptor createFontDescriptor(TrueTypeFont ttf) throws IOException