svn commit: r1831310 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel: PDAbstractContentStream.java PDAppearanceContentStream.java PDFormContentStream.java PDPageContentStream.java PD

2018-05-10 Thread jahewson
Author: jahewson
Date: Thu May 10 06:50:05 2018
New Revision: 1831310

URL: http://svn.apache.org/viewvc?rev=1831310=rev
Log:
PDFBOX-4068: don't override "common" functionality - abstract content stream 
must track subsetting

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDFormContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPatternContentStream.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java?rev=1831310=1831309=1831310=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 Thu May 10 06:50:05 2018
@@ -18,18 +18,35 @@ package org.apache.pdfbox.pdmodel;
 
 import java.awt.Color;
 import java.awt.geom.AffineTransform;
+import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
 import java.util.Stack;
+import java.util.regex.Pattern;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.fontbox.ttf.CmapLookup;
+import org.apache.fontbox.ttf.gsub.CompoundCharacterTokenizer;
+import org.apache.fontbox.ttf.gsub.GsubWorker;
+import org.apache.fontbox.ttf.gsub.GsubWorkerFactory;
+import org.apache.fontbox.ttf.model.GsubData;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.pdfwriter.COSWriter;
 import 
org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList;
 import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
 import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceCMYK;
@@ -44,6 +61,7 @@ import org.apache.pdfbox.pdmodel.graphic
 import org.apache.pdfbox.pdmodel.graphics.image.PDInlineImage;
 import org.apache.pdfbox.pdmodel.graphics.shading.PDShading;
 import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
+import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode;
 import org.apache.pdfbox.util.Charsets;
 import org.apache.pdfbox.util.Matrix;
 import org.apache.pdfbox.util.NumberFormatUtil;
@@ -55,6 +73,10 @@ import org.apache.pdfbox.util.NumberForm
  */
 abstract class PDAbstractContentStream implements Closeable
 {
+private static final Log LOG = 
LogFactory.getLog(PDAbstractContentStream.class);
+
+protected final PDDocument document; // may be null
+
 protected final OutputStream outputStream;
 protected final PDResources resources;
 
@@ -68,13 +90,19 @@ abstract class PDAbstractContentStream i
 private final NumberFormat formatDecimal = 
NumberFormat.getNumberInstance(Locale.US);
 private final byte[] formatBuffer = new byte[32];
 
+private final Map<PDType0Font, GsubWorker> gsubWorkers = new HashMap<>();
+private final GsubWorkerFactory gsubWorkerFactory = new 
GsubWorkerFactory();
+
 /**
  * Create a new appearance stream.
- * 
+ *
+ * @param document may be null
  * @param outputStream The appearances output stream to write to.
+ * @param resources The resources to use
  */
-PDAbstractContentStream(OutputStream outputStream, PDResources resources)
+PDAbstractContentStream(PDDocument document, OutputStream outputStream, 
PDResources resources)
 {
+this.document = document;
 this.outputStream = outputStream;
 this.resources = resources;
 
@@ -145,6 +173,32 @@ abstract class PDAbstractContentStream i
 fontStack.setElementAt(font, fontStack.size() - 1);
 }
 
+// keep track of fonts which are configured for subsetting
+if (font.willBeSubset())
+{
+if (document != null)
+{
+document.getFontsToSubset().add(font);
+}
+else
+{
+LOG.warn("attempting to use subset font " + font.getName() + " 
without proper context");
+}
+}
+
+// comple

svn commit: r1831309 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel: ./ interactive/annotation/handlers/

2018-05-10 Thread jahewson
Author: jahewson
Date: Thu May 10 06:10:46 2018
New Revision: 1831309

URL: http://svn.apache.org/viewvc?rev=1831309=rev
Log:
PDFBOX-4068: refactor: 'resources' is only ever set within constructors, make 
it a constructor parameter

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDFormContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPatternContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCircleAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDHighlightAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDInkAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolylineAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquareAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDStrikeoutAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDUnderlineAppearanceHandler.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java?rev=1831309=1831308=1831309=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 Thu May 10 06:10:46 2018
@@ -56,7 +56,7 @@ import org.apache.pdfbox.util.NumberForm
 abstract class PDAbstractContentStream implements Closeable
 {
 protected final OutputStream outputStream;
-private PDResources resources;
+protected final PDResources resources;
 
 protected boolean inTextMode = false;
 protected final Stack fontStack = new Stack<>();
@@ -73,10 +73,10 @@ abstract class PDAbstractContentStream i
  * 
  * @param outputStream The appearances output stream to write to.
  */
-PDAbstractContentStream(OutputStream outputStream)
+PDAbstractContentStream(OutputStream outputStream, PDResources resources)
 {
 this.outputStream = outputStream;
-this.resources = null;
+this.resources = resources;
 
 formatDecimal.setMaximumFractionDigits(4);
 formatDecimal.setGroupingUsed(false);
@@ -93,16 +93,6 @@ abstract class PDAbstractContentStream i
 formatDecimal.setMaximumFractionDigits(fractionDigitsNumber);
 }
 
-public PDResources getResources()
-{
-return resources;
-}
-
-public final void setResources(PDResources resources)
-{
-this.resources = resources;
-}
-
 /**
  * Begin some text operations.
  *

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java?rev=1831309=1831308=1831309=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java
 Thu May 10 06:10:46 2018
@@ -56,8 +56,7 @@ public final class PDAppearanceContentSt
  */
 public PDAppearanceContentStream(PDAppearanceStream appearance, 
OutputStream outputStream)
 {
-super(outputStream);
-setResources(appearance.getResources());
+super(outputStream, appearance.getResources());
 }
 
 /**

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDFormContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/ja

svn commit: r1831301 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel: PDAbstractContentStream.java PDPageContentStream.java

2018-05-09 Thread jahewson
Author: jahewson
Date: Thu May 10 04:19:44 2018
New Revision: 1831301

URL: http://svn.apache.org/viewvc?rev=1831301=rev
Log:
PDFBOX-4068: bug fix - remove duplicated fields from PDPageContentStream

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java?rev=1831301=1831300=1831301=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 Thu May 10 04:19:44 2018
@@ -58,11 +58,11 @@ abstract class PDAbstractContentStream i
 private OutputStream outputStream;
 private PDResources resources;
 
-private boolean inTextMode = false;
-private final Stack fontStack = new Stack<>();
+protected boolean inTextMode = false;
+protected final Stack fontStack = new Stack<>();
 
-private final Stack nonStrokingColorSpaceStack = new 
Stack<>();
-private final Stack strokingColorSpaceStack = new Stack<>();
+protected final Stack nonStrokingColorSpaceStack = new 
Stack<>();
+protected final Stack strokingColorSpaceStack = new 
Stack<>();
 
 // number format
 private final NumberFormat formatDecimal = 
NumberFormat.getNumberInstance(Locale.US);
@@ -102,7 +102,7 @@ abstract class PDAbstractContentStream i
 {
 formatDecimal.setMaximumFractionDigits(fractionDigitsNumber);
 }
-
+
 public OutputStream getOutputStream()
 {
 return outputStream;
@@ -112,7 +112,7 @@ abstract class PDAbstractContentStream i
 {
 this.outputStream = outputStream;
 }
-
+
 public PDResources getResources()
 {
 return resources;
@@ -122,22 +122,6 @@ abstract class PDAbstractContentStream i
 {
 this.resources = resources;
 }
-
-public Stack getStrokingColorSpaceStack()
-{
-return strokingColorSpaceStack;
-}
-
-public Stack getNonStrokingColorSpaceStack()
-{
-return nonStrokingColorSpaceStack;
-}
-
-
-public boolean isInTextMode()
-{
-return inTextMode;
-}
 
 /**
  * Begin some text operations.

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java?rev=1831301=1831300=1831301=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
 Thu May 10 04:19:44 2018
@@ -28,7 +28,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.Stack;
 import java.util.regex.Pattern;
 
 import org.apache.commons.logging.Log;
@@ -100,11 +99,6 @@ public final class PDPageContentStream e
 
 private final PDDocument document;
 
-private final Stack fontStack = new Stack<>();
-
-private final Stack nonStrokingColorSpaceStack = new 
Stack<>();
-private final Stack strokingColorSpaceStack = new Stack<>();
-
 private final Map<PDType0Font, GsubWorker> gsubWorkers = new HashMap<>();
 private final GsubWorkerFactory gsubWorkerFactory = new 
GsubWorkerFactory();
 
@@ -328,7 +322,7 @@ public final class PDPageContentStream e
 @Override
 protected void showTextInternal(String text) throws IOException
 {
-if (!isInTextMode())
+if (!inTextMode)
 {
 throw new IllegalStateException("Must call beginText() before 
showText()");
 }
@@ -535,7 +529,7 @@ public final class PDPageContentStream e
 @Deprecated
 public void drawXObject(PDXObject xobject, AffineTransform transform) 
throws IOException
 {
-if (isInTextMode())
+if (inTextMode)
 {
 throw new IllegalStateException("Error: drawXObject is not allowed 
within a text block.");
 }
@@ -788,7 +782,7 @@ public final class PDPageContentStream e
 @Deprecated
 public void fillRect(float x, float y, float width, float height) throws 
IOException
 {
-if (isInTextMode())
+if (inTextMode)
 {
 throw new IllegalStateException("Error: fillRect is not allowed 
within a text block.");
 }
@@ -863,7 +857,7 @@ public final class PDPageContentStream e
 

svn commit: r1831299 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java

2018-05-09 Thread jahewson
Author: jahewson
Date: Thu May 10 03:48:49 2018
New Revision: 1831299

URL: http://svn.apache.org/viewvc?rev=1831299=rev
Log:
PDFBOX-4068: fix - use PDAppearanceContentStream class

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java?rev=1831299=1831298=1831299=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java
 Thu May 10 03:48:49 2018
@@ -21,7 +21,6 @@ import java.util.HashSet;
 import java.util.Set;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.pdfbox.pdmodel.PDAbstractContentStream;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.font.PDType1Font;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
@@ -403,7 +402,7 @@ public class PDLineAppearanceHandler ext
  * 
  * @throws IOException If the content stream could not be written
  */
-private void drawArrow(PDAbstractContentStream cs, float x, float y, float 
len) throws IOException
+private void drawArrow(PDAppearanceContentStream cs, float x, float y, 
float len) throws IOException
 {
 // strategy for arrows: angle 30°, arrow arm length = 9 * line width
 // cos(angle) = x position
@@ -424,7 +423,7 @@ public class PDLineAppearanceHandler ext
  * 
  * @throws IOException If the content stream could not be written
  */
-private void drawDiamond(PDAbstractContentStream cs, float x, float y, 
float r) throws IOException
+private void drawDiamond(PDAppearanceContentStream cs, float x, float y, 
float r) throws IOException
 {
 cs.moveTo(x - r, y);
 cs.lineTo(x, y + r);
@@ -443,7 +442,7 @@ public class PDLineAppearanceHandler ext
  * 
  * @throws IOException If the content stream could not be written
  */
-private void addCircle(PDAbstractContentStream cs, float x, float y, float 
r) throws IOException
+private void addCircle(PDAppearanceContentStream cs, float x, float y, 
float r) throws IOException
 {
 // http://stackoverflow.com/a/2007782/535646
 float magic = r * 0.551784f;




svn commit: r1831291 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: contentstream/ pdmodel/ pdmodel/interactive/annotation/ pdmodel/interactive/annotation/handlers/ pdmodel/interactive/for

2018-05-09 Thread jahewson
Author: jahewson
Date: Thu May 10 00:01:01 2018
New Revision: 1831291

URL: http://svn.apache.org/viewvc?rev=1831291=rev
Log:
PDFBOX-4068: make PDAbstractContentStream  package-private and move its 
subclasses into the same package

Added:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
  - copied, changed from r1831290, 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDAbstractContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAppearanceContentStream.java
  - copied, changed from r1831290, 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceContentStream.java
Removed:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDAbstractContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAppearanceContentStream.java
Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDFormContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPatternContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/CloudyBorder.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDAbstractAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCaretAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDCircleAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDHighlightAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDInkAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLineAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDLinkAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolylineAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDSquareAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDStrikeoutAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDUnderlineAppearanceHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDDefaultAppearanceString.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PlainTextFormatter.java

Copied: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 (from r1831290, 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDAbstractContentStream.java)
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java?p2=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDAbstractContentStream.java=1831290=1831291=1831291=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDAbstractContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDAbstractContentStream.java
 Thu May 10 00:01:01 2018
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.pdfbox.contentstream;
+package org.apache.pdfbox.pdmodel;
 
 import java.awt.Color;
 import java.awt.geom.AffineTransform;
@@ -28,7 +28,6 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.pdfwriter.COSWriter;
-import org.apache.pdfbox.pdmodel.PDResources;
 import 
org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
@@ -54,9 +53,8 @@ import org.apache.pdfbox.util.NumberForm
  *
  * @author Ben Litchfield
  */
-public abstract class PDAbstractContentStream implements Closeable
+abstract class PDAbstractContentStream implements

svn commit: r1831290 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java

2018-05-09 Thread jahewson
Author: jahewson
Date: Wed May  9 23:24:41 2018
New Revision: 1831290

URL: http://svn.apache.org/viewvc?rev=1831290=rev
Log:
PDFBOX-4189: bug fix - subset is empty if both id sets are empty

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java?rev=1831290=1831289=1831290=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFSubsetter.java 
Wed May  9 23:24:41 2018
@@ -990,7 +990,7 @@ public final class TTFSubsetter
  */
 public void writeToStream(OutputStream os) throws IOException
 {
-if (glyphIds.isEmpty() || uniToGID.isEmpty())
+if (glyphIds.isEmpty() && uniToGID.isEmpty())
 {
 LOG.info("font subset is empty");
 }




svn commit: r1765524 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger: PDFDebugger.java ui/DebugLog.java ui/LogDialog.java ui/ReaderBottomPanel.java

2016-10-18 Thread jahewson
Author: jahewson
Date: Tue Oct 18 22:29:58 2016
New Revision: 1765524

URL: http://svn.apache.org/viewvc?rev=1765524=rev
Log:
PDFBOX-2941: add log messages window

Added:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java 
  (with props)

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/ui/LogDialog.java
   (with props)
Modified:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/ui/ReaderBottomPanel.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1765524=1765523=1765524=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
(original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
Tue Oct 18 22:29:58 2016
@@ -92,6 +92,7 @@ import org.apache.pdfbox.debugger.ui.Doc
 import org.apache.pdfbox.debugger.ui.ErrorDialog;
 import org.apache.pdfbox.debugger.ui.ExtensionFileFilter;
 import org.apache.pdfbox.debugger.ui.FileOpenSaveDialog;
+import org.apache.pdfbox.debugger.ui.LogDialog;
 import org.apache.pdfbox.debugger.ui.MapEntry;
 import org.apache.pdfbox.debugger.ui.OSXAdapter;
 import org.apache.pdfbox.debugger.ui.PDFTreeCellRenderer;
@@ -180,6 +181,10 @@ public class PDFDebugger extends JFrame
 isPageMode = viewPages;
 loadConfiguration();
 initComponents();
+
+// use our custom logger
+LogDialog.init(this, statusBar.getLogLabel());
+System.setProperty("org.apache.commons.logging.Log", 
"org.apache.pdfbox.debugger.ui.DebugLog");
 }
 
 /**
@@ -239,7 +244,7 @@ public class PDFDebugger extends JFrame
 File file = new File(filename);
 if (file.exists())
 {
-viewer.readPDFFile( filename, password );
+viewer.readPDFFile(filename, password);
 }
 }
 viewer.setVisible(true);
@@ -1239,6 +1244,8 @@ public class PDFDebugger extends JFrame
 }
 currentFilePath = file.getPath();
 recentFiles.removeFile(file.getPath());
+LogDialog.instance().clear();
+
 parseDocument( file, password );
 
 initTree();

Added: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java?rev=1765524=auto
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java 
(added)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/ui/DebugLog.java 
Tue Oct 18 22:29:58 2016
@@ -0,0 +1,149 @@
+package org.apache.pdfbox.debugger.ui;
+
+import org.apache.commons.logging.Log;
+
+/**
+ * Custom Log implementation which forwards to LogDialog.
+ *
+ * @author John Hewson
+ */
+public class DebugLog implements Log
+{
+private final String name;
+
+// hardcoded, but kept to aid with debugging custom builds
+private final boolean INFO = true;
+private final boolean TRACE = false;
+private final boolean DEBUG = false;
+
+public DebugLog(String name)
+{
+this.name = name;
+}
+
+@Override
+public void debug(Object o)
+{
+if (DEBUG)
+{
+LogDialog.instance().log(name, "debug", o, null);
+}
+}
+
+@Override
+public void debug(Object o, Throwable throwable)
+{
+if (DEBUG)
+{
+LogDialog.instance().log(name, "debug", o, throwable);
+}
+}
+
+@Override
+public void error(Object o)
+{
+LogDialog.instance().log(name, "error", o, null);
+}
+
+@Override
+public void error(Object o, Throwable throwable)
+{
+LogDialog.instance().log(name, "error", o, throwable);
+}
+
+@Override
+public void fatal(Object o)
+{
+LogDialog.instance().log(name, "fatal", o, null);
+}
+
+@Override
+public void fatal(Object o, Throwable throwable)
+{
+LogDialog.instance().log(name, "fatal", o, throwable);
+}
+
+@Override
+public void info(Object o)
+{
+if (INFO)
+{
+LogDialog.instance().log(name, "info", o, null);
+}
+}
+
+@Override
+public void info(Object o, Throwable throwable)
+{
+if (INFO)
+{
+LogDialog.instance().log(name, "info", o, throwable);
+}
+}
+
+@Override
+public boolean isDebugEnabled()
+{
+re

svn commit: r1762097 - /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

2016-09-23 Thread jahewson
Author: jahewson
Date: Fri Sep 23 22:04:58 2016
New Revision: 1762097

URL: http://svn.apache.org/viewvc?rev=1762097=rev
Log:
PDFBOX-3507: don't override useScreenMenuBar if it is already set

Modified:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1762097=1762096=1762097=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
(original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
Fri Sep 23 22:04:58 2016
@@ -191,7 +191,10 @@ public class PDFDebugger extends JFrame
 public static void main(String[] args) throws Exception
 {
 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-System.setProperty("apple.laf.useScreenMenuBar", "true");
+if (System.getProperty("apple.laf.useScreenMenuBar") == null)
+{
+System.setProperty("apple.laf.useScreenMenuBar", "true");
+}
 
 // handle uncaught exceptions
 Thread.setDefaultUncaughtExceptionHandler(new 
Thread.UncaughtExceptionHandler()
@@ -297,7 +300,7 @@ public class PDFDebugger extends JFrame
 tree.setCellRenderer(new PDFTreeCellRenderer());
 tree.setModel(null);
 
-setTitle("PDFBox Debugger");
+setTitle("Apache PDFBox Debugger");
 
 addWindowListener(new java.awt.event.WindowAdapter()
 {




svn commit: r1762096 - /pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

2016-09-23 Thread jahewson
Author: jahewson
Date: Fri Sep 23 22:03:14 2016
New Revision: 1762096

URL: http://svn.apache.org/viewvc?rev=1762096=rev
Log:
PDFBOX-3507: don't override useScreenMenuBar if it is already set

Modified:

pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

Modified: 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1762096=1762095=1762096=diff
==
--- 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
 (original)
+++ 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
 Fri Sep 23 22:03:14 2016
@@ -190,7 +190,7 @@ public class PDFDebugger extends JFrame
 tree.setCellRenderer(new PDFTreeCellRenderer());
 tree.setModel(null);
 
-setTitle("PDFBox Debugger");
+setTitle("Apache PDFBox Debugger");
 
 addWindowListener(new java.awt.event.WindowAdapter()
 {
@@ -1100,8 +1100,11 @@ public class PDFDebugger extends JFrame
 public static void main(String[] args) throws Exception
 {
 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-System.setProperty("apple.laf.useScreenMenuBar", "true");
-
+if (System.getProperty("apple.laf.useScreenMenuBar") == null)
+{
+System.setProperty("apple.laf.useScreenMenuBar", "true");
+}
+
 // handle uncaught exceptions
 Thread.setDefaultUncaughtExceptionHandler(new 
Thread.UncaughtExceptionHandler()
 {




svn propchange: r1756692 - svn:log

2016-08-17 Thread jahewson
Author: jahewson
Revision: 1756692
Modified property: svn:log

Modified: svn:log at Wed Aug 17 22:50:24 2016
--
--- svn:log (original)
+++ svn:log Wed Aug 17 22:50:24 2016
@@ -1 +1 @@
-getAnnotations should not modify the PDF
+PDFBOX-3467: getAnnotations should  PDF



svn commit: r1756692 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java

2016-08-17 Thread jahewson
Author: jahewson
Date: Wed Aug 17 22:42:26 2016
New Revision: 1756692

URL: http://svn.apache.org/viewvc?rev=1756692=rev
Log:
getAnnotations should not modify the PDF

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java?rev=1756692=1756691=1756692=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java Wed 
Aug 17 22:42:26 2016
@@ -647,9 +647,8 @@ public class PDPage implements COSObject
 COSArray annots = (COSArray) page.getDictionaryObject(COSName.ANNOTS);
 if (annots == null)
 {
-annots = new COSArray();
-page.setItem(COSName.ANNOTS, annots);
-retval = new COSArrayList(new 
ArrayList(), annots);
+// unmodifiable list prevents silent errors due to 2.1 API change
+return 
Collections.unmodifiableList(Collections.emptyList());
 }
 else
 {




svn commit: r1755826 - in /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text: LegacyPDFStreamEngine.java PDFMarkedContentExtractor.java PDFTextStreamEngine.java PDFTextStripper.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 20:03:08 2016
New Revision: 1755826

URL: http://svn.apache.org/viewvc?rev=1755826=rev
Log:
PDFBOX-3460: warn users not to use legacy code

Added:

pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java
  - copied, changed from r1755663, 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java
Removed:

pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java
Modified:

pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java

pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripper.java

Copied: 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java
 (from r1755663, 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java)
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java?p2=pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java=pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java=1755663=1755826=1755826=diff
==
--- 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java
 (original)
+++ 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java
 Wed Aug 10 20:03:08 2016
@@ -63,15 +63,18 @@ import org.apache.pdfbox.contentstream.o
 import org.apache.pdfbox.pdmodel.font.PDFontDescriptor;
 
 /**
- * PDFStreamEngine subclass for advanced processing of text via TextPosition.
+ * LEGACY text calculations which are known to be incorrect but are depended 
on by PDFTextStripper.
  *
- * @see org.apache.pdfbox.text.TextPosition
- * @author Ben Litchfield
- * @author John Hewson
+ * This class exists only so that we don't break the code of users who have 
their own subclasses
+ * of PDFTextStripper. It replaces the good implementation of showGlyph in 
PDFStreamEngine, with
+ * a bad implementation which is backwards compatible.
+ *
+ * DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper.
+ * THIS CODE IS DELIBERATELY INCORRECT, USE PDFStreamEngine INSTEAD.
  */
-class PDFTextStreamEngine extends PDFStreamEngine
+class LegacyPDFStreamEngine extends PDFStreamEngine
 {
-private static final Log LOG = 
LogFactory.getLog(PDFTextStreamEngine.class);
+private static final Log LOG = 
LogFactory.getLog(LegacyPDFStreamEngine.class);
 
 private int pageRotation;
 private PDRectangle pageSize;
@@ -81,7 +84,7 @@ class PDFTextStreamEngine extends PDFStr
 /**
  * Constructor.
  */
-PDFTextStreamEngine() throws IOException
+LegacyPDFStreamEngine() throws IOException
 {
 addOperator(new BeginText());
 addOperator(new Concatenate());
@@ -123,7 +126,7 @@ class PDFTextStreamEngine extends PDFStr
 {
 this.pageRotation = page.getRotation();
 this.pageSize = page.getCropBox();
-
+
 if (pageSize.getLowerLeftX() == 0 && pageSize.getLowerLeftY() == 0)
 {
 translateMatrix = null;
@@ -132,7 +135,7 @@ class PDFTextStreamEngine extends PDFStr
 {
 // translation matrix for cropbox
 translateMatrix = 
Matrix.getTranslateInstance(-pageSize.getLowerLeftX(), 
-pageSize.getLowerLeftY());
-}
+}
 super.processPage(page);
 }
 
@@ -146,6 +149,9 @@ class PDFTextStreamEngine extends PDFStr
 //
 // legacy calculations which were previously in PDFStreamEngine
 //
+//  DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper.
+//  THIS CODE IS DELIBERATELY INCORRECT
+//
 
 PDGraphicsState state = getGraphicsState();
 Matrix ctm = state.getCurrentTransformationMatrix();
@@ -162,7 +168,7 @@ class PDFTextStreamEngine extends PDFStr
 }
 // 1/2 the bbox is used as the height todo: why?
 float glyphHeight = bbox.getHeight() / 2;
-
+
 // sometimes the bbox has very high values, but CapHeight is OK
 PDFontDescriptor fontDescriptor = font.getFontDescriptor();
 if (fontDescriptor != null)
@@ -196,7 +202,7 @@ class PDFTextStreamEngine extends PDFStr
 TrueTypeFont ttf = null;
 if (font instanceof PDTrueTypeFont)
 {
- ttf = ((PDTrueTypeFont)font).getTrueTypeFont();
+ttf = ((PDTrueTypeFont)font).getTrueTypeFont();
 }
 else if (font instanceof PDType0Font)
 {
@@ -211,6 +217,14 @@ class PDFTextStreamEngine extends PDFStr
 displacementX *= 1000f / ttf.getUnitsPerEm();
 }
 }
+
+//
+// legacy calculations which were pr

svn commit: r1755823 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text: LegacyPDFStreamEngine.java PDFMarkedContentExtractor.java PDFTextStreamEngine.java PDFTextStripper.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 19:59:25 2016
New Revision: 1755823

URL: http://svn.apache.org/viewvc?rev=1755823=rev
Log:
PDFBOX-3460: warn users not to use legacy code

Added:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java
  - copied, changed from r1755670, 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java
Removed:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java
Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripper.java

Copied: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java
 (from r1755670, 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java)
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java?p2=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java=1755670=1755823=1755823=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStreamEngine.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/LegacyPDFStreamEngine.java
 Wed Aug 10 19:59:25 2016
@@ -63,15 +63,18 @@ import org.apache.pdfbox.contentstream.o
 import org.apache.pdfbox.pdmodel.font.PDFontDescriptor;
 
 /**
- * PDFStreamEngine subclass for advanced processing of text via TextPosition.
- *
- * @see org.apache.pdfbox.text.TextPosition
- * @author Ben Litchfield
- * @author John Hewson
+ * LEGACY text calculations which are known to be incorrect but are depended 
on by PDFTextStripper.
+ * 
+ * This class exists only so that we don't break the code of users who have 
their own subclasses
+ * of PDFTextStripper. It replaces the good implementation of showGlyph in 
PDFStreamEngine, with
+ * a bad implementation which is backwards compatible.
+ * 
+ * DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper.
+ * THIS CODE IS DELIBERATELY INCORRECT, USE PDFStreamEngine INSTEAD.
  */
-class PDFTextStreamEngine extends PDFStreamEngine
+class LegacyPDFStreamEngine extends PDFStreamEngine
 {
-private static final Log LOG = 
LogFactory.getLog(PDFTextStreamEngine.class);
+private static final Log LOG = 
LogFactory.getLog(LegacyPDFStreamEngine.class);
 
 private int pageRotation;
 private PDRectangle pageSize;
@@ -81,7 +84,7 @@ class PDFTextStreamEngine extends PDFStr
 /**
  * Constructor.
  */
-PDFTextStreamEngine() throws IOException
+LegacyPDFStreamEngine() throws IOException
 {
 addOperator(new BeginText());
 addOperator(new Concatenate());
@@ -146,6 +149,9 @@ class PDFTextStreamEngine extends PDFStr
 //
 // legacy calculations which were previously in PDFStreamEngine
 //
+//  DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper.
+//  THIS CODE IS DELIBERATELY INCORRECT
+//
 
 PDGraphicsState state = getGraphicsState();
 Matrix ctm = state.getCurrentTransformationMatrix();
@@ -211,6 +217,14 @@ class PDFTextStreamEngine extends PDFStr
 displacementX *= 1000f / ttf.getUnitsPerEm();
 }
 }
+
+//
+// legacy calculations which were previously in PDFStreamEngine
+//
+//  DO NOT USE THIS CODE UNLESS YOU ARE WORKING WITH PDFTextStripper.
+//  THIS CODE IS DELIBERATELY INCORRECT
+//
+
 // (modified) combined displacement, this is calculated *without* 
taking the character
 // spacing and word spacing into account, due to legacy code in 
TextStripper
 float tx = displacementX * fontSize * horizontalScaling;

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java?rev=1755823=1755822=1755823=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFMarkedContentExtractor.java
 Wed Aug 10 19:59:25 2016
@@ -37,7 +37,7 @@ import org.apache.pdfbox.contentstream.o
  *
  * @author Johannes Koch
  */
-public class PDFMarkedContentExtractor extends PDFTextStreamEngine
+public class PDFMarkedContentExtractor extends LegacyPDFStreamEngine
 {
 private final boolean suppressDuplicateOverlappingText = true;
 private final List markedContents = new 
ArrayList();

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripper.java
URL

svn commit: r1755810 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane: Stream.java StreamPane.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 19:37:29 2016
New Revision: 1755810

URL: http://svn.apache.org/viewvc?rev=1755810=rev
Log:
PDFBOX-2941: replace old "filtered" / "unfiltered" terminology

Modified:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java?rev=1755810=1755809=1755810=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java
 (original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java
 Wed Aug 10 19:37:29 2016
@@ -39,7 +39,7 @@ import org.apache.pdfbox.pdmodel.graphic
  */
 public class Stream
 {
-public static final String UNFILTERED = "Unfiltered";
+public static final String DECODED = "Decoded (Plain Text)";
 public static final String IMAGE = "Image";
 
 private final COSStream stream;
@@ -124,7 +124,7 @@ public class Stream
 sb.append(((COSName) filterArray.get(i)).getName());
 }
 }
-return "Filtered (" + sb.toString() + ")";
+return "Encoded (" + sb.toString() + ")";
 }
 
 /**
@@ -137,7 +137,7 @@ public class Stream
 {
 try
 {
-if (UNFILTERED.equals(key))
+if (DECODED.equals(key))
 {
 return stream.createInputStream();
 }
@@ -194,7 +194,7 @@ public class Stream
 filterList.put(IMAGE, null);
 }
 
-filterList.put(UNFILTERED, null);
+filterList.put(DECODED, null);
 PDStream pdStream = new PDStream(stream);
 
 if (pdStream.getFilters() != null)

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java?rev=1755810=1755809=1755810=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java
 (original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java
 Wed Aug 10 19:37:29 2016
@@ -141,8 +141,8 @@ public class StreamPane implements Actio
 }
 else
 {
-panel.add(createHeaderPanel(stream.getFilterList(), 
Stream.UNFILTERED, this));
-requestStreamText(Stream.UNFILTERED);
+panel.add(createHeaderPanel(stream.getFilterList(), 
Stream.DECODED, this));
+requestStreamText(Stream.DECODED);
 }
 
 tabbedPane = new JTabbedPane();
@@ -258,7 +258,7 @@ public class StreamPane implements Actio
 encoding = "UTF-8";
 }
 InputStream inputStream = stream.getStream(filterKey);
-if (isContentStream && Stream.UNFILTERED.equals(filterKey))
+if (isContentStream && Stream.DECODED.equals(filterKey))
 {
 StyledDocument document = 
getContentStreamDocument(inputStream);
 if (document != null)




svn commit: r1755800 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger: PDFDebugger.java fontencodingpane/FontEncodingView.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 18:58:17 2016
New Revision: 1755800

URL: http://svn.apache.org/viewvc?rev=1755800=rev
Log:
PDFBOX-2941: configurability!

Modified:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1755800=1755799=1755800=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
(original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
Wed Aug 10 18:58:17 2016
@@ -33,6 +33,7 @@ import java.awt.print.PrinterException;
 import java.awt.print.PrinterJob;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
@@ -41,6 +42,7 @@ import java.net.URL;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Properties;
 import java.util.Set;
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -127,6 +129,7 @@ public class PDFDebugger extends JFrame
 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
 private static final String OS_NAME = 
System.getProperty("os.name").toLowerCase();
 private static final boolean IS_MAC_OS = OS_NAME.startsWith("mac os x");
+
 private final JPanel documentPanel = new JPanel();
 private TreeStatusPane statusPane;
 private RecentFiles recentFiles;
@@ -157,6 +160,9 @@ public class PDFDebugger extends JFrame
 public static JCheckBoxMenuItem showFontBBox;
 public static JCheckBoxMenuItem showGlyphBounds;
 
+// configuration
+public static Properties configuration;
+
 /**
  * Constructor.
  */
@@ -171,6 +177,7 @@ public class PDFDebugger extends JFrame
 public PDFDebugger(boolean viewPages)
 {
 isPageMode = viewPages;
+loadConfiguration();
 initComponents();
 }
 
@@ -250,6 +257,32 @@ public class PDFDebugger extends JFrame
 }
 
 /**
+ * Loads the local configuration file, if any.
+ */
+private void loadConfiguration()
+{
+File file = new File("config.properties");
+if (file.exists())
+{
+try
+{
+InputStream is = new FileInputStream(file);
+configuration = new Properties();
+configuration.load(is);
+is.close();
+}
+catch(IOException e)
+{
+throw new RuntimeException(e);
+}
+}
+else
+{
+configuration = new Properties();
+}
+}
+
+/**
  * This method is called from within the constructor to initialize the 
form.
  */
 private void initComponents()

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java?rev=1755800=1755799=1755800=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
 (original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
 Wed Aug 10 18:58:17 2016
@@ -38,6 +38,7 @@ import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
 import java.util.Iterator;
 import java.util.Map;
+import org.apache.pdfbox.debugger.PDFDebugger;
 
 /**
  * @author Khyrul Bashar
@@ -107,9 +108,11 @@ class FontEncodingView
 int row = 0;
 while (keys.hasNext())
 {
+int fontSize = 
Integer.parseInt(PDFDebugger.configuration.getProperty(
+"headerFontSize", "" + 
headerPanel.getFont().getSize()));
 String key = keys.next();
 JLabel encodingNameLabel = new JLabel(key + ": " + 
attributes.get(key));
-encodingNameLabel.setFont(new Font(Font.DIALOG, Font.PLAIN, 
16));
+encodingNameLabel.setFont(new Font(Font.DIALOG, Font.PLAIN, 
fontSize));
 encodingNameLabel.setBorder(BorderFactory.createEmptyBorder(2, 
0, 2, 0));
 
 GridBagConstraints gbc = new GridBagConstraints();
@@ -148,7 +151,9 @@ class FontEncodingView
 if (bounds2D.isEmpty())
 {
 JLabel la

svn commit: r1755796 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering: GlyphCache.java PageDrawer.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 18:34:38 2016
New Revision: 1755796

URL: http://svn.apache.org/viewvc?rev=1755796=rev
Log:
PDFBOX-3459: don't cache twice

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java?rev=1755796=1755795=1755796=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java 
Wed Aug 10 18:34:38 2016
@@ -42,11 +42,6 @@ final class GlyphCache
 {
 this.font = font;
 }
-
-public void put(int code, GeneralPath path)
-{
-cache.put(code, path);
-}
 
 public GeneralPath getPathForCharacterCode(int code)
 {

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1755796=1755795=1755796=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
Wed Aug 10 18:34:38 2016
@@ -334,14 +334,7 @@ public class PageDrawer extends PDFGraph
 glyphCaches.put(font, cache);
 }
 
-// cache glyph path if is not already cache
 GeneralPath path = cache.getPathForCharacterCode(code);
-if (path == null)
-{
-path = vectorFont.getNormalizedPath(code);
-cache.put(code, path);
-}
-
 drawGlyph(path, font, code, displacement, at);
 }
 




svn commit: r1755795 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 18:29:52 2016
New Revision: 1755795

URL: http://svn.apache.org/viewvc?rev=1755795=rev
Log:
PDFBOX-3459: undo IntelliJ's meddling

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1755795=1755794=1755795=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
Wed Aug 10 18:29:52 2016
@@ -87,22 +87,27 @@ public class PageDrawer extends PDFGraph
 
 // parent document renderer - note: this is needed for not-yet-implemented 
resource caching
 private final PDFRenderer renderer;
-// glyph caches
-private final Map<PDFont, GlyphCache> glyphCaches = new HashMap<PDFont, 
GlyphCache>();
+
 // the graphics device to draw to, xform is the initial transform of the 
device (i.e. DPI)
 private Graphics2D graphics;
 private AffineTransform xform;
+
 // the page box to draw (usually the crop box but may be another)
 private PDRectangle pageSize;
+
 // clipping winding rule used for the clipping path
 private int clipWindingRule = -1;
 private GeneralPath linePath = new GeneralPath();
+
 // last clipping path
 private Area lastClip;
+
 // buffered clipping area for text being drawn
 private Area textClippingArea;
-
-
+
+// glyph caches
+private final Map<PDFont, GlyphCache> glyphCaches = new HashMap<PDFont, 
GlyphCache>();
+
 /**
  * Constructor.
  *
@@ -329,7 +334,7 @@ public class PageDrawer extends PDFGraph
 glyphCaches.put(font, cache);
 }
 
-// cache glyph path if is not already cached
+// cache glyph path if is not already cache
 GeneralPath path = cache.getPathForCharacterCode(code);
 if (path == null)
 {




svn commit: r1755794 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger: PDFDebugger.java pagepane/DebugPDFRenderer.java pagepane/DebugPageDrawer.java pagepane/DebugTextOverlay.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 18:22:59 2016
New Revision: 1755794

URL: http://svn.apache.org/viewvc?rev=1755794=rev
Log:
PDFBOX-2941: show text bounds as an overlay

Added:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPDFRenderer.java
   (with props)

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java
   (with props)

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java
   (with props)
Modified:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1755794=1755793=1755794=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
(original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java 
Wed Aug 10 18:22:59 2016
@@ -16,6 +16,53 @@
  */
 package org.apache.pdfbox.debugger;
 
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FileDialog;
+import java.awt.Toolkit;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import javax.swing.TransferHandler;
+import javax.swing.UIManager;
+import javax.swing.border.BevelBorder;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.tree.TreePath;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSBoolean;
@@ -57,53 +104,6 @@ import org.apache.pdfbox.pdmodel.PDDocum
 import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
 import org.apache.pdfbox.printing.PDFPageable;
 
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPasswordField;
-import javax.swing.JScrollPane;
-import javax.swing.KeyStroke;
-import javax.swing.TransferHandler;
-import javax.swing.UIManager;
-import javax.swing.border.BevelBorder;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.filechooser.FileFilter;
-import javax.swing.tree.TreePath;
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FileDialog;
-import java.awt.Toolkit;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.datatransfer.UnsupportedFlavorException;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.WindowEvent;
-import java.awt.print.PrinterException;
-import java.awt.print.PrinterJob;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 /**
  * PDF Debugger.
  * 
@@ -153,6 +153,9 @@ public class PDFDebugger extends JFrame
 
 // view menu
 private JMenuItem viewModeItem;
+public static JCheckBoxMenuItem showTextStripper;
+public static JCheckBoxMenuItem showFontBBox;
+public static JCheckBoxMenuItem

svn commit: r1755778 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 16:11:33 2016
New Revision: 1755778

URL: http://svn.apache.org/viewvc?rev=1755778=rev
Log:
PDFBOX-3459: Typo

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1755778=1755777=1755778=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
Wed Aug 10 16:11:33 2016
@@ -329,7 +329,7 @@ public class PageDrawer extends PDFGraph
 glyphCaches.put(font, cache);
 }
 
-// cache glyph path if is not already cache
+// cache glyph path if is not already cached
 GeneralPath path = cache.getPathForCharacterCode(code);
 if (path == null)
 {




svn commit: r1755774 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: pdmodel/font/ rendering/

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 16:06:07 2016
New Revision: 1755774

URL: http://svn.apache.org/viewvc?rev=1755774=rev
Log:
PDFBOX-3459: Move Glyph2D functionality into PDFont subclasses

Added:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/GlyphCache.java   
(with props)
Removed:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/CIDType0Glyph2D.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/Glyph2D.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/TTFGlyph2D.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/Type1Glyph2D.java
Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.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/PDType0Font.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDVectorFont.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java?rev=1755774=1755773=1755774=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
 Wed Aug 10 16:06:07 2016
@@ -57,10 +57,9 @@ public class PDCIDFontType0 extends PDCI
 private final Map<Integer, Float> glyphHeights = new HashMap<Integer, 
Float>();
 private final boolean isEmbedded;
 private final boolean isDamaged;
-
+private final AffineTransform fontMatrixTransform;
 private Float avgWidth = null;
 private Matrix fontMatrix;
-private final AffineTransform fontMatrixTransform;
 private BoundingBox fontBBox;
 
 /**
@@ -190,16 +189,6 @@ public class PDCIDFontType0 extends PDCI
 return fontMatrix;
 }
 
-private class ByteSource implements CFFParser.ByteSource
-{
-@Override
-public byte[] getBytes() throws IOException
-{
-PDStream ff3Stream = getFontDescriptor().getFontFile3();
-return IOUtils.toByteArray(ff3Stream.createInputStream());
-}
-}
-
 @Override
 public BoundingBox getBoundingBox()
 {
@@ -328,6 +317,12 @@ public class PDCIDFontType0 extends PDCI
 }
 
 @Override
+public GeneralPath getNormalizedPath(int code) throws IOException
+{
+return getPath(code);
+}
+
+@Override
 public boolean hasGlyph(int code) throws IOException
 {
 int cid = codeToCID(code);
@@ -448,4 +443,14 @@ public class PDCIDFontType0 extends PDCI
 // todo: not implemented, highly suspect
 return 500;
 }
+
+private class ByteSource implements CFFParser.ByteSource
+{
+@Override
+public byte[] getBytes() throws IOException
+{
+PDStream ff3Stream = getFontDescriptor().getFontFile3();
+return IOUtils.toByteArray(ff3Stream.createInputStream());
+}
+}
 }

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=1755774=1755773=1755774=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
 Wed Aug 10 16:06:07 2016
@@ -16,6 +16,7 @@
  */
 package org.apache.pdfbox.pdmodel.font;
 
+import java.awt.geom.AffineTransform;
 import java.awt.geom.GeneralPath;
 import java.io.IOException;
 import java.io.InputStream;
@@ -447,6 +448,36 @@ public class PDCIDFontType2 extends PDCI
 }
 }
 
+@Override
+public GeneralPath getNormalizedPath(int code) throws IOException
+{
+boolean hasScaling = ttf.getUnitsPerEm() != 1000;
+float scale = 1000f / ttf.getUnitsPerEm();
+int gid = codeToGID(code);
+
+GeneralPath path = getPath(code);
+
+// Acrobat only draws GID 0 for embedded CIDFonts, see PDFBOX-2372
+if (gid == 0 && !isEmbedded())
+{
+path = null;
+}
+
+if (path == null)
+{
+// empty glyph (e.g. space, newline)

svn commit: r1755755 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger: fontencodingpane/FontEncodingView.java fontencodingpane/SimpleFont.java fontencodingpane/Type0Font.java fonte

2016-08-10 Thread jahewson
Author: jahewson
Date: Wed Aug 10 14:26:40 2016
New Revision: 1755755

URL: http://svn.apache.org/viewvc?rev=1755755=rev
Log:
PDFBOX-2941: clean up the font encoding panel

Modified:

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type0Font.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/Type3Font.java

pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java?rev=1755755=1755754=1755755=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
 (original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/FontEncodingView.java
 Wed Aug 10 14:26:40 2016
@@ -16,6 +16,14 @@
 
 package org.apache.pdfbox.debugger.fontencodingpane;
 
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.SwingConstants;
+import javax.swing.table.TableCellRenderer;
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Dimension;
@@ -30,13 +38,6 @@ import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
 import java.util.Iterator;
 import java.util.Map;
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.SwingConstants;
-import javax.swing.table.TableCellRenderer;
 
 /**
  * @author Khyrul Bashar
@@ -98,6 +99,7 @@ class FontEncodingView
 private JPanel getHeaderPanel(Map<String, String> attributes)
 {
 JPanel headerPanel = new JPanel(new GridBagLayout());
+headerPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0));
 
 if (attributes != null)
 {
@@ -107,7 +109,8 @@ class FontEncodingView
 {
 String key = keys.next();
 JLabel encodingNameLabel = new JLabel(key + ": " + 
attributes.get(key));
-encodingNameLabel.setFont(new Font(Font.MONOSPACED, Font.BOLD, 
17));
+encodingNameLabel.setFont(new Font(Font.DIALOG, Font.PLAIN, 
16));
+encodingNameLabel.setBorder(BorderFactory.createEmptyBorder(2, 
0, 2, 0));
 
 GridBagConstraints gbc = new GridBagConstraints();
 gbc.gridx = 0;
@@ -145,22 +148,22 @@ class FontEncodingView
 if (bounds2D.isEmpty())
 {
 JLabel label = new JLabel(SimpleFont.NO_GLYPH, 
SwingConstants.CENTER);
-label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 25));
-label.setForeground(Color.RED);
+label.setFont(new Font(Font.DIALOG, Font.PLAIN, 16));
+label.setForeground(Color.GRAY);
 return label;
 }
 Rectangle cellRect = jTable.getCellRect(row, col, false);
 BufferedImage bim = renderGlyph(path, bounds2D, cellRect);
-return new JLabel(new ImageIcon(bim));
+return new JLabel(new ImageIcon(bim), SwingConstants.CENTER);
 }
 if (o != null)
 {
 JLabel label = new JLabel(o.toString(), SwingConstants.CENTER);
-label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 25));
+label.setFont(new Font(Font.DIALOG, Font.PLAIN, 16));
 if (SimpleFont.NO_GLYPH.equals(o) || ".notdef".equals(o))
 {
 label.setText(o.toString());
-label.setForeground(Color.RED);
+label.setForeground(Color.GRAY);
 }
 return label;
 }

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java?rev=1755755=1755754=1755755=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java
 (original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/fontencodingpane/SimpleFont.java
 Wed Aug 10 14:2

svn commit: r1755670 - in /pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui: FileOpenSaveDialog.java Tree.java

2016-08-09 Thread jahewson
Author: jahewson
Date: Wed Aug 10 05:23:33 2016
New Revision: 1755670

URL: http://svn.apache.org/viewvc?rev=1755670=rev
Log:
PDFBOX-2941: infer file extensions for streams for easy "save as" and "open"

Modified:

pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java

pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java

Modified: 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java?rev=1755670=1755669=1755670=diff
==
--- 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java
 (original)
+++ 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/FileOpenSaveDialog.java
 Wed Aug 10 05:23:33 2016
@@ -64,6 +64,7 @@ public class FileOpenSaveDialog
 public FileOpenSaveDialog(Component parentUI, FileFilter fileFilter)
 {
 mainUI = parentUI;
+fileChooser.resetChoosableFileFilters();
 fileChooser.setFileFilter(fileFilter);
 }
 
@@ -74,16 +75,21 @@ public class FileOpenSaveDialog
  * @return true if the file is saved successfully or false if failed.
  * @throws IOException if there is an error in creation of the file.
  */
-public boolean saveFile(byte[] bytes) throws IOException
+public boolean saveFile(byte[] bytes, String extension) throws IOException
 {
 int result = fileChooser.showSaveDialog(mainUI);
 if (result == JFileChooser.APPROVE_OPTION)
 {
-File selectedFile = fileChooser.getSelectedFile();
+String filename = fileChooser.getSelectedFile().getAbsolutePath();
+if (extension != null && !filename.endsWith(extension))
+{
+filename += "." + extension;
+}
+
 FileOutputStream outputStream = null;
 try
 {
-outputStream = new FileOutputStream(selectedFile);
+outputStream = new FileOutputStream(filename);
 outputStream.write(bytes);
 }
 finally

Modified: 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java?rev=1755670=1755669=1755670=diff
==
--- 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java
 (original)
+++ 
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/ui/Tree.java
 Wed Aug 10 05:23:33 2016
@@ -18,6 +18,7 @@
 package org.apache.pdfbox.debugger.ui;
 
 import java.awt.Component;
+import java.awt.Desktop;
 import java.awt.Point;
 import java.awt.Toolkit;
 import java.awt.datatransfer.Clipboard;
@@ -25,6 +26,8 @@ import java.awt.datatransfer.StringSelec
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -32,6 +35,8 @@ import java.util.List;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 import javax.swing.JTree;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.filechooser.FileNameExtensionFilter;
 import javax.swing.tree.TreePath;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
@@ -72,10 +77,7 @@ public class Tree extends JTree
 TreePath path = getClosestPathForLocation(event.getX(), 
event.getY());
 setSelectionPath(path);
 treePopupMenu.removeAll();
-for (JMenuItem menuItem : getPopupMenuItems(path))
-{
-treePopupMenu.add(menuItem);
-}
+addPopupMenuItems(path);
 return event.getPoint();
 }
 return null;
@@ -86,12 +88,11 @@ public class Tree extends JTree
  * @param nodePath is instance of TreePath of the specified Node.
  * @return the JMenuItem list for the node
  */
-private List getPopupMenuItems(TreePath nodePath)
+private void addPopupMenuItems(TreePath nodePath)
 {
 Object obj = nodePath.getLastPathComponent();
-List menuItems = new ArrayList();
 
-menuItems.add(getTreePathMenuItem(nodePath));
+treePopupMenu.add(getTreePathMenuItem(nodePath));
 
 if (obj instanceof MapEntry)
 {
@@ -104,22 +105,30 @@ public class Tree extends JTree
 
 if (obj instanceof COSStream)
 {
+treePopupMenu.addSeparator();
+
 

svn commit: r1749136 - /pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java

2016-06-19 Thread jahewson
Author: jahewson
Date: Sun Jun 19 07:31:56 2016
New Revision: 1749136

URL: http://svn.apache.org/viewvc?rev=1749136=rev
Log:
PDFBOX-3337: Don't clear data when closing an in-memory TTF stream

Modified:

pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java

Modified: 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java?rev=1749136=1749135=1749136=diff
==
--- 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java
 (original)
+++ 
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java
 Sun Jun 19 07:31:56 2016
@@ -146,7 +146,6 @@ class MemoryTTFDataStream extends TTFDat
  */
 public void close() throws IOException
 {
-data = null;
 }
 
 /**




svn commit: r1749135 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java

2016-06-19 Thread jahewson
Author: jahewson
Date: Sun Jun 19 07:27:11 2016
New Revision: 1749135

URL: http://svn.apache.org/viewvc?rev=1749135=rev
Log:
PDFBOX-3337: Don't clear data when closing an in-memory TTF stream

Modified:

pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java?rev=1749135=1749134=1749135=diff
==
--- 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java
 (original)
+++ 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/MemoryTTFDataStream.java
 Sun Jun 19 07:27:11 2016
@@ -146,7 +146,6 @@ class MemoryTTFDataStream extends TTFDat
  */
 public void close() throws IOException
 {
-data = null;
 }
 
 /**




svn commit: r1743296 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java

2016-05-10 Thread jahewson
Author: jahewson
Date: Wed May 11 04:14:21 2016
New Revision: 1743296

URL: http://svn.apache.org/viewvc?rev=1743296=rev
Log:
PDFBOX-3344: Correct detection of OTF fonts via OTTO header

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java

Modified: 
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=1743296=1743295=1743296=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OpenTypeFont.java 
Wed May 11 04:14:21 2016
@@ -40,7 +40,7 @@ public class OpenTypeFont extends TrueTy
 @Override
 void setVersion(float versionValue)
 {
-isPostScript = versionValue != 1.0;
+isPostScript = Float.floatToIntBits(versionValue) == 0x469EA8A9; // 
OTTO
 super.setVersion(versionValue);
 }
 




svn commit: r1743256 - in /pdfbox/trunk: fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java

2016-05-10 Thread jahewson
Author: jahewson
Date: Tue May 10 20:35:32 2016
New Revision: 1743256

URL: http://svn.apache.org/viewvc?rev=1743256=rev
Log:
PDFBOX-3344: Handle the case where CFF/OTF fonts are embedded where TTF is 
expected

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java

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=1743256=1743255=1743256=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 
Tue May 10 20:35:32 2016
@@ -175,6 +175,8 @@ public class TTFParser
 }
 }
 
+boolean isPostScript = font.tables.containsKey(CFFTable.TAG);
+
 HeaderTable head = font.getHeader();
 if (head == null)
 {
@@ -200,26 +202,30 @@ public class TTFParser
 throw new IOException("post is mandatory");
 }
 
-IndexToLocationTable loc = font.getIndexToLocation();
-if (loc == null)
+if (!isPostScript)
 {
-throw new IOException("loca is mandatory");
-}
-// check other mandatory tables
-if (font.getGlyph() == null)
-{
-throw new IOException("glyf is mandatory");
+IndexToLocationTable loc = font.getIndexToLocation();
+if (loc == null)
+{
+throw new IOException("loca is mandatory");
+}
+
+if (font.getGlyph() == null)
+{
+throw new IOException("glyf is mandatory");
+}
 }
+
 if (font.getNaming() == null && !isEmbedded)
 {
 throw new IOException("name is mandatory");
 }
+
 if (font.getHorizontalMetrics() == null)
 {
 throw new IOException("hmtx is mandatory");
 }
-
-// check others mandatory tables
+
 if (!isEmbedded && font.getCmap() == null)
 {
 throw new IOException("cmap is mandatory");

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=1743256=1743255=1743256=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
 Tue May 10 20:35:32 2016
@@ -29,7 +29,6 @@ import org.apache.fontbox.ttf.CmapSubtab
 import org.apache.fontbox.ttf.GlyphData;
 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;
 import org.apache.pdfbox.cos.COSBase;
@@ -93,48 +92,36 @@ public class PDCIDFontType2 extends PDCI
 {
 boolean fontIsDamaged = false;
 TrueTypeFont ttfFont = null;
-PDStream ff2Stream = fd.getFontFile2();
-PDStream ff3Stream = fd.getFontFile3();
-
-// Acrobat looks in FontFile too, even though it is not in the 
spec, see PDFBOX-2599
-if (ff2Stream == null && ff3Stream == null)
+
+PDStream stream;
+if (fd.getFontFile2() != null)
 {
-ff2Stream = fd.getFontFile();
+stream = fd.getFontFile2();
 }
-
-if (ff2Stream != null)
+else if (fd.getFontFile3() != null)
 {
-try
-{
-// embedded
-TTFParser ttfParser = new TTFParser(true);
-ttfFont = ttfParser.parse(ff2Stream.createInputStream());
-}
-catch (NullPointerException e) // TTF parser is buggy
-{
-LOG.warn("Could not read embedded TTF for font " + 
getBaseFont(), e);
-fontIsDamaged = true;
-}
-catch (IOException e)
-{
-LOG.warn("Could not read embedded TTF for font " + 
getBaseFont(), e);
-fontIsDamaged = true;
-}
+stream = fd.getFontFile3();
 }
-else if (ff3Stream != null)
+else
+{
+//

svn commit: r1738183 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

2016-04-07 Thread jahewson
Author: jahewson
Date: Thu Apr  7 19:55:40 2016
New Revision: 1738183

URL: http://svn.apache.org/viewvc?rev=1738183=rev
Log:
PDFBOX-3305: Add method to allow drawing of image with custom matrix

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java?rev=1738183=1738182=1738183=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
 Thu Apr  7 19:55:40 2016
@@ -614,6 +614,33 @@ public final class PDPageContentStream i
 }
 
 /**
+ * Draw an image at the origin with the given transformation matrix.
+ *
+ * @param image The image to draw.
+ * @param matrix The transformation matrix to apply to the image.
+ *
+ * @throws IOException If there is an error writing to the stream.
+ * @throws IllegalStateException If the method was called within a text 
block.
+ */
+public void drawImage(PDImageXObject image, Matrix matrix) throws 
IOException
+{
+if (inTextMode)
+{
+throw new IllegalStateException("Error: drawImage is not allowed 
within a text block.");
+}
+
+saveGraphicsState();
+
+AffineTransform transform = matrix.createAffineTransform();
+transform(new Matrix(transform));
+
+writeOperand(resources.add(image));
+writeOperator("Do");
+
+restoreGraphicsState();
+}
+
+/**
  * Draw an inline image at the x,y coordinates, with the default size of 
the image.
  *
  * @param inlineImage The inline image to draw.




pdfbox-docs git commit: remove dead links, add semanticscholar.org

2016-01-26 Thread jahewson
Repository: pdfbox-docs
Updated Branches:
  refs/heads/master 8f22f405f -> 460b2396a


remove dead links, add semanticscholar.org


Project: http://git-wip-us.apache.org/repos/asf/pdfbox-docs/repo
Commit: http://git-wip-us.apache.org/repos/asf/pdfbox-docs/commit/460b2396
Tree: http://git-wip-us.apache.org/repos/asf/pdfbox-docs/tree/460b2396
Diff: http://git-wip-us.apache.org/repos/asf/pdfbox-docs/diff/460b2396

Branch: refs/heads/master
Commit: 460b2396ab7b62ffe50dd79ec30a005992515cd8
Parents: 8f22f40
Author: John Hewson 
Authored: Tue Jan 26 11:38:18 2016 -0800
Committer: John Hewson 
Committed: Tue Jan 26 11:38:18 2016 -0800

--
 content/references.md | 22 --
 1 file changed, 8 insertions(+), 14 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/pdfbox-docs/blob/460b2396/content/references.md
--
diff --git a/content/references.md b/content/references.md
index b2ff0ce..287cf54 100644
--- a/content/references.md
+++ b/content/references.md
@@ -25,35 +25,29 @@ title:   External Links
 This page lists projects that utilize PDFBox and articles that have been 
written about PDFBox. 
 Please file an [improvement 
issue](https://issues.apache.org/jira/browse/PDFBOX) to get new projects or 
articles added to this page, or to update the information on existing links.
 
-## Projects
+## Projects using PDFBox
 
 | Project Name | License | Project Description |
 | --- | --- | --- |
 | [Alfresco](http://www.alfresco.org/) | LGPL - commercial 
services/support/training is available | Alfresco is an open source, 
open-standards content repository built by the most experienced content 
management team that includes the co-founder of Documentum.|
-| [Apache Nutch](http://nutch.apache.org/) | Apache License V2.0 | Apache 
Nutch is open source web-search software. It builds on Apache Lucene, adding 
web-specifics, such as a crawler, a link-graph database, parsers for HTML and 
other document formats, etc.|
-| [Apache Tika](http://tika.apache.org/) | Apache License V2.0 | Apache Tika 
is a toolkit for detecting and extracting metadata and structured text content 
from various documents using existing parser libraries.|
-| [Centric CRM](http://www.centriccrm.com/) | Free To Use But 
Restricted/Commercial | The Most Advanced Open Source CRM Software.|
+| [Apache Nutch](http://nutch.apache.org/) | Apache License v2 | Apache Nutch 
is open source web-search software. It builds on Apache Lucene, adding 
web-specifics, such as a crawler, a link-graph database, parsers for HTML and 
other document formats, etc.|
+| [Apache Tika](http://tika.apache.org/) | Apache License v2 | Apache Tika is 
a toolkit for detecting and extracting metadata and structured text content 
from various documents using existing parser libraries.|
 | [Canoo Webtest](http://webtest.canoo.com/webtest/manual/WebTestHome.html) | 
BSD Like | Free OpenSource tool for XP-style acceptance testing of Java-based 
Web applications.|
-| [contineo](http://webtest.canoo.com/webtest/manual/WebTestHome.html) | GPL | 
Contineo is a web based document management system.|
 | [ECM REWOO Scope](http://www.rewoo.de/) | Commercial | REWOO Scope is an 
Enterprise Content Management (ECM) software to organize, structure and 
consolidate enterprise data. Apache PDFBox is an integral part to read and 
index PDF documents.|
-| [Jahia](http://www.jahia.org/) | collaborative source license | The Jahia 
product is currently the most powerful, ready-to-use and affordable integrated 
midrange Java Content Management and Corporate Portal Server.|
-| [jLibrary](http://jlibrary.sourceforge.net/) | BSD | jLibrary is a Document 
Management System, oriented for personal and enterprise use.|
 | [Jomic](http://jomic.sourceforge.net/) | GPL | Jomic is a viewer for comic 
book archives.|
-| [JpdfUnit](http://jpdfunit.sourceforge.net/) | Apache License V2.0 | pdfUnit 
is a framework for testing a generated pdf document with the JUnit Test 
Framework.|
+| [JpdfUnit](http://jpdfunit.sourceforge.net/) | Apache License v2 | pdfUnit 
is a framework for testing a generated pdf document with the JUnit Test 
Framework.|
 | [Liferay Portal](http://www.liferay.com/) | MIT | Liferay Portal is an open 
source portal that helps organizations collaborate more efficiently by 
providing a consolidated view of disparate applications.|
-| [LIUS](http://www.bibl.ulaval.ca/lius/index.en.html) | GPL | LIUS is an 
indexing Java framework based on the Jakarta Lucene project. The LIUS framework 
adds to Lucene many files format indexing fonctionalities as: Ms World, Ms 
Excel, Ms PowerPoint, RTF, PDF, XML, HTML, TXT, Open Office suite and 
JavaBeans.|
 | [LuceGene](http://gmod.org/wiki/LuceGene) | Artistic License | LuceGene is 
an open-source document/object 

svn commit: r1719506 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: ./ encoding/

2015-12-11 Thread jahewson
Author: jahewson
Date: Fri Dec 11 19:35:53 2015
New Revision: 1719506

URL: http://svn.apache.org/viewvc?rev=1719506=rev
Log:
PDFBOX-3152: catch cases where the font's Encoding does not contain a given 
character

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.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/PDType1CFont.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/BuiltInEncoding.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/MacRomanEncoding.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/StandardEncoding.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Type1Encoding.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/WinAnsiEncoding.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java?rev=1719506=1719505=1719506=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 Fri Dec 11 19:35:53 2015
@@ -18,7 +18,6 @@ package org.apache.pdfbox.pdmodel.font;
 
 import java.awt.geom.GeneralPath;
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -169,28 +168,6 @@ public abstract class PDSimpleFont exten
 {
 return glyphList;
 }
-
-/**
- * Inverts the font's Encoding. Any duplicate (Name -> Code) mappings will 
be lost.
- */
-protected Map<String, Integer> getInvertedEncoding()
-{
-if (invertedEncoding != null)
-{
-return invertedEncoding;
-}
-
-invertedEncoding = new HashMap<String, Integer>();
-Map<Integer, String> codeToName = encoding.getCodeToNameMap();
-for (Map.Entry<Integer, String> entry : codeToName.entrySet())
-{
-if (!invertedEncoding.containsKey(entry.getValue()))
-{
-invertedEncoding.put(entry.getValue(), entry.getKey());
-}
-}
-return invertedEncoding;
-}
 
 /**
  * Returns true the font is a symbolic (that is, it does not use the Adobe 
Standard Roman

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=1719506=1719505=1719506=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
 Fri Dec 11 19:35:53 2015
@@ -351,16 +351,17 @@ public class PDTrueTypeFont extends PDSi
 @Override
 protected byte[] encode(int unicode) throws IOException
 {
-if (getEncoding() != null)
+if (encoding != null)
 {
-if 
(!getEncoding().contains(getGlyphList().codePointToName(unicode)))
+if (!encoding.contains(getGlyphList().codePointToName(unicode)))
 {
 throw new IllegalArgumentException(
-String.format("U+%04X is not available in this font's 
Encoding", unicode));
+String.format("U+%04X is not available in this font's 
encoding: %s",
+  unicode, encoding.getEncodingName()));
 }
 
 String name = getGlyphList().codePointToName(unicode);
-Map<String, Integer> inverted = getInvertedEncoding();
+Map<String, Integer> inverted = encoding.getNameToCodeMap();
 
 if (!ttf.hasGlyph(name))
 {

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java?rev=1719506=1719505=1719506=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
 (original)
+++ 

svn commit: r1719530 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java

2015-12-11 Thread jahewson
Author: jahewson
Date: Fri Dec 11 20:17:17 2015
New Revision: 1719530

URL: http://svn.apache.org/viewvc?rev=1719530=rev
Log:
PDFBOX-3152: catch cases where the font's Encoding does not contain a given 
character (fix)

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java?rev=1719530=1719529=1719530=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
 Fri Dec 11 20:17:17 2015
@@ -59,7 +59,8 @@ public class DictionaryEncoding extends
 throw new IllegalArgumentException("Invalid encoding: " + 
baseEncoding);
 }
 
-codeToName.putAll( this.baseEncoding.codeToName );
+codeToName.putAll(this.baseEncoding.codeToName);
+inverted.putAll(this.baseEncoding.inverted);
 applyDifferences();
 }
 
@@ -116,7 +117,8 @@ public class DictionaryEncoding extends
 }
 baseEncoding = base;
 
-codeToName.putAll( baseEncoding.codeToName );
+codeToName.putAll(baseEncoding.codeToName);
+inverted.putAll(baseEncoding.inverted);
 applyDifferences();
 }
 




svn commit: r1719489 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel: PDDocument.java PDPageTree.java

2015-12-11 Thread jahewson
Author: jahewson
Date: Fri Dec 11 18:41:27 2015
New Revision: 1719489

URL: http://svn.apache.org/viewvc?rev=1719489=rev
Log:
PDFBOX-3154: repair bad single-page page trees

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1719489=1719488=1719489=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java 
Fri Dec 11 18:41:27 2015
@@ -1154,7 +1154,11 @@ public class PDDocument implements Close
 return getDocumentCatalog().getPages().get(pageIndex);
 }
 
-// todo: new!
+/**
+ * Returns the page tree.
+ * 
+ * @return the page tree
+ */
 public PDPageTree getPages()
 {
 return getDocumentCatalog().getPages();

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java?rev=1719489=1719488=1719489=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java 
Fri Dec 11 18:41:27 2015
@@ -59,12 +59,7 @@ public class PDPageTree implements COSOb
  */
 public PDPageTree(COSDictionary root)
 {
-if (root == null)
-{
-throw new IllegalArgumentException("root cannot be null");
-}
-this.root = root;
-document = null;
+this(root, null);
 }
 
 /**
@@ -79,7 +74,19 @@ public class PDPageTree implements COSOb
 {
 throw new IllegalArgumentException("root cannot be null");
 }
-this.root = root;
+// repair bad PDFs which contain a Page dict instead of a page tree, 
see PDFBOX-3154
+if (COSName.PAGE.equals(root.getCOSName(COSName.TYPE)))
+{
+COSArray kids = new COSArray();
+kids.add(root);
+this.root = new COSDictionary();
+this.root.setItem(COSName.KIDS, kids);
+this.root.setInt(COSName.COUNT, 1);
+}
+else
+{
+this.root = root;
+}
 this.document = document;
 }
 




svn commit: r1717659 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java

2015-12-02 Thread jahewson
Author: jahewson
Date: Wed Dec  2 17:09:10 2015
New Revision: 1717659

URL: http://svn.apache.org/viewvc?rev=1717659=rev
Log:
PDFBOX-3144: throw exception if font to embed has no cmap

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java

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=1717659=1717658=1717659=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 
Wed Dec  2 17:09:10 2015
@@ -524,7 +524,14 @@ public class TrueTypeFont implements Fon
 CmapTable cmapTable = getCmap();
 if (cmapTable == null)
 {
-return null;
+if (isStrict)
+{
+throw new IOException("The TrueType font does not contain a 
'cmap' table");
+}
+else
+{
+return null;
+}
 }
 
 CmapSubtable cmap = cmapTable.getSubtable(CmapTable.PLATFORM_UNICODE,




svn commit: r1717510 - in /pdfbox/trunk: fontbox/src/main/java/org/apache/fontbox/cff/ fontbox/src/main/java/org/apache/fontbox/ttf/ pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/

2015-12-01 Thread jahewson
Author: jahewson
Date: Tue Dec  1 20:08:46 2015
New Revision: 1717510

URL: http://svn.apache.org/viewvc?rev=1717510=rev
Log:
PDFBOX-3131: Expose CFF font data without storing it in memory

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java?rev=1717510=1717509=1717510=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java Tue 
Dec  1 20:08:46 2015
@@ -39,7 +39,7 @@ public abstract class CFFFont implements
 protected CFFCharset charset;
 protected final List<byte[]> charStrings = new ArrayList<byte[]>();
 protected List<byte[]> globalSubrIndex;
-private byte[] data;
+private CFFParser.ByteSource source;
 
 /**
  * The name of the font.
@@ -128,6 +128,22 @@ public abstract class CFFFont implements
 {
 return Collections.unmodifiableList(charStrings);
 }
+
+/**
+ * Sets a byte source to re-read the CFF data in the future.
+ */
+final void setData(CFFParser.ByteSource source)
+{
+this.source = source;
+}
+
+/**
+ * Returns the CFF data.
+ */
+public byte[] getData() throws IOException
+{
+return source.getBytes();
+}
 
 /**
  * Returns the number of charstrings in the font.

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java?rev=1717510=1717509=1717510=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java 
Tue Dec  1 20:08:46 2015
@@ -41,12 +41,39 @@ public class CFFParser
 private List nameIndex = null;
 private List<byte[]> topDictIndex = null;
 private List stringIndex = null;
+private ByteSource source;
 
 // for debugging only
-private String debugFontName; 
+private String debugFontName;
 
 /**
- * Parsing CFF Font using a byte array as input.
+ * Source from which bytes may be read in the future.
+ */
+public interface ByteSource
+{
+/**
+ * Returns the source bytes. May be called more than once.
+ */
+byte[] getBytes() throws IOException;
+}
+
+/**
+ * Parse CFF font using byte array, also passing in a byte source for 
future use.
+ * 
+ * @param bytes source bytes
+ * @param source source to re-read bytes from in the future
+ * @return the parsed CFF fonts
+ * @throws IOException If there is an error reading from the stream
+ */
+public List parse(byte[] bytes, ByteSource source) throws 
IOException
+{
+this.source = source;
+return parse(bytes);
+}
+
+/**
+ * Parse CFF font using a byte array as input.
+ * 
  * @param bytes the given byte array
  * @return the parsed CFF fonts
  * @throws IOException If there is an error reading from the stream
@@ -115,6 +142,7 @@ public class CFFParser
 {
 CFFFont font = parseFont(i);
 font.setGlobalSubrIndex(globalSubrIndex);
+font.setData(source);
 fonts.add(font);
 }
 return fonts;

Modified: 
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=1717510=1717509=1717510=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CFFTable.java Tue 
Dec  1 20:08:46 2015
@@ -50,7 +50,7 @@ public class CFFTable extends TTFTable
 byte[] bytes = data.read((int)getLength());
 
 CFFParser parser = new CFFParser();
-cffFont = parser.parse(bytes).get(0);
+cffFont = parser.parse(bytes, new ByteSource(font)).get(0);
 
 initialized = true;
 }
@@ -62,4 +62,23 @@ public class CFFTable extends TTFTable
 {
 return cffFont;
 }
+
+/**
+ * Allows bytes to be re

svn commit: r1717521 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java

2015-12-01 Thread jahewson
Author: jahewson
Date: Tue Dec  1 20:41:04 2015
New Revision: 1717521

URL: http://svn.apache.org/viewvc?rev=1717521=rev
Log:
PDFBOX-3145: Log error if file system cannot be read/written

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java

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=1717521=1717520=1717521=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
 Tue Dec  1 20:41:04 2015
@@ -26,6 +26,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
 import java.net.URI;
+import java.security.AccessControlException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -192,39 +193,45 @@ final class FileSystemFontProvider exten
 FileSystemFontProvider(FontCache cache)
 {
 this.cache = cache;
-
-if (LOG.isTraceEnabled())
+try
 {
-LOG.trace("Will search the local system for fonts");
-}
+if (LOG.isTraceEnabled())
+{
+LOG.trace("Will search the local system for fonts");
+}
 
-// scan the local system for font files
-List files = new ArrayList();
-FontFileFinder fontFileFinder = new FontFileFinder();
-List fonts = fontFileFinder.find();
-for (URI font : fonts)
-{
-files.add(new File(font));
-}
+// scan the local system for font files
+List files = new ArrayList();
+FontFileFinder fontFileFinder = new FontFileFinder();
+List fonts = fontFileFinder.find();
+for (URI font : fonts)
+{
+files.add(new File(font));
+}
 
-if (LOG.isTraceEnabled())
-{
-LOG.trace("Found " + files.size() + " fonts on the local system");
-}
-
-// load cached FontInfo objects
-List cachedInfos = loadDiskCache(files);
-if (cachedInfos != null && cachedInfos.size() > 0)
-{
-fontInfoList.addAll(cachedInfos);
+if (LOG.isTraceEnabled())
+{
+LOG.trace("Found " + files.size() + " fonts on the local 
system");
+}
+
+// load cached FontInfo objects
+List cachedInfos = loadDiskCache(files);
+if (cachedInfos != null && cachedInfos.size() > 0)
+{
+fontInfoList.addAll(cachedInfos);
+}
+else
+{
+LOG.warn("Building on-disk font cache, this may take a while");
+scanFonts(files);
+saveDiskCache();
+LOG.warn("Finished building on-disk font cache, found " +
+fontInfoList.size() + " fonts");
+}
 }
-else
+catch (AccessControlException e)
 {
-LOG.warn("Building on-disk font cache, this may take a while");
-scanFonts(files);
-saveDiskCache();
-LOG.warn("Finished building on-disk font cache, found " +
- fontInfoList.size() + " fonts");
+LOG.error("Error accessing the file system", e);
 }
 }
 




svn commit: r1717470 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: CIDFontMapping.java FontMapping.java

2015-12-01 Thread jahewson
Author: jahewson
Date: Tue Dec  1 17:13:26 2015
New Revision: 1717470

URL: http://svn.apache.org/viewvc?rev=1717470=rev
Log:
PDFBOX-3139: Make FontMapping public

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java?rev=1717470=1717469=1717470=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/CIDFontMapping.java
 Tue Dec  1 17:13:26 2015
@@ -29,8 +29,8 @@ import org.apache.fontbox.ttf.OpenTypeFo
 public final class CIDFontMapping extends FontMapping
 {
 private final FontBoxFont ttf;
-
-CIDFontMapping(OpenTypeFont font, FontBoxFont fontBoxFont, boolean 
isFallback)
+
+public CIDFontMapping(OpenTypeFont font, FontBoxFont fontBoxFont, boolean 
isFallback)
 {
 super(font, isFallback);
 this.ttf = fontBoxFont;

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java?rev=1717470=1717469=1717470=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapping.java
 Tue Dec  1 17:13:26 2015
@@ -28,8 +28,8 @@ public class FontMapping

svn commit: r1717478 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

2015-12-01 Thread jahewson
Author: jahewson
Date: Tue Dec  1 18:09:51 2015
New Revision: 1717478

URL: http://svn.apache.org/viewvc?rev=1717478=rev
Log:
PDFBOX-3131: Completely remove CFF data methods

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java?rev=1717478=1717477=1717478=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java Tue 
Dec  1 18:09:51 2015
@@ -128,26 +128,6 @@ public abstract class CFFFont implements
 {
 return Collections.unmodifiableList(charStrings);
 }
-
-/**
- * Sets the original data.
- *
- * @param data the original data.
- */
-void setData(byte[] data)
-{
-this.data = data;
-}
-
-/**
- * Returns the the original data.
- *
- * @return the dictionary
- */
-public byte[] getData()
-{
-return data;
-}
 
 /**
  * Returns the number of charstrings in the font.




svn commit: r1715396 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

2015-11-20 Thread jahewson
Author: jahewson
Date: Fri Nov 20 17:13:55 2015
New Revision: 1715396

URL: http://svn.apache.org/viewvc?rev=1715396=rev
Log:
PDFBOX-3106: Public access to charstring bytes (+ unmodifiable)

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java?rev=1715396=1715395=1715396=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java Fri 
Nov 20 17:13:55 2015
@@ -18,6 +18,7 @@ package org.apache.fontbox.cff;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -125,7 +126,7 @@ public abstract class CFFFont implements
  */
 public final List<byte[]> getCharStringBytes()
 {
-return charStrings;
+return Collections.unmodifiableList(charStrings);
 }
 
 /**




svn commit: r1715394 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

2015-11-20 Thread jahewson
Author: jahewson
Date: Fri Nov 20 17:12:42 2015
New Revision: 1715394

URL: http://svn.apache.org/viewvc?rev=1715394=rev
Log:
PDFBOX-3106: Public access to charstring bytes

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java?rev=1715394=1715393=1715394=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java Fri 
Nov 20 17:12:42 2015
@@ -119,11 +119,11 @@ public abstract class CFFFont implements
 }
 
 /**
- * Returns the character strings dictionary.
+ * Returns the character strings dictionary. For expert users only.
  *
  * @return the dictionary
  */
-List<byte[]> getCharStringBytes()
+public List<byte[]> getCharStringBytes()
 {
 return charStrings;
 }




svn commit: r1715395 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

2015-11-20 Thread jahewson
Author: jahewson
Date: Fri Nov 20 17:13:06 2015
New Revision: 1715395

URL: http://svn.apache.org/viewvc?rev=1715395=rev
Log:
PDFBOX-3106: Public access to charstring bytes (+ final)

Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java?rev=1715395=1715394=1715395=diff
==
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java Fri 
Nov 20 17:13:06 2015
@@ -123,7 +123,7 @@ public abstract class CFFFont implements
  *
  * @return the dictionary
  */
-public List<byte[]> getCharStringBytes()
+public final List<byte[]> getCharStringBytes()
 {
 return charStrings;
 }




svn commit: r1713007 - in /pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight: TestIsartor.java TestIsartorBavaria.java

2015-11-06 Thread jahewson
Author: jahewson
Date: Fri Nov  6 18:10:10 2015
New Revision: 1713007

URL: http://svn.apache.org/viewvc?rev=1713007=rev
Log:
PDFBOX-2610: Remove Isartor specific messages and names

Added:

pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartorBavaria.java
  - copied, changed from r1712842, 
pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java
Removed:

pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java

Copied: 
pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartorBavaria.java
 (from r1712842, 
pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java)
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartorBavaria.java?p2=pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartorBavaria.java=pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java=1712842=1713007=1713007=diff
==
--- 
pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartor.java
 (original)
+++ 
pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/TestIsartorBavaria.java
 Fri Nov  6 18:10:10 2015
@@ -21,10 +21,6 @@
 
 package org.apache.pdfbox.preflight;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -37,7 +33,6 @@ import java.util.List;
 import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
@@ -50,8 +45,13 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 @RunWith(Parameterized.class)
-public class TestIsartor
+public class TestIsartorBavaria
 {
 private static final String FILTER_FILE = "isartor.filter";
 private static final String SKIP_BAVARIA = "skip-bavaria";
@@ -165,7 +165,7 @@ public class TestIsartor
 private final Set expectedErrorSet;
 private final File file;
 
-public TestIsartor(File path, Set errorSet)
+public TestIsartorBavaria(File path, Set errorSet)
 {
 System.out.println("  " + path.getName());
 this.file = path;
@@ -205,7 +205,7 @@ public class TestIsartor
 }
 StringBuilder message = new StringBuilder();
 message.append(file.getName());
-message.append( " : Isartor file should be valid, but has 
error");
+message.append( " : PDF/A file should be valid, but has 
error");
 if (errorSet.size() > 1)
 {
 message.append('s');
@@ -221,7 +221,7 @@ public class TestIsartor
 }
 else
 {
-assertFalse(file.getName() + " : Isartor file should be 
invalid (expected " +
+assertFalse(file.getName() + " : PDF/A file should be invalid 
(expected " +
 this.expectedErrorSet + ")", result.isValid()); //TODO
 
 assertTrue(file.getName() + " : Should find at least one 
error",




svn commit: r1713006 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java

2015-11-06 Thread jahewson
Author: jahewson
Date: Fri Nov  6 18:09:29 2015
New Revision: 1713006

URL: http://svn.apache.org/viewvc?rev=1713006=rev
Log:
PDFBOX-2950: Allow CID to be used as GID when there are no other alternatives

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java

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=1713006=1713005=1713006=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
 Fri Nov  6 18:09:29 2015
@@ -291,7 +291,9 @@ public class PDCIDFontType2 extends PDCI
 if (unicode == null)
 {
 LOG.warn("Failed to find a character mapping for " + code 
+ " in " + getName());
-return 0;
+// Acrobat is willing to use the CID as a GID, even when 
the font isn't embedded
+// see PDFBOX-2599
+return codeToCID(code);
 }
 else if (unicode.length() > 1)
 {




svn commit: r1713005 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java

2015-11-06 Thread jahewson
Author: jahewson
Date: Fri Nov  6 18:08:52 2015
New Revision: 1713005

URL: http://svn.apache.org/viewvc?rev=1713005=rev
Log:
PDFBOX-2950: handle ROS cmap lookup differently

Modified:

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/PDType0Font.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java?rev=1713005=1713004=1713005=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
 Fri Nov  6 18:08:52 2015
@@ -227,13 +227,14 @@ public class PDType0Font extends PDFont
 // c) Construct a second CMap name by concatenating the ROS in the 
format "R-O-UCS2"
 // d) Obtain the CMap with the constructed name
 // e) Map the CID according to the CMap from step d), producing a 
Unicode value
-
+
+// todo: not sure how to interpret the PDF spec here, do we always 
override? or only when Identity-H/V?
 String strName = null;
-if (name == null && isDescendantCJK)
+if (isDescendantCJK)
 {
-strName = cMap.getRegistry() + "-" +
-  cMap.getOrdering() + "-" +
-  cMap.getSupplement();
+strName = descendantFont.getCIDSystemInfo().getRegistry() + 
"-" +
+  descendantFont.getCIDSystemInfo().getOrdering() + 
"-" +
+  descendantFont.getCIDSystemInfo().getSupplement();
 }
 else if (name != null)
 {




svn commit: r1713042 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java

2015-11-06 Thread jahewson
Author: jahewson
Date: Fri Nov  6 21:50:05 2015
New Revision: 1713042

URL: http://svn.apache.org/viewvc?rev=1713042=rev
Log:
PDFBOX-3001: use java.io.tmpdir as fallback location for font cache

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java

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=1713042=1713041=1713042=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
 Fri Nov  6 21:50:05 2015
@@ -261,6 +261,10 @@ final class FileSystemFontProvider exten
 if (path == null)
 {
 path = System.getProperty("user.home");
+if (path == null)
+{
+path = System.getProperty("java.io.tmpdir");
+}
 }
 return new File(path, ".pdfbox.cache");
 }




svn commit: r1712857 - /pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java

2015-11-05 Thread jahewson
Author: jahewson
Date: Thu Nov  5 19:51:46 2015
New Revision: 1712857

URL: http://svn.apache.org/viewvc?rev=1712857=rev
Log:
PDFBOX-3081: simplify code

Modified:

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java

Modified: 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java?rev=1712857=1712856=1712857=diff
==
--- 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java
 (original)
+++ 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java
 Thu Nov  5 19:51:46 2015
@@ -160,8 +160,7 @@ public class DrawPrintTextLocations exte
 
 // advance width, bbox height (glyph space)
 float xadvance = font.getWidth(text.getCharacterCodes()[0]); // 
todo: should iterate all chars
-rect = new Rectangle2D.Float(0, bbox.getLowerLeftY(), xadvance,
- bbox.getUpperRightY() - 
bbox.getLowerLeftY());
+rect = new Rectangle2D.Float(0, bbox.getLowerLeftY(), xadvance, 
bbox.getHeight());
 
 // glyph space -> user space
 // note: text.getTextMatrix() is *not* the Text Matrix, it's the 
Text Rendering Matrix




svn commit: r1712858 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: PDCIDFontType0.java PDCIDFontType2.java PDTrueTypeFont.java PDType1CFont.java PDType1Font.java

2015-11-05 Thread jahewson
Author: jahewson
Date: Thu Nov  5 19:52:34 2015
New Revision: 1712858

URL: http://svn.apache.org/viewvc?rev=1712858=rev
Log:
PDFBOX-3078: use FontBBox before falling back to embedded bbox

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.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/PDType1CFont.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java?rev=1712858=1712857=1712858=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
 Thu Nov  5 19:52:34 2015
@@ -34,6 +34,7 @@ import org.apache.fontbox.cff.Type2CharS
 import org.apache.fontbox.util.BoundingBox;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.io.IOUtils;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.util.Matrix;
 
@@ -191,6 +192,14 @@ public class PDCIDFontType0 extends PDCI
 @Override
 public BoundingBox getBoundingBox()
 {
+if (getFontDescriptor() != null) {
+PDRectangle bbox = getFontDescriptor().getFontBoundingBox();
+if (bbox.getLowerLeftX() != 0 || bbox.getLowerLeftY() != 0 ||
+bbox.getUpperRightX() != 0 || bbox.getUpperRightY() != 0) {
+return new BoundingBox(bbox.getLowerLeftX(), 
bbox.getLowerLeftY(),
+   bbox.getUpperRightX(), 
bbox.getUpperRightY());
+}
+}
 if (cidFont != null)
 {
 return cidFont.getFontBBox();

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=1712858=1712857=1712858=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
 Thu Nov  5 19:52:34 2015
@@ -37,6 +37,7 @@ import org.apache.pdfbox.cos.COSDictiona
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.io.IOUtils;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.util.Matrix;
 
@@ -202,6 +203,14 @@ public class PDCIDFontType2 extends PDCI
 @Override
 public BoundingBox getBoundingBox() throws IOException
 {
+if (getFontDescriptor() != null) {
+PDRectangle bbox = getFontDescriptor().getFontBoundingBox();
+if (bbox.getLowerLeftX() != 0 || bbox.getLowerLeftY() != 0 ||
+bbox.getUpperRightX() != 0 || bbox.getUpperRightY() != 0) {
+return new BoundingBox(bbox.getLowerLeftX(), 
bbox.getLowerLeftY(),
+   bbox.getUpperRightX(), 
bbox.getUpperRightY());
+}
+}
 return ttf.getFontBBox();
 }
 

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=1712858=1712857=1712858=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
 Thu Nov  5 19:52:34 2015
@@ -36,6 +36,7 @@ import org.apache.fontbox.util.BoundingB
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.pdmodel.font.encoding.BuiltInEncoding;
 import org.apache.pdfbox.pdmodel.font.encoding.Encoding;
@@ -300,6 +301,11 @@ public class PDTrueTypeFont extends PDSi
 @Override
 public BoundingBox getBoundingBox() throws IOException
 {
+if (getFontDescriptor() != null) {
+PDRectangle bbox = getFontDescriptor().getFontBoundingBox();
+return new BoundingBox

svn commit: r1712888 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java

2015-11-05 Thread jahewson
Author: jahewson
Date: Fri Nov  6 00:37:41 2015
New Revision: 1712888

URL: http://svn.apache.org/viewvc?rev=1712888=rev
Log:
PDFBOX-2931: make centering printed content optional

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java?rev=1712888=1712887=1712888=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java 
Fri Nov  6 00:37:41 2015
@@ -46,6 +46,7 @@ public final class PDFPrintable implemen
 private final boolean showPageBorder;
 private final Scaling scaling;
 private final float dpi;
+private final boolean center;
 
 /**
  * Creates a new PDFPrintable.
@@ -91,11 +92,28 @@ public final class PDFPrintable implemen
  */
 public PDFPrintable(PDDocument document, Scaling scaling, boolean 
showPageBorder, float dpi)
 {
+this(document, scaling, showPageBorder, dpi, true);
+}
+
+/**
+ * Creates a new PDFPrintable with the given page scaling and with 
optional page borders shown.
+ * The image will be rasterized at the given DPI before being sent to the 
printer.
+ *
+ * @param document the document to print
+ * @param scaling page scaling policy
+ * @param showPageBorder true if page borders are to be printed
+ * @param dpi if non-zero then the image will be rasterized at the given 
DPI
+ * @param center true if the content is to be centered on the page 
(otherwise top-left).
+ */
+public PDFPrintable(PDDocument document, Scaling scaling, boolean 
showPageBorder, float dpi,
+boolean center)
+{
 this.document = document;
 this.renderer = new PDFRenderer(document);
 this.scaling = scaling;
 this.showPageBorder = showPageBorder;
 this.dpi = dpi;
+this.center = center;
 }
 
 @Override
@@ -136,8 +154,11 @@ public final class PDFPrintable implemen
 graphics2D.translate(pageFormat.getImageableX(), 
pageFormat.getImageableY());
 
 // center on page
-graphics2D.translate((imageableWidth - cropBox.getWidth() * scale) 
/ 2,
-(imageableHeight - cropBox.getHeight() * scale) / 2);
+if (center)
+{
+graphics2D.translate((imageableWidth - cropBox.getWidth() * 
scale) / 2,
+ (imageableHeight - cropBox.getHeight() * 
scale) / 2);
+}
 
 // rasterize to bitmap (optional)
 Graphics2D printerGraphics = null;




svn commit: r1712887 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing: PDFPageable.java PDFPrintable.java

2015-11-05 Thread jahewson
Author: jahewson
Date: Fri Nov  6 00:26:02 2015
New Revision: 1712887

URL: http://svn.apache.org/viewvc?rev=1712887=rev
Log:
PDFBOX-2930: printing support for rotated documents

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java?rev=1712887=1712886=1712887=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java 
Fri Nov  6 00:26:02 2015
@@ -104,7 +104,7 @@ public final class PDFPageable extends B
 public PageFormat getPageFormat(int pageIndex)
 {
 PDPage page = document.getPage(pageIndex);
-PDRectangle mediaBox = page.getMediaBox();
+PDRectangle mediaBox = PDFPrintable.getRotatedMediaBox(page);
 PDRectangle cropBox = PDFPrintable.getRotatedCropBox(page);
 
 // Java does not seem to understand landscape paper sizes, i.e. where 
width > height, it

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java?rev=1712887=1712886=1712887=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java 
Fri Nov  6 00:26:02 2015
@@ -210,4 +210,25 @@ public final class PDFPrintable implemen
 return cropBox;
 }
 }
+
+/**
+ * This will find the MediaBox with rotation applied, for this page by 
looking up the hierarchy
+ * until it finds them.
+ *
+ * @return The MediaBox at this level in the hierarchy.
+ */
+static PDRectangle getRotatedMediaBox(PDPage page)
+{
+PDRectangle mediaBox = page.getMediaBox();
+int rotationAngle = page.getRotation();
+if (rotationAngle == 90 || rotationAngle == 270)
+{
+return new PDRectangle(mediaBox.getLowerLeftY(), 
mediaBox.getLowerLeftX(),
+   mediaBox.getHeight(), mediaBox.getWidth());
+}
+else
+{
+return mediaBox;
+}
+}
 }




svn commit: r1712879 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: cos/COSName.java pdmodel/font/PDCIDFontType2.java pdmodel/font/PDType0Font.java

2015-11-05 Thread jahewson
Author: jahewson
Date: Fri Nov  6 00:01:55 2015
New Revision: 1712879

URL: http://svn.apache.org/viewvc?rev=1712879=rev
Log:
PDFBOX-2950: follow PDF spec rules for glyph mapping via CMap -> cmap

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.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/PDType0Font.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=1712879=1712878=1712879=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Fri 
Nov  6 00:01:55 2015
@@ -275,6 +275,7 @@ public final class COSName extends COSBa
 public static final COSName ID_TREE = new COSName("IDTree");
 public static final COSName IDENTITY = new COSName("Identity");
 public static final COSName IDENTITY_H = new COSName("Identity-H");
+public static final COSName IDENTITY_V = new COSName("Identity-V");
 public static final COSName IF = new COSName("IF");
 public static final COSName IM = new COSName("IM");
 public static final COSName IMAGE = new COSName("Image");

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=1712879=1712878=1712879=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
 Fri Nov  6 00:01:55 2015
@@ -283,21 +283,13 @@ public class PDCIDFontType2 extends PDCI
 // font's 'cmap' table. The means by which this is accomplished 
are implementation-
 // dependent.
 
-boolean hasUnicodeMap = parent.getCMapUCS2() != null;
-
 if (cid2gid != null)
 {
 // Acrobat allows non-embedded GIDs - todo: can we find a test 
PDF for this?
+LOG.warn("Using non-embedded GIDs in font " + getName());
 int cid = codeToCID(code);
 return cid2gid[cid];
 }
-else if (hasIdentityCid2Gid || !hasUnicodeMap)
-{
-// same as above, but for the default Identity CID2GIDMap or 
when there is no
-// ToUnicode CMap to fallback to, see PDFBOX-2599 and 
PDFBOX-2560
-// todo: can we find a test PDF for the Identity case?
-return codeToCID(code);
-}
 else
 {
 // fallback to the ToUnicode CMap, test with PDFBOX-1422 and 
PDFBOX-2560

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=1712879=1712878=1712879=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
 Fri Nov  6 00:01:55 2015
@@ -215,42 +215,35 @@ public class PDType0Font extends PDFont
  */
 private void fetchCMapUCS2() throws IOException
 {
-// if the font is composite and uses a predefined cmap (excluding 
Identity-H/V) then
-// or if its decendant font uses Adobe-GB1/CNS1/Japan1/Korea1
-if (isCMapPredefined)
+// if the font is composite and uses a predefined cmap (excluding 
Identity-H/V)
+// or whose descendant CIDFont uses the Adobe-GB1, Adobe-CNS1, 
Adobe-Japan1, or
+// Adobe-Korea1 character collection:
+COSName name = dict.getCOSName(COSName.ENCODING);
+if (isCMapPredefined && !(name == COSName.IDENTITY_H || name == 
COSName.IDENTITY_V) ||
+isDescendantCJK)
 {
 // a) Map the character code to a CID using the font's CMap
 // b) Obtain the ROS from the font's CIDSystemInfo
 // c) Construct a second CMap name by concatenating the ROS in the 
format "R-O-UCS2"
 // d) Obtain the CMap with the constructed name
 // e) Map the CID according to the CMap from step d), producing a 
Unicode value
-
-String cMapName = null;
-
-// get the encoding CMap
-COSBas

svn commit: r1712883 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java

2015-11-05 Thread jahewson
Author: jahewson
Date: Fri Nov  6 00:09:09 2015
New Revision: 1712883

URL: http://svn.apache.org/viewvc?rev=1712883=rev
Log:
PDFBOX-2950: clean up

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java

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=1712883=1712882=1712883=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
 Fri Nov  6 00:09:09 2015
@@ -52,8 +52,6 @@ public class PDCIDFontType2 extends PDCI
 
 private final TrueTypeFont ttf;
 private final int[] cid2gid;
-private final Map<Integer, Integer> gid2cid;
-private final boolean hasIdentityCid2Gid;
 private final boolean isEmbedded;
 private final boolean isDamaged;
 private final CmapSubtable cmap; // may be null
@@ -182,11 +180,7 @@ public class PDCIDFontType2 extends PDCI
 ttf = ttfFont;
 }
 cmap = ttf.getUnicodeCmap(false);
-
 cid2gid = readCIDToGIDMap();
-gid2cid = invert(cid2gid);
-COSBase map = dict.getDictionaryObject(COSName.CID_TO_GID_MAP);
-hasIdentityCid2Gid = map instanceof COSName && ((COSName) 
map).getName().equals("Identity");
 }
 
 @Override




svn commit: r1712872 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: FileSystemFontProvider.java FontCache.java PDPanoseClassification.java

2015-11-05 Thread jahewson
Author: jahewson
Date: Thu Nov  5 21:53:56 2015
New Revision: 1712872

URL: http://svn.apache.org/viewvc?rev=1712872=rev
Log:
PDFBOX-3001: write on-disk font cache to a custom file

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontCache.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDPanoseClassification.java

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=1712872=1712871=1712872=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
 Thu Nov  5 21:53:56 2015
@@ -16,19 +16,20 @@
  */
 package org.apache.pdfbox.pdmodel.font;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
-import java.util.prefs.Preferences;
+import java.util.Set;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.fontbox.FontBoxFont;
@@ -52,8 +53,6 @@ import org.apache.pdfbox.util.Charsets;
  */
 final class FileSystemFontProvider extends FontProvider
 {
-private static final long serialVersionUID = 1;
-
 private static final Log LOG = 
LogFactory.getLog(FileSystemFontProvider.class);
 
 private final List fontInfoList = new ArrayList();
@@ -213,16 +212,18 @@ final class FileSystemFontProvider exten
 }
 
 // load cached FontInfo objects
-List cachedInfos = loadCache(files);
+List cachedInfos = loadDiskCache(files);
 if (cachedInfos != null && cachedInfos.size() > 0)
 {
 fontInfoList.addAll(cachedInfos);
 }
 else
 {
-LOG.warn("Building font cache, this may take a while");
+LOG.warn("Building on-disk font cache, this may take a while");
 scanFonts(files);
-saveCache();
+saveDiskCache();
+LOG.warn("Finished building on-disk font cache, found " +
+ fontInfoList.size() + " fonts");
 }
 }
 
@@ -253,80 +254,181 @@ final class FileSystemFontProvider exten
 }
 }
 }
-
-private void saveCache()
+
+private File getDiskCacheFile()
 {
-// Get the preferences database for this package.
-Preferences prefs = 
Preferences.userNodeForPackage(FileSystemFontProvider.class);
+String path = System.getProperty("pdfbox.fontcache");
+if (path == null)
+{
+path = System.getProperty("user.home");
+}
+return new File(path, ".pdfbox.cache");
+}
 
-// To save, write the object to a byte array.
+/**
+ * Saves the font metadata cache to disk.
+ */
+private void saveDiskCache()
+{
+BufferedWriter writer = null;
 try
 {
+File file = getDiskCacheFile();
+writer = new BufferedWriter(new FileWriter(file));
+
 for (FSFontInfo fontInfo : fontInfoList)
 {
-String path = fontInfo.file.getAbsolutePath();
-// PDFBOX-3014: do not cache ttc files because file:font is a 
1:N relationship
-if (path.toLowerCase().endsWith(".ttc") || 
path.toLowerCase().endsWith(".otc"))
-{
-// remove .ttc files from older versions
-prefs.remove(path);
-continue;
-}
-ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
-ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
-// write it to the stream
-objectOut.writeObject(fontInfo);
-prefs.putByteArray(path, byteOut.toByteArray());
+writer.write(fontInfo.postScriptName);
+writer.write("|");
+writer.write(fontInfo.format.toString());
+writer.write("|");
+if

svn commit: r1712132 - /pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java

2015-11-02 Thread jahewson
Author: jahewson
Date: Mon Nov  2 20:02:59 2015
New Revision: 1712132

URL: http://svn.apache.org/viewvc?rev=1712132=rev
Log:
PDFBOX-3081: corrections to bbox bounds

Modified:

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java

Modified: 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java?rev=1712132=1712131=1712132=diff
==
--- 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java
 (original)
+++ 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java
 Mon Nov  2 20:02:59 2015
@@ -19,7 +19,8 @@ package org.apache.pdfbox.examples.util;
 import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Graphics2D;
-import java.awt.geom.Point2D;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
@@ -32,6 +33,7 @@ import javax.imageio.ImageIO;
 import org.apache.fontbox.util.BoundingBox;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType3Font;
 import org.apache.pdfbox.rendering.PDFRenderer;
 import org.apache.pdfbox.text.PDFTextStripper;
 import org.apache.pdfbox.text.TextPosition;
@@ -155,17 +157,35 @@ public class DrawPrintTextLocations exte
 // usually, the height is identical to what you see when marking 
text in Adobe Reader
 PDFont font = text.getFont();
 BoundingBox bbox = font.getBoundingBox();
-Point2D.Float p1 = 
font.getFontMatrix().transformPoint(bbox.getLowerLeftX(), bbox.getLowerLeftY());
-Point2D.Float p2 = 
font.getFontMatrix().transformPoint(bbox.getUpperRightX(), 
bbox.getUpperRightY());
 
-rect = new Rectangle2D.Float(
-text.getXDirAdj(),
-(text.getYDirAdj() - p2.y * text.getYScale()),
-text.getWidthDirAdj(),
-(p2.y - p1.y) * text.getYScale());
-g2d.setColor(Color.blue);
-g2d.draw(rect);
+// advance width, bbox height (glyph space)
+float xadvance = font.getWidth(text.getCharacterCodes()[0]); // 
todo: should iterate all chars
+rect = new Rectangle2D.Float(0, bbox.getLowerLeftY(), xadvance,
+ bbox.getUpperRightY() - 
bbox.getLowerLeftY());
+
+// glyph space -> user space
+// note: text.getTextMatrix() is *not* the Text Matrix, it's the 
Text Rendering Matrix
+AffineTransform at = text.getTextMatrix().createAffineTransform();
+if (font instanceof PDType3Font)
+{
+// bbox and font matrix are unscaled
+at.concatenate(font.getFontMatrix().createAffineTransform());
+}
+else
+{
+// bbox and font matrix are already scaled to 1000
+at.scale(1/1000f, 1/1000f);
+}
+Shape s = at.createTransformedShape(rect);
 
+// flip y-axis
+AffineTransform flip = new AffineTransform();
+flip.translate(0, getCurrentPage().getBBox().getHeight());
+flip.scale(1, -1);
+s = flip.createTransformedShape(s);
+
+g2d.setColor(Color.blue);
+g2d.draw(s);
 }
 }
 




svn commit: r1711314 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java

2015-10-29 Thread jahewson
Author: jahewson
Date: Thu Oct 29 18:17:44 2015
New Revision: 1711314

URL: http://svn.apache.org/viewvc?rev=1711314=rev
Log:
PDFBOX-3046: ensure that DPI is > 0

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java?rev=1711314=1711313=1711314=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPrintable.java 
Thu Oct 29 18:17:44 2015
@@ -96,6 +96,10 @@ public final class PDFPrintable implemen
 this.scaling = scaling;
 this.showPageBorder = showPageBorder;
 this.dpi = dpi;
+if (dpi <= 0)
+{
+throw new IllegalArgumentException("DPI must be greater than 
zero");
+}
 }
 
 @Override




svn commit: r1711182 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java

2015-10-29 Thread jahewson
Author: jahewson
Date: Thu Oct 29 06:02:42 2015
New Revision: 1711182

URL: http://svn.apache.org/viewvc?rev=1711182=rev
Log:
PDFBOX-2966: fix calculation of CIDFont widths

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java?rev=1711182=1711181=1711182=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java 
Thu Oct 29 06:02:42 2015
@@ -242,15 +242,7 @@ public abstract class PDCIDFont implemen
 float w0;
 if (widths.containsKey(cid))
 {
-Float w = widths.get(cid);
-if (w != null)
-{
-w0 = w;
-}
-else
-{
-w0 = getDefaultWidth();
-}
+w0 = widths.get(cid);
 }
 else
 {
@@ -304,23 +296,15 @@ public abstract class PDCIDFont implemen
 // these widths are supposed to be consistent with the actual widths 
given in the CIDFont
 // program, but PDFBOX-563 shows that when they are not, Acrobat 
overrides the embedded
 // font widths with the widths given in the font dictionary
-
+
 int cid = codeToCID(code);
 if (widths.containsKey(cid))
 {
-Float w = widths.get(cid);
-if (w != null)
-{
-return w;
-}
-else
-{
-return getDefaultWidth();
-}
+return widths.get(cid);
 }
 else
 {
-return getWidthFromFont(code);
+return getDefaultWidth();
 }
 }
 




svn commit: r1711181 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java

2015-10-28 Thread jahewson
Author: jahewson
Date: Thu Oct 29 05:48:04 2015
New Revision: 1711181

URL: http://svn.apache.org/viewvc?rev=1711181=rev
Log:
PDFBOX-3062: Deprecate PDFont#getHeight()

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java?rev=1711181=1711180=1711181=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFontLike.java
 Thu Oct 29 05:48:04 2015
@@ -61,14 +61,26 @@ public interface PDFontLike
 
 /**
  * Returns the height of the given character, in glyph space. This can be 
expensive to
- * calculate. Results are only approximate.
- *
+ * calculate. Results are only approximate.
+ * 
+ * Warning: This method is deprecated in PDFBox 2.0 because there is no 
meaningful value
+ * which it can return. The {@link #getWidth} method returns the advance 
width of a glyph,
+ * but there is no corresponding advance height. The logical height of a 
character is the same
+ * for every character in a font, so if you want that, retrieve the font 
bbox's height. 
+ * Otherwise if you want the visual bounds of the glyph then call 
getPath(..) on the appropriate
+ * PDFont subclass to retrieve the glyph outline as a GeneralPath.
+ * 
  * @param code character code
+ * @deprecated Use {@link #getBoundingBox().getHeight()} instead.
  */
+@Deprecated
 float getHeight(int code) throws IOException;
 
 /**
- * Returns the advance width of the given character, in glyph space.
+ * Returns the advance width of the given character, in glyph space.
+ * 
+ * If you want the visual bounds of the glyph then call getPath(..) on the 
appropriate
+ * PDFont subclass to retrieve the glyph outline as a GeneralPath instead.
  *
  * @param code character code
  */




svn commit: r1708881 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java

2015-10-15 Thread jahewson
Author: jahewson
Date: Thu Oct 15 19:50:23 2015
New Revision: 1708881

URL: http://svn.apache.org/viewvc?rev=1708881=rev
Log:
PDFBOX-2943: Default width of zero for missing Type 3 glyphs is correct

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java?rev=1708881=1708880=1708881=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
 Thu Oct 15 19:50:23 2015
@@ -19,8 +19,6 @@ package org.apache.pdfbox.pdmodel.font;
 import java.awt.geom.GeneralPath;
 import java.io.IOException;
 import java.io.InputStream;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.fontbox.FontBoxFont;
 import org.apache.fontbox.util.BoundingBox;
 import org.apache.pdfbox.cos.COSArray;
@@ -42,8 +40,6 @@ import org.apache.pdfbox.util.Vector;
  */
 public class PDType3Font extends PDSimpleFont
 {
-private static final Log LOG = LogFactory.getLog(PDType3Font.class);
-
 private PDResources resources;
 private COSDictionary charProcs;
 private Matrix fontMatrix;
@@ -131,7 +127,6 @@ public class PDType3Font extends PDSimpl
 }
 else
 {
-LOG.warn("No width for glyph " + code + " in font " + 
getName() + ", using width from font");
 return getWidthFromFont(code);
 }
 }
@@ -143,7 +138,6 @@ public class PDType3Font extends PDSimpl
 PDType3CharProc charProc = getCharProc(code);
 if (charProc == null)
 {
-LOG.warn("No CharProc for glyph " + code + " found, returning 0");
 return 0;
 }
 return charProc.getWidth();




svn commit: r1705766 - /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java

2015-09-28 Thread jahewson
Author: jahewson
Date: Mon Sep 28 20:38:11 2015
New Revision: 1705766

URL: http://svn.apache.org/viewvc?rev=1705766=rev
Log:
PDFBOX-2905: Make page view the default

Modified:
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java

Modified: 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java?rev=1705766=1705765=1705766=diff
==
--- 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java 
(original)
+++ 
pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java 
Mon Sep 28 20:38:11 2015
@@ -117,7 +117,7 @@ public class PDFDebugger extends JFrame
  COSName.CALRGB, COSName.LAB));
 
 private static final String PASSWORD = "-password";
-private static final String VIEWPAGES = "-viewpages";
+private static final String VIEW_STRUCTURE = "-viewstructure";
 
 private static final int SHORCUT_KEY_MASK =
 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
@@ -1087,7 +1087,7 @@ public class PDFDebugger extends JFrame
 // open file, if any
 String filename = null;
 String password = "";
-boolean viewPages = false;
+boolean viewPages = true;
 
 for( int i = 0; i < args.length; i++ )
 {
@@ -1100,9 +1100,9 @@ public class PDFDebugger extends JFrame
 }
 password = args[i];
 }
-else if( args[i].equals( VIEWPAGES ) )
+else if( args[i].equals(VIEW_STRUCTURE) )
 {
-viewPages = true;
+viewPages = false;
 }
 else
 {
@@ -1260,7 +1260,7 @@ public class PDFDebugger extends JFrame
 String message = "Usage: java -jar pdfbox-app-x.y.z.jar PDFDebugger 
[options] \n"
 + "\nOptions:\n"
 + "  -password  : Password to decrypt the document\n"
-+ "  -viewpages   : activate the page mode on 
startup\n"
++ "  -viewstructure   : activate structure mode on 
startup\n"
 + ": The PDF document to be loaded\n";
 
 System.err.println(message);




svn commit: r1705782 - in /pdfbox/trunk: pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ tools/src/main/java/org/apache/pdfbox/tools/

2015-09-28 Thread jahewson
Author: jahewson
Date: Mon Sep 28 21:36:47 2015
New Revision: 1705782

URL: http://svn.apache.org/viewvc?rev=1705782=rev
Log:
PDFBOX-2893: Remove getStream() from PDImage

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java?rev=1705782=1705781=1705782=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java
 Mon Sep 28 21:36:47 2015
@@ -23,7 +23,6 @@ import java.io.InputStream;
 import java.util.List;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
-import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
 
 /**
@@ -49,13 +48,7 @@ public interface PDImage extends COSObje
  * @throws IllegalStateException if the image is not a stencil.
  */
 BufferedImage getStencilImage(Paint paint) throws IOException;
-
-/**
- * Returns a stream containing this image's data. Null for inline images.
- * @throws IOException if the stream could not be read.
- */
-PDStream getStream() throws IOException;
-
+
 /**
  * Returns an InputStream containing the image data, irrespective of 
whether this is an
  * inline image or an image XObject.

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java?rev=1705782=1705781=1705782=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
 Mon Sep 28 21:36:47 2015
@@ -32,7 +32,6 @@ import org.apache.pdfbox.filter.Filter;
 import org.apache.pdfbox.filter.FilterFactory;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.COSArrayList;
-import org.apache.pdfbox.pdmodel.common.PDStream;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
 import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
 
@@ -252,15 +251,6 @@ public final class PDInlineImage impleme
 parameters.setBoolean(COSName.IM, isStencil);
 }
 
-/**
- * Always null, use {@link #createInputStream()} instead.
- */
-@Override
-public PDStream getStream() throws IOException
-{
-return null;
-}
-
 @Override
 public InputStream createInputStream() throws IOException
 {

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java?rev=1705782=1705781=1705782=diff
==
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java 
(original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java 
Mon Sep 28 21:36:47 2015
@@ -322,7 +322,7 @@ public final class ExtractImages
   
PDDeviceRGB.INSTANCE.getName().equals(colorSpaceName))
 {
 // RGB or Gray colorspace: get and write the 
unmodifiedJPEG stream
-InputStream data = 
pdImage.getStream().createInputStream(JPEG);
+InputStream data = pdImage.createInputStream(JPEG);
 IOUtils.copy(data, out);
 IOUtils.closeQuietly(data);
 }




svn commit: r1705786 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: PDType3CharProc.java PDType3Font.java

2015-09-28 Thread jahewson
Author: jahewson
Date: Mon Sep 28 22:04:13 2015
New Revision: 1705786

URL: http://svn.apache.org/viewvc?rev=1705786=rev
Log:
PDFBOX-2943: move type 3 char proc parsing to PDType3CharProc

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java?rev=1705786=1705785=1705786=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java
 Mon Sep 28 22:04:13 2015
@@ -19,8 +19,15 @@ package org.apache.pdfbox.pdmodel.font;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.pdfbox.contentstream.PDContentStream;
+import org.apache.pdfbox.contentstream.operator.Operator;
+import org.apache.pdfbox.cos.COSBase;
+import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.pdfparser.PDFStreamParser;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
@@ -83,5 +90,57 @@ public final class PDType3CharProc imple
 return font.getFontMatrix();
 }
 
-// todo: add methods for getting the character's width from the stream
+/**
+ * todo.
+ * 
+ * @return
+ * @throws IOException
+ */
+public float getWidth() throws IOException
+{
+List arguments = new ArrayList();
+PDFStreamParser parser = new PDFStreamParser(this);
+Object token = parser.parseNextToken();
+while (token != null)
+{
+if (token instanceof COSObject)
+{
+arguments.add(((COSObject) token).getObject());
+}
+else if (token instanceof Operator)
+{
+return parseWidth((Operator) token, arguments);
+}
+else
+{
+arguments.add((COSBase) token);
+}
+token = parser.parseNextToken();
+}
+throw new IOException("Unexpected end of stream");
+}
+
+private float parseWidth(Operator operator, List arguments) throws 
IOException
+{
+if (operator.getName().equals("d0") || operator.getName().equals("d1"))
+{
+Object obj = arguments.get(0);
+if (obj instanceof Number)
+{
+return ((Number) obj).floatValue();
+}
+else if (obj instanceof COSNumber)
+{
+return ((COSNumber) obj).floatValue();
+}
+else
+{
+throw new IOException("Unexpected argument type: " + 
obj.getClass().getName());
+}
+}
+else
+{
+throw new IOException("First operator must be d0 or d1");
+}
+}
 }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java?rev=1705786=1705785=1705786=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3Font.java
 Mon Sep 28 22:04:13 2015
@@ -19,22 +19,12 @@ package org.apache.pdfbox.pdmodel.font;
 import java.awt.geom.GeneralPath;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.fontbox.FontBoxFont;
 import org.apache.fontbox.util.BoundingBox;
-import org.apache.pdfbox.contentstream.operator.Operator;
 import org.apache.pdfbox.cos.COSArray;
-import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSNumber;
-import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.cos.COSStream;
-import org.apache.pdfbox.pdfparser.PDFStreamParser;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding;
@@ -50,11 +40,6 @@ import org.apache.pdfbox.util.Vector;
  */
 public class PDType3Font ext

svn commit: r1705792 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java

2015-09-28 Thread jahewson
Author: jahewson
Date: Tue Sep 29 00:34:50 2015
New Revision: 1705792

URL: http://svn.apache.org/viewvc?rev=1705792=rev
Log:
PDFBOX-2370: Don't cache PDImageXObject or PDPattern

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java?rev=1705792=1705791=1705792=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java 
Tue Sep 29 00:34:50 2015
@@ -27,6 +27,7 @@ import org.apache.pdfbox.pdmodel.common.
 import 
org.apache.pdfbox.pdmodel.documentinterchange.markedcontent.PDPropertyList;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.font.PDFontFactory;
+import org.apache.pdfbox.pdmodel.graphics.color.PDPattern;
 import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
 import 
org.apache.pdfbox.pdmodel.graphics.optionalcontent.PDOptionalContentGroup;
 import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
@@ -142,8 +143,7 @@ public final class PDResources implement
 PDColorSpace cached = cache.getColorSpace(indirect);
 if (cached != null)
 {
-// cache disabled due to resource dependency, see PDFBOX-2370
-//return cached
+return cached;
 }
 }
 
@@ -159,7 +159,8 @@ public final class PDResources implement
 colorSpace = PDColorSpace.create(name, this);
 }
 
-if (cache != null)
+// we can't cache PDPattern, because it holds page resources, see 
PDFBOX-2370
+if (cache != null && !(colorSpace instanceof PDPattern))
 {
 cache.put(indirect, colorSpace);
 }
@@ -321,8 +322,7 @@ public final class PDResources implement
 PDXObject cached = cache.getXObject(indirect);
 if (cached != null)
 {
-// cache disabled due to resource dependency, see PDFBOX-2370
-//return cached
+return cached;
 }
 }
 
@@ -342,7 +342,8 @@ public final class PDResources implement
 xobject = PDXObject.createXObject(value, this);
 }
 
-if (cache != null)
+// we can't cache PDImageXObject, because it holds page resources, see 
PDFBOX-2370
+if (cache != null && !(xobject instanceof PDImageXObject))
 {
 cache.put(indirect, xobject);
 }




svn commit: r1705598 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java

2015-09-27 Thread jahewson
Author: jahewson
Date: Mon Sep 28 03:54:15 2015
New Revision: 1705598

URL: http://svn.apache.org/viewvc?rev=1705598=rev
Log:
PDFBOX-2997: Make FontMappers final... and add private constructor

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java?rev=1705598=1705597=1705598=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java
 Mon Sep 28 03:54:15 2015
@@ -26,6 +26,10 @@ public final class FontMappers
 {
 private static FontMapper instance;
 
+private FontMappers()
+{
+}
+
 // lazy thread safe singleton
 private static class DefaultFontMapper
 {




svn commit: r1705597 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java

2015-09-27 Thread jahewson
Author: jahewson
Date: Mon Sep 28 03:53:21 2015
New Revision: 1705597

URL: http://svn.apache.org/viewvc?rev=1705597=rev
Log:
PDFBOX-2997: Make FontMappers final

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java?rev=1705597=1705596=1705597=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java
 Mon Sep 28 03:53:21 2015
@@ -22,7 +22,7 @@ package org.apache.pdfbox.pdmodel.font;
  *
  * @author John Hewson
  */
-public class FontMappers
+public final class FontMappers
 {
 private static FontMapper instance;
 




svn commit: r1705595 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: FontMapper.java FontMapperImpl.java FontMappers.java PDCIDFontType0.java PDCIDFontType2.java PDTrueTypeFont

2015-09-27 Thread jahewson
Author: jahewson
Date: Mon Sep 28 03:49:57 2015
New Revision: 1705595

URL: http://svn.apache.org/viewvc?rev=1705595=rev
Log:
PDFBOX-2997: Make FontMapper into a singleton interface

Added:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapperImpl.java
   (with props)

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMappers.java
   (with props)
Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.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/PDType1CFont.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java?rev=1705595=1705594=1705595=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java
 Mon Sep 28 03:49:57 2015
@@ -16,458 +16,31 @@
  */
 package org.apache.pdfbox.pdmodel.font;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.PriorityQueue;
-import java.util.Set;
 import org.apache.fontbox.FontBoxFont;
-import org.apache.fontbox.cff.CFFFont;
-import org.apache.fontbox.cff.CFFType1Font;
-import org.apache.fontbox.ttf.OpenTypeFont;
-import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.ttf.TrueTypeFont;
-import org.apache.fontbox.type1.Type1Font;
 
 /**
- * Font mapper, locates non-embedded fonts via a pluggable FontProvider.
+ * Font mapper, locates non-embedded fonts. If you implement this then you're 
responsible for
+ * caching the fonts. SoftReference is recommended.
  *
  * @author John Hewson
  */
-final class FontMapper
+public interface FontMapper
 {
-private FontMapper() {}
-
-private static final FontCache fontCache = new FontCache(); // todo: 
static cache isn't ideal
-private static FontProvider fontProvider;
-private static Map<String, FontInfo> fontInfoByName;
-private static final TrueTypeFont lastResortFont;
-static
-{
-try
-{
-String ttfName = 
"org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf";
-URL url = FontMapper.class.getClassLoader().getResource(ttfName);
-if (url == null)
-{
-throw new IOException("Error loading resource: " + ttfName);
-}
-InputStream ttfStream = url.openStream();
-TTFParser ttfParser = new TTFParser();
-lastResortFont = ttfParser.parse(ttfStream);
-}
-catch (IOException e)
-{
-throw new RuntimeException(e);
-}
-}
-
-// lazy thread safe singleton
-private static class DefaultFontProvider
-{
-private static final FontProvider INSTANCE = new 
FileSystemFontProvider(fontCache);
-}
-
-/**
- * Sets the font service provider.
- */
-public static synchronized void setProvider(FontProvider fontProvider)
-{
-FontMapper.fontProvider = fontProvider;
-fontInfoByName = createFontInfoByName(fontProvider.getFontInfo());
-}
-
-/**
- * Returns the font service provider. Defaults to using 
FileSystemFontProvider.
- */
-public static synchronized FontProvider getProvider()
-{
-if (fontProvider == null)
-{
-setProvider(DefaultFontProvider.INSTANCE);
-}
-return fontProvider;
-}
-
-/**
- * Returns the font cache associated with this FontMapper. This method is 
needed by
- * FontProvider subclasses.
- */
-public static FontCache getFontCache()
-{
-return fontCache;
-}
-
-private static Map<String, FontInfo> createFontInfoByName(List fontInfoList)
-{
-Map<String, FontInfo> map = new LinkedHashMap<String, FontInfo>();
-for (FontInfo info : fontInfoList)
-{
-for (String name : getPostScriptNames(info.getPostScriptName()))
-{
-map.put(name, info);
-}
-}
-return map;
-}
-
-/**
- * Gets alternative names, as seen in some PDFs, e.g. 

svn commit: r1700901 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

2015-09-02 Thread jahewson
Author: jahewson
Date: Wed Sep  2 20:47:22 2015
New Revision: 1700901

URL: http://svn.apache.org/r1700901
Log:
PDFBOX-2954: Typo

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java?rev=1700901=1700900=1700901=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
 Wed Sep  2 20:47:22 2015
@@ -325,7 +325,7 @@ public class PDType1Font extends PDSimpl
 if (unicode > 0xff)
 {
 throw new IllegalArgumentException(String.format("Can't encode 
U+%04X in font %s. " +
-"Type 1 fonts only supports 8-bit code points", unicode, 
getName()));
+"Type 1 fonts only support 8-bit code points", unicode, 
getName()));
 }
 
 String name = getGlyphList().codePointToName(unicode);




svn commit: r1700899 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

2015-09-02 Thread jahewson
Author: jahewson
Date: Wed Sep  2 20:45:28 2015
New Revision: 1700899

URL: http://svn.apache.org/r1700899
Log:
PDFBOX-2954: Add more detail to error message

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java?rev=1700899=1700898=1700899=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
 Wed Sep  2 20:45:28 2015
@@ -324,7 +324,8 @@ public class PDType1Font extends PDSimpl
 {
 if (unicode > 0xff)
 {
-throw new IllegalArgumentException("This font type only supports 
8-bit code points");
+throw new IllegalArgumentException(String.format("Can't encode 
U+%04X in font %s. " +
+"Type 1 fonts only supports 8-bit code points", unicode, 
getName()));
 }
 
 String name = getGlyphList().codePointToName(unicode);




svn commit: r1700894 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding: DictionaryEncoding.java Encoding.java

2015-09-02 Thread jahewson
Author: jahewson
Date: Wed Sep  2 20:32:58 2015
New Revision: 1700894

URL: http://svn.apache.org/r1700894
Log:
PDFBOX-2951: Fix issue with Encoding caching names before Differences have been 
applied

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java?rev=1700894=1700893=1700894=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
 Wed Sep  2 20:32:58 2015
@@ -60,7 +60,6 @@ public class DictionaryEncoding extends
 }
 
 codeToName.putAll( this.baseEncoding.codeToName );
-names.addAll( this.baseEncoding.names );
 applyDifferences();
 }
 
@@ -118,7 +117,6 @@ public class DictionaryEncoding extends
 baseEncoding = base;
 
 codeToName.putAll( baseEncoding.codeToName );
-names.addAll( baseEncoding.names );
 applyDifferences();
 }
 

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java?rev=1700894=1700893=1700894=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/Encoding.java
 Wed Sep  2 20:32:58 2015
@@ -21,7 +21,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.common.COSObjectable;
 
@@ -59,7 +58,7 @@ public abstract class Encoding implement
 }
 
 protected final Map<Integer, String> codeToName = new HashMap<Integer, 
String>();
-protected final Set names = new HashSet();
+private Set names;
 
 /**
  * Returns an unmodifiable view of the Code2Name mapping.
@@ -80,7 +79,6 @@ public abstract class Encoding implement
 protected void add(int code, String name)
 {
 codeToName.put(code, name);
-names.add(name);
 }
 
 /**
@@ -90,6 +88,13 @@ public abstract class Encoding implement
  */
 public boolean contains(String name)
 {
+// we have to wait until all add() calls are done before building the 
name cache
+// otherwise /Differences won't be accounted for
+if (names == null)
+{
+names = new HashSet();
+names.addAll(codeToName.values());
+}
 return names.contains(name);
 }
 




svn commit: r1700394 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java

2015-09-01 Thread jahewson
Author: jahewson
Date: Tue Sep  1 06:04:21 2015
New Revision: 1700394

URL: http://svn.apache.org/r1700394
Log:
PDFBOX-2949: Render ARGB images with a transparent background

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java?rev=1700394=1700393=1700394=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java 
Tue Sep  1 06:04:21 2015
@@ -20,7 +20,6 @@ import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
-
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
@@ -128,7 +127,11 @@ public class PDFRenderer
 
 // use a transparent background if the imageType supports alpha
 Graphics2D g = image.createGraphics();
-if (imageType != ImageType.ARGB)
+if (imageType == ImageType.ARGB)
+{
+g.setBackground(new Color(0, 0, 0, 0));
+}
+else
 {
 g.setBackground(Color.WHITE);
 }




svn commit: r1697792 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer: ASCIIPane.java AddressPane.java HexPane.java HexView.java UpperPane.java

2015-08-25 Thread jahewson
Author: jahewson
Date: Wed Aug 26 00:47:20 2015
New Revision: 1697792

URL: http://svn.apache.org/r1697792
Log:
PDFBOX-2941: lower quality text anti-aliasing for Windows

Modified:

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/ASCIIPane.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/AddressPane.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexPane.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/UpperPane.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/ASCIIPane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/ASCIIPane.java?rev=1697792r1=1697791r2=1697792view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/ASCIIPane.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/ASCIIPane.java
 Wed Aug 26 00:47:20 2015
@@ -56,10 +56,7 @@ class ASCIIPane extends JComponent imple
 super.paintComponent(g);
 
 Graphics2D g2d = (Graphics2D)g;
-g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_RENDERING, 
RenderingHints.VALUE_RENDER_QUALITY);
+g2d.setRenderingHints(HexView.RENDERING_HINTS);
 
 Rectangle bound = getVisibleRect();
 

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/AddressPane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/AddressPane.java?rev=1697792r1=1697791r2=1697792view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/AddressPane.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/AddressPane.java
 Wed Aug 26 00:47:20 2015
@@ -22,7 +22,6 @@ import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.Rectangle;
-import java.awt.RenderingHints;
 import javax.swing.JComponent;
 
 /**
@@ -53,10 +52,7 @@ class AddressPane extends JComponent
 super.paintComponent(g);
 
 Graphics2D g2d = (Graphics2D)g;
-g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_RENDERING, 
RenderingHints.VALUE_RENDER_QUALITY);
+g2d.setRenderingHints(HexView.RENDERING_HINTS);
 
 Rectangle bound = getVisibleRect();
 

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexPane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexPane.java?rev=1697792r1=1697791r2=1697792view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexPane.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexPane.java
 Wed Aug 26 00:47:20 2015
@@ -75,12 +75,9 @@ class HexPane extends JPanel implements
 protected void paintComponent(Graphics g)
 {
 super.paintComponent(g);
-
+
 Graphics2D g2d = (Graphics2D)g;
-g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, 
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
-g2d.setRenderingHint(RenderingHints.KEY_RENDERING, 
RenderingHints.VALUE_RENDER_QUALITY);
+g2d.setRenderingHints(HexView.RENDERING_HINTS);
 
 Rectangle bound = getVisibleRect();
 g.clearRect(bound.x, bound.y, bound.width, bound.height);

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger

svn commit: r1697797 - /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java

2015-08-25 Thread jahewson
Author: jahewson
Date: Wed Aug 26 01:08:31 2015
New Revision: 1697797

URL: http://svn.apache.org/r1697797
Log:
PDFBOX-2941: Use platform font size

Modified:

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java?rev=1697797r1=1697796r2=1697797view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/HexView.java
 Wed Aug 26 01:08:31 2015
@@ -46,13 +46,14 @@ public class HexView implements ActionLi
 {
 private JComponent mainPane;
 private Stream stream;
-
-static final Font FONT = new Font(monospaced, Font.PLAIN, 13);
+
+static final int FONT_SIZE = ((Font)UIManager.get(Label.font)).getSize();
+static final Font FONT = new Font(monospaced, Font.PLAIN, FONT_SIZE);
 static final int CHAR_HEIGHT = 20;
 static final int CHAR_WIDTH = 35;
 static final int LINE_INSET = 20;
 static final Color SELECTED_COLOR = UIManager.getColor(textHighlight);
-static final Font BOLD_FONT = new Font(monospaced, Font.BOLD, 13);
+static final Font BOLD_FONT = new Font(monospaced, Font.BOLD, FONT_SIZE);
 static final int HEX_PANE_WIDTH = 600;
 static final int ADDRESS_PANE_WIDTH = 120;
 static final int ASCII_PANE_WIDTH = 270;




svn commit: r1697483 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/cos/COSInputStream.java test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java

2015-08-24 Thread jahewson
Author: jahewson
Date: Mon Aug 24 19:15:52 2015
New Revision: 1697483

URL: http://svn.apache.org/r1697483
Log:
PDFBOX-2893: Close scratch buffer after it has been read

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java

pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java?rev=1697483r1=1697482r2=1697483view=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java 
Mon Aug 24 19:15:52 2015
@@ -65,11 +65,17 @@ public final class COSInputStream extend
 if (scratchFile != null)
 {
 // scratch file
-RandomAccess buffer = scratchFile.createBuffer();
+final RandomAccess buffer = scratchFile.createBuffer();
 DecodeResult result = filters.get(i).decode(input, new 
RandomAccessOutputStream(buffer), parameters, i);
 results.add(result);
-input = new RandomAccessInputStream(buffer);
-buffer.close();
+input = new RandomAccessInputStream(buffer)
+{
+@Override
+public void close() throws IOException
+{
+buffer.close();
+}
+};
 }
 else
 {

Modified: 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java?rev=1697483r1=1697482r2=1697483view=diff
==
--- 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/multipdf/PDFMergerUtilityTest.java
 Mon Aug 24 19:15:52 2015
@@ -70,6 +70,21 @@ public class PDFMergerUtilityTest extend
 true);
 }
 
+// see PDFBOX-2893
+public void testPDFMergerUtility2() throws IOException
+{
+checkMergeIdentical(PDFBox.GlobalResourceMergeTest.Doc01.pdf,
+PDFBox.GlobalResourceMergeTest.Doc02.pdf,
+GlobalResourceMergeTestResult.pdf,
+false);
+
+// once again, with scratch file
+checkMergeIdentical(PDFBox.GlobalResourceMergeTest.Doc01.pdf,
+PDFBox.GlobalResourceMergeTest.Doc02.pdf,
+GlobalResourceMergeTestResult2.pdf,
+true);
+}
+
 // checks that the result file of a merge has the same rendering as the two
 // source files
 private void checkMergeIdentical(String filename1, String filename2, 
String mergeFilename, 




svn commit: r1697511 - /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/UpperPane.java

2015-08-24 Thread jahewson
Author: jahewson
Date: Mon Aug 24 22:40:53 2015
New Revision: 1697511

URL: http://svn.apache.org/r1697511
Log:
PDFBOX-2941: Dump - Text

Modified:

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/UpperPane.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/UpperPane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/UpperPane.java?rev=1697511r1=1697510r2=1697511view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/UpperPane.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/hexviewer/UpperPane.java
 Mon Aug 24 22:40:53 2015
@@ -64,6 +64,6 @@ class UpperPane extends JPanel
 }
 
 x+=HexView.LINE_INSET*2;
-g.drawString(Dump, x, y);
+g.drawString(Text, x, y);
 }
 }




svn commit: r1696478 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java

2015-08-18 Thread jahewson
Author: jahewson
Date: Tue Aug 18 18:26:13 2015
New Revision: 1696478

URL: http://svn.apache.org/r1696478
Log:
PDFBOX-2487: Fix stack depth check for seac

Modified:

pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java?rev=1696478r1=1696477r2=1696478view=diff
==
--- 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java 
(original)
+++ 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java 
Tue Aug 18 18:26:13 2015
@@ -265,7 +265,7 @@ public class Type1CharString
 }
 else if (seac.equals(name))
 {
-if (numbers.size() = 6)
+if (numbers.size() = 5)
 {
 seac(numbers.get(0), numbers.get(1), numbers.get(2), 
numbers.get(3), numbers.get(4));
 }




svn commit: r1696111 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java

2015-08-15 Thread jahewson
Author: jahewson
Date: Sun Aug 16 04:33:55 2015
New Revision: 1696111

URL: http://svn.apache.org/r1696111
Log:
PDFBOX-2893: Fix JavaDoc

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java?rev=1696111r1=1696110r2=1696111view=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java Sun 
Aug 16 04:33:55 2015
@@ -106,7 +106,7 @@ public class COSStream extends COSDictio
  *
  * @return the bytes of the physical (encoded) stream
  * @throws IOException when encoding causes an exception
- * @deprecated Use {@link #createInputStream()} instead.
+ * @deprecated Use {@link #createRawInputStream()} instead.
  */
 @Deprecated
 public InputStream getFilteredStream() throws IOException
@@ -135,7 +135,7 @@ public class COSStream extends COSDictio
  *
  * @return the bytes of the logical (decoded) stream
  * @throws IOException when decoding causes an exception
- * @deprecated Use {@link #createRawInputStream()} instead.
+ * @deprecated Use {@link #createInputStream()} instead.
  */
 @Deprecated
 public InputStream getUnfilteredStream() throws IOException




svn commit: r1696017 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java

2015-08-15 Thread jahewson
Author: jahewson
Date: Sat Aug 15 06:51:22 2015
New Revision: 1696017

URL: http://svn.apache.org/r1696017
Log:
PDFBOX-2893: Fix JavaDoc

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java?rev=1696017r1=1696016r2=1696017view=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java Sat 
Aug 15 06:51:22 2015
@@ -115,9 +115,9 @@ public class COSStream extends COSDictio
 }
 
 /**
- * Returns a new InputStream which reads the decoded stream data.
+ * Returns a new InputStream which reads the encoded PDF stream data. 
Experts only!
  * 
- * @return InputStream containing decoded stream data.
+ * @return InputStream containing raw, encoded PDF stream data.
  * @throws IOException If the stream could not be read.
  */
 public InputStream createRawInputStream() throws IOException
@@ -144,9 +144,9 @@ public class COSStream extends COSDictio
 }
 
 /**
- * Returns a new InputStream which reads the encoded PDF stream data. 
Experts only!
+ * Returns a new InputStream which reads the decoded stream data.
  * 
- * @return InputStream containing raw, encoded PDF stream data.
+ * @return InputStream containing decoded stream data.
  * @throws IOException If the stream could not be read.
  */
 public COSInputStream createInputStream() throws IOException




svn commit: r1695411 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

2015-08-11 Thread jahewson
Author: jahewson
Date: Tue Aug 11 23:41:17 2015
New Revision: 1695411

URL: http://svn.apache.org/r1695411
Log:
PDFBOX-2929: Avoid  JVM crash when dash array contains zero

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1695411r1=1695410r2=1695411view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java 
Tue Aug 11 23:41:17 2015
@@ -536,7 +536,11 @@ public class PageDrawer extends PDFGraph
 for (int i = 0; i  dashArray.length; ++i)
 {
 // minimum line dash width avoids JVM crash, see PDFBOX-2373
-dashArray[i] = Math.max(transformWidth(dashArray[i]), 0.016f);
+float w = transformWidth(dashArray[i]);
+if (w != 0)
+{
+dashArray[i] = Math.max(w, 0.016f);
+}
 }
 phaseStart = (int)transformWidth(phaseStart);
 




svn commit: r1695180 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java

2015-08-10 Thread jahewson
Author: jahewson
Date: Mon Aug 10 22:48:57 2015
New Revision: 1695180

URL: http://svn.apache.org/r1695180
Log:
PDFBOX-2922: Correct printing of landscape pages with landscape-sized paper

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java?rev=1695180r1=1695179r2=1695180view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/printing/PDFPageable.java 
Mon Aug 10 22:48:57 2015
@@ -17,8 +17,8 @@
 
 package org.apache.pdfbox.printing;
 
+import java.awt.print.Book;
 import java.awt.print.PageFormat;
-import java.awt.print.Pageable;
 import java.awt.print.Paper;
 import java.awt.print.Printable;
 import org.apache.pdfbox.pdmodel.PDDocument;
@@ -30,7 +30,7 @@ import org.apache.pdfbox.pdmodel.common.
  *
  * @author John Hewson
  */
-public final class PDFPageable implements Pageable
+public final class PDFPageable extends Book
 {
 private final PDDocument document;
 private final boolean showPageBorder;
@@ -107,10 +107,31 @@ public final class PDFPageable implement
 PDRectangle mediaBox = page.getMediaBox();
 PDRectangle cropBox = PDFPrintable.getRotatedCropBox(page);
 
-Paper paper = new Paper();
-paper.setSize(mediaBox.getWidth(), mediaBox.getHeight());
-paper.setImageableArea(cropBox.getLowerLeftX(), 
cropBox.getLowerLeftY(),
-   cropBox.getWidth(), cropBox.getHeight());
+// Java does not seem to understand landscape paper sizes, i.e. where 
width  height, it
+// always crops the imageable area as if the page were in portrait. I 
suspect that this is
+// a JDK bug but it might be by design, see PDFBOX-2922.
+//
+// As a workaround, we normalise all Page(s) to be portrait, then flag 
them as landscape in
+// the PageFormat.
+Paper paper;
+boolean isLandscape;
+if (mediaBox.getWidth()  mediaBox.getHeight())
+{
+// rotate
+paper = new Paper();
+paper.setSize(mediaBox.getHeight(), mediaBox.getWidth());
+paper.setImageableArea(cropBox.getLowerLeftY(), 
cropBox.getLowerLeftX(),
+cropBox.getHeight(), cropBox.getWidth());
+isLandscape = true;
+}
+else
+{
+paper = new Paper();
+paper.setSize(mediaBox.getWidth(), mediaBox.getHeight());
+paper.setImageableArea(cropBox.getLowerLeftX(), 
cropBox.getLowerLeftY(),
+cropBox.getWidth(), cropBox.getHeight());
+isLandscape = false;
+}
 
 PageFormat format = new PageFormat();
 format.setPaper(paper);
@@ -118,7 +139,7 @@ public final class PDFPageable implement
 // auto portrait/landscape
 if (orientation == Orientation.AUTO)
 {
-if (cropBox.getWidth()  cropBox.getHeight())
+if (isLandscape)
 {
 format.setOrientation(PageFormat.LANDSCAPE);
 }




svn commit: r1695202 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java

2015-08-10 Thread jahewson
Author: jahewson
Date: Tue Aug 11 03:17:41 2015
New Revision: 1695202

URL: http://svn.apache.org/r1695202
Log:
PDFBOX-2204: Support for Indexed color spaces in JPX

Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java?rev=1695202r1=1695201r2=1695202view=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java 
Tue Aug 11 03:17:41 2015
@@ -91,7 +91,10 @@ public final class JPXFilter extends Fil
 
 // If the image stream uses the JPXDecode filter, this entry is 
optional
 // and shall be ignored if present
-parameters.setInt(COSName.BITS_PER_COMPONENT, 
image.getColorModel().getComponentSize(0));
+//
+// note that indexed color spaces make the BPC logic tricky, see 
PDFBOX-2204
+int bpc = image.getColorModel().getPixelSize() / 
image.getRaster().getNumBands();
+parameters.setInt(COSName.BITS_PER_COMPONENT, bpc);
 
 // Decode shall be ignored, except in the case where the image is 
treated as a mask
 if (!parameters.getBoolean(COSName.IMAGE_MASK, false))




svn commit: r1695198 - in /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff: Type1CharString.java Type1CharStringParser.java

2015-08-10 Thread jahewson
Author: jahewson
Date: Tue Aug 11 02:45:20 2015
New Revision: 1695198

URL: http://svn.apache.org/r1695198
Log:
PDFBOX-2487: Guard against invalid charstrings

Modified:

pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java

pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharStringParser.java

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java?rev=1695198r1=1695197r2=1695198view=diff
==
--- 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java 
(original)
+++ 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java 
Tue Aug 11 02:45:20 2015
@@ -154,55 +154,76 @@ public class Type1CharString
 
 if (rmoveto.equals(name))
 {
-if (isFlex)
+if (numbers.size() = 2)
 {
-flexPoints.add(new Point2D.Float(numbers.get(0), 
numbers.get(1)));
-}
-else
-{
-rmoveTo(numbers.get(0), numbers.get(1));
+if (isFlex)
+{
+flexPoints.add(new Point2D.Float(numbers.get(0), 
numbers.get(1)));
+}
+else
+{
+rmoveTo(numbers.get(0), numbers.get(1));
+}
 }
 }
 else if (vmoveto.equals(name))
 {
-if (isFlex)
-{
-// not in the Type 1 spec, but exists in some fonts
-flexPoints.add(new Point2D.Float(0, numbers.get(0)));
-}
-else
+if (numbers.size() = 1)
 {
-rmoveTo(0, numbers.get(0));
+if (isFlex)
+{
+// not in the Type 1 spec, but exists in some fonts
+flexPoints.add(new Point2D.Float(0, numbers.get(0)));
+}
+else
+{
+rmoveTo(0, numbers.get(0));
+}
 }
 }
 else if (hmoveto.equals(name))
 {
-if (isFlex)
+if (numbers.size() = 1)
 {
-// not in the Type 1 spec, but exists in some fonts
-flexPoints.add(new Point2D.Float(numbers.get(0), 0));
-}
-else
-{
-rmoveTo(numbers.get(0), 0);
+if (isFlex)
+{
+// not in the Type 1 spec, but exists in some fonts
+flexPoints.add(new Point2D.Float(numbers.get(0), 0));
+}
+else
+{
+rmoveTo(numbers.get(0), 0);
+}
 }
 }
 else if (rlineto.equals(name))
 {
-rlineTo(numbers.get(0), numbers.get(1));
+if (numbers.size() = 2)
+{
+rlineTo(numbers.get(0), numbers.get(1));
+}
 }
 else if (hlineto.equals(name))
 {
-rlineTo(numbers.get(0), 0);
+if (numbers.size() = 1)
+{
+rlineTo(numbers.get(0), 0);
+}
 }
 else if (vlineto.equals(name))
 {
-rlineTo(0, numbers.get(0));
+if (numbers.size() = 1)
+{
+rlineTo(0, numbers.get(0));
+}
 }
 else if (rrcurveto.equals(name))
 {
-rrcurveTo(numbers.get(0), numbers.get(1), numbers.get(2),
-numbers.get(3), numbers.get(4), numbers.get(5));
+if (numbers.size() = 6)
+{
+rrcurveTo(numbers.get(0), numbers.get(1), numbers.get(2),
+numbers.get(3), numbers.get(4), numbers.get(5));
+}
 }
 else if (closepath.equals(name))
 {
@@ -210,37 +231,58 @@ public class Type1CharString
 }
 else if (sbw.equals(name))
 {
-leftSideBearing = new Point2D.Float(numbers.get(0), 
numbers.get(1));
-width = numbers.get(2);
-current.setLocation(leftSideBearing);
+if (numbers.size() = 3)
+{
+leftSideBearing = new Point2D.Float(numbers.get(0), 
numbers.get(1));
+width = numbers.get(2);
+current.setLocation(leftSideBearing);
+}
 }
 else if (hsbw.equals(name))
 {
-leftSideBearing = new Point2D.Float(numbers.get(0), 0);
-width = numbers.get(1);
-current.setLocation(leftSideBearing);
+if (numbers.size() = 2)
+{
+leftSideBearing = new Point2D.Float(numbers.get(0), 0

svn commit: r1695185 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java

2015-08-10 Thread jahewson
Author: jahewson
Date: Tue Aug 11 00:35:20 2015
New Revision: 1695185

URL: http://svn.apache.org/r1695185
Log:
PDFBOX-2437: Fix comment

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java?rev=1695185r1=1695184r2=1695185view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 Tue Aug 11 00:35:20 2015
@@ -207,7 +207,7 @@ public abstract class PDSimpleFont exten
 }
 else
 {
-// unless we can prove that the font is symbolic, we assume 
that it is not
+// unless we can prove that the font is non-symbolic, we 
assume that it is not
 isSymbolic = true;
 }
 }




svn commit: r1694856 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java

2015-08-09 Thread jahewson
Author: jahewson
Date: Sun Aug  9 07:00:13 2015
New Revision: 1694856

URL: http://svn.apache.org/r1694856
Log:
PDFBOX-2846: Try to find glyphs by unicode name if standard name doesn't work

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.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=1694856r1=1694855r2=1694856view=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 Aug  9 07:00:13 2015
@@ -354,8 +354,13 @@ public class PDTrueTypeFont extends PDSi
 
 if (!ttf.hasGlyph(name))
 {
-throw new IllegalArgumentException(
-String.format(No glyph for U+%04X in font %s, unicode, 
getName()));
+// try unicode name
+String uniName = String.format(uni%04X, unicode);
+if (!ttf.hasGlyph(uniName))
+{
+throw new IllegalArgumentException(
+String.format(No glyph for U+%04X in font %s, 
unicode, getName()));
+}
 }
 
 int code = inverted.get(name);




svn commit: r1694365 - /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java

2015-08-05 Thread jahewson
Author: jahewson
Date: Wed Aug  5 23:15:39 2015
New Revision: 1694365

URL: http://svn.apache.org/r1694365
Log:
PDFBOX-2893: read stream before writing it

Modified:

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java?rev=1694365r1=1694364r2=1694365view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java 
(original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java 
Wed Aug  5 23:15:39 2015
@@ -24,8 +24,8 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.cos.COSStream;
-import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.common.PDStream;
 
 /**
  * load document and write with all streams decoded.
@@ -68,9 +68,10 @@ public class WriteDecodedDoc
 if (base instanceof COSStream)
 {
 COSStream stream = (COSStream)base;
+byte[] bytes = new PDStream(stream).toByteArray();
 stream.removeItem(COSName.FILTER);
 OutputStream streamOut = stream.createOutputStream();
-IOUtils.copy(stream.createInputStream(), streamOut);
+streamOut.write(bytes);
 streamOut.close();
 }
 }




svn commit: r1694004 [1/3] - in /pdfbox/trunk: examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ examples/src/main/java/org/apache/pdfbox/examples/util/ pdfbox/src/main/java/org/apache/pdfbox

2015-08-04 Thread jahewson
Author: jahewson
Date: Tue Aug  4 06:52:19 2015
New Revision: 1694004

URL: http://svn.apache.org/r1694004
Log:
PDFBOX-2893: Expose only non-persistent InputStream and OutputStream from 
COSStream

Added:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java 
  (with props)

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSOutputStream.java   
(with props)

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessInputStream.java
  - copied, changed from r1693944, 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadInputStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessOutputStream.java
  - copied, changed from r1693944, 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFileOutputStream.java

pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessOutputStream.java
  - copied, changed from r1693944, 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessFileOutputStream.java
Removed:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFileOutputStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadInputStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadWrapper.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDMemoryStream.java

pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessFileOutputStream.java
Modified:

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintDocumentMetaData.java

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/RubberStampWithImage.java

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/SuperimposePage.java

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Overlay.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFMergerUtility.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDMetadata.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/filespecification/PDEmbeddedFile.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/encryption/SecurityHandler.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Embedder.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1FontEmbedder.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/TrueTypeEmbedder.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDPostScriptXObject.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/PDXObject.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDOutputIntent.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactory.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImage.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java

pdfbox/trunk/pdfbox/src/main

svn commit: r1694004 [2/3] - in /pdfbox/trunk: examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ examples/src/main/java/org/apache/pdfbox/examples/util/ pdfbox/src/main/java/org/apache/pdfbox

2015-08-04 Thread jahewson
Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java?rev=1694004r1=1694003r2=1694004view=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java 
Tue Aug  4 06:52:19 2015
@@ -16,7 +16,6 @@
  */
 package org.apache.pdfbox.pdmodel;
 
-import java.io.BufferedInputStream;
 import java.io.Closeable;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -27,7 +26,6 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.cos.COSArray;
@@ -42,7 +40,7 @@ import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.io.MemoryUsageSetting;
 import org.apache.pdfbox.io.RandomAccessBuffer;
 import org.apache.pdfbox.io.RandomAccessBufferedFileInputStream;
-import org.apache.pdfbox.io.RandomAccessReadInputStream;
+import org.apache.pdfbox.io.RandomAccessInputStream;
 import org.apache.pdfbox.io.RandomAccessRead;
 import org.apache.pdfbox.io.ScratchFile;
 import org.apache.pdfbox.pdfparser.PDFParser;
@@ -562,8 +560,7 @@ public class PDDocument implements Close
 in = page.getContents();
 if (in != null)
 {
-PDStream dest = new PDStream(document, page.getContents());
-dest.addCompression();
+PDStream dest = new PDStream(this, page.getContents(), 
COSName.FLATE_DECODE);
 importedPage.setContents(dest);
 }
 addPage(importedPage);
@@ -1230,8 +1227,7 @@ public class PDDocument implements Close
  */
 public void saveIncremental(OutputStream output) throws IOException
 {
-InputStream input = new BufferedInputStream(
-new RandomAccessReadInputStream(pdfSource, 0, 
pdfSource.length()));
+InputStream input = new RandomAccessInputStream(pdfSource);
 COSWriter writer = null;
 try
 {
@@ -1299,14 +1295,13 @@ public class PDDocument implements Close
 /**
  * Protects the document with a protection policy. The document content 
will be really
  * encrypted when it will be saved. This method only marks the document 
for encryption. It also
- * sets {@link #setAllSecurityToBeRemoved(boolean)} to false if it was set 
to true previously and logs a
- * warning.
+ * calls {@link #setAllSecurityToBeRemoved(boolean)} with a false argument 
if it was set to true
+ * previously and logs a warning.
  *
  * @see org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy
  * @see org.apache.pdfbox.pdmodel.encryption.PublicKeyProtectionPolicy
  *
  * @param policy The protection policy.
- *
  * @throws IOException if there isn't any suitable security handler.
  */
 public void protect(ProtectionPolicy policy) throws IOException

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java?rev=1694004r1=1694003r2=1694004view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java
 Tue Aug  4 06:52:19 2015
@@ -119,6 +119,7 @@ public final class PDPageContentStream i
boolean compress, boolean resetContext) throws 
IOException
 {
 this.document = document;
+COSName filter = compress ? COSName.FLATE_DECODE : null;
 
 // If request specifies the need to append to the document
 if (appendContent  sourcePage.hasContents())
@@ -143,34 +144,24 @@ public final class PDPageContentStream i
 array.add(contentsToAppend);
 }
 
-if (compress)
-{
-contentsToAppend.addCompression();
-}
-
 // save the initial/unmodified graphics context
 if (resetContext)
 {
 // create a new stream to encapsulate the existing stream
 PDStream saveGraphics = new PDStream(document);
-output = saveGraphics.createOutputStream();
+output = saveGraphics.createOutputStream(filter);
 
 // save the initial/unmodified graphics context
 saveGraphicsState();
 close();
 
-if (compress)
-{
-

svn commit: r1694004 [3/3] - in /pdfbox/trunk: examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ examples/src/main/java/org/apache/pdfbox/examples/util/ pdfbox/src/main/java/org/apache/pdfbox

2015-08-04 Thread jahewson
Modified: 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java?rev=1694004r1=1694003r2=1694004view=diff
==
--- 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
 Tue Aug  4 06:52:19 2015
@@ -49,7 +49,7 @@ public class ValidateXImage
 assertNotNull(cosStream);
 assertEquals(COSName.XOBJECT, cosStream.getItem(COSName.TYPE));
 assertEquals(COSName.IMAGE, cosStream.getItem(COSName.SUBTYPE));
-assertTrue(ximage.getCOSStream().getFilteredLength()  0);
+assertTrue(ximage.getCOSStream().getLength()  0);
 assertEquals(bpc, ximage.getBitsPerComponent());
 assertEquals(width, ximage.getWidth());
 assertEquals(height, ximage.getHeight());

Modified: 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/rendering/TestPDFToImage.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/rendering/TestPDFToImage.java?rev=1694004r1=1694003r2=1694004view=diff
==
--- 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/rendering/TestPDFToImage.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/rendering/TestPDFToImage.java
 Tue Aug  4 06:52:19 2015
@@ -238,10 +238,11 @@ public class TestPDFToImage extends Test
 new File(outDir, file.getName() + .reloaderror).delete();
 tmpFile.delete();
 }
-catch (Exception e)
+catch (IOException e)
 {
 failed = true;
-LOG.error(Error converting file  + file.getName(), e);
+LOG.error(Error converting file  + file.getName());
+throw e;
 }
 finally
 {

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/annotation/AnnotationValidator.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/annotation/AnnotationValidator.java?rev=1694004r1=1694003r2=1694004view=diff
==
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/annotation/AnnotationValidator.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/annotation/AnnotationValidator.java
 Tue Aug  4 06:52:19 2015
@@ -25,7 +25,6 @@ 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.common.PDStream;
 import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary;
@@ -197,7 +196,7 @@ public abstract class AnnotationValidato
 
 // Appearance stream is a XObjectForm, check it.
 ContextHelper.validateElement(ctx, new PDFormXObject(
-new PDStream(COSUtils.getAsStream(apn, cosDocument))),
+COSUtils.getAsStream(apn, cosDocument)),
 GRAPHIC_PROCESS);
 }
 } // else ok, nothing to check,this field is optional

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java?rev=1694004r1=1694003r2=1694004view=diff
==
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java 
(original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java 
Tue Aug  4 06:52:19 2015
@@ -319,7 +319,7 @@ public class ExtractImages
   
PDDeviceRGB.INSTANCE.getName().equals(colorSpaceName))
 {
 // RGB or Gray colorspace: get and write the 
unmodifiedJPEG stream
-InputStream data = 
pdImage.getStream().getPartiallyFilteredStream(JPEG);
+InputStream data = 
pdImage.getStream().createInputStream(JPEG);
 IOUtils.copy(data, out);
 IOUtils.closeQuietly(data);
 }

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java?rev=1694004r1=1694003r2=1694004view=diff

svn commit: r1693855 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools: PDFDebugger.java pdfdebugger/streampane/StreamTextView.java pdfdebugger/ui/textsearcher/SearchPanel.java pdfdebugge

2015-08-02 Thread jahewson
Author: jahewson
Date: Mon Aug  3 04:26:52 2015
New Revision: 1693855

URL: http://svn.apache.org/r1693855
Log:
PDFBOX-2530: Clean up Find menu UI

Modified:
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamTextView.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/textsearcher/SearchPanel.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/textsearcher/Searcher.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java?rev=1693855r1=1693854r2=1693855view=diff
==
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java 
(original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java 
Mon Aug  3 04:26:52 2015
@@ -25,6 +25,7 @@ import java.awt.datatransfer.Transferabl
 import java.awt.datatransfer.UnsupportedFlavorException;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowEvent;
 import java.io.ByteArrayOutputStream;
@@ -41,6 +42,7 @@ import java.util.Set;
 import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.JComponent;
+import javax.swing.JFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
@@ -90,33 +92,69 @@ import org.apache.pdfbox.tools.util.File
 import org.apache.pdfbox.tools.util.RecentFiles;
 
 /**
- *
+ * PDF Debugger.
+ * 
  * @author wurtz
  * @author Ben Litchfield
  */
-public class PDFDebugger extends javax.swing.JFrame
+public class PDFDebugger extends JFrame
 {
-private TreeStatusPane statusPane;
-private RecentFiles recentFiles;
-private boolean isPageMode;
-
-private PDDocument document;
-private String currentFilePath;
-
 private static final SetCOSName SPECIALCOLORSPACES =
-new HashSet(Arrays.asList(COSName.INDEXED, COSName.SEPARATION, 
COSName.DEVICEN));
+new HashSetCOSName(Arrays.asList(COSName.INDEXED, 
COSName.SEPARATION, COSName.DEVICEN));
 
 private static final SetCOSName OTHERCOLORSPACES =
-new HashSet(Arrays.asList(COSName.ICCBASED, COSName.PATTERN, 
COSName.CALGRAY, COSName.CALRGB, COSName.LAB));
+new HashSetCOSName(Arrays.asList(COSName.ICCBASED, 
COSName.PATTERN, COSName.CALGRAY,
+ COSName.CALRGB, COSName.LAB));
 
 private static final String PASSWORD = -password;
 
 private static final int SHORCUT_KEY_MASK =
 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
 
+private TreeStatusPane statusPane;
+private RecentFiles recentFiles;
+private boolean isPageMode;
+
+private PDDocument document;
+private String currentFilePath;
+
 private static final String OS_NAME = 
System.getProperty(os.name).toLowerCase();
 private static final boolean IS_MAC_OS = OS_NAME.startsWith(mac os x);
 
+private JScrollPane jScrollPane1;
+private JScrollPane jScrollPane2;
+private javax.swing.JSplitPane jSplitPane1;
+private javax.swing.JTextPane jTextPane1;
+private Tree tree;
+private final JPanel documentPanel = new JPanel();
+private javax.swing.JMenuBar menuBar;
+
+// file menu
+private JMenu fileMenu;
+private JMenuItem openMenuItem;
+private JMenuItem openUrlMenuItem;
+private JMenuItem saveAsMenuItem;
+private JMenuItem saveMenuItem;
+private JMenu recentFilesMenu;
+private JMenuItem exitMenuItem;
+
+// edit menu
+private JMenu editMenu;
+private JMenuItem copyMenuItem;
+private JMenuItem pasteMenuItem;
+private JMenuItem cutMenuItem;
+private JMenuItem deleteMenuItem;
+
+// edit  find meu
+private JMenu findMenu;
+private JMenuItem findMenuItem;
+private JMenuItem findNextMenuItem;
+private JMenuItem findPreviousMenuItem;
+
+// view menu
+private JMenu viewMenu;
+private JMenuItem viewModeItem;
+
 /**
  * Constructor.
  */
@@ -139,26 +177,9 @@ public class PDFDebugger extends javax.s
 jScrollPane2 = new JScrollPane();
 jTextPane1 = new javax.swing.JTextPane();
 menuBar = new javax.swing.JMenuBar();
-fileMenu = new JMenu();
-openMenuItem = new JMenuItem();
-openUrlMenuItem = new JMenuItem();
-saveMenuItem = new JMenuItem();
-saveAsMenuItem = new JMenuItem();
-recentFilesMenu = new JMenu();
-exitMenuItem = new JMenuItem();
-editMenu = new JMenu();
-cutMenuItem = new JMenuItem();
-copyMenuItem = new JMenuItem();
-pasteMenuItem = new JMenuItem

svn commit: r1693821 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane: StreamPane.java StreamTextView.java tooltip/FontToolTip.java

2015-08-02 Thread jahewson
Author: jahewson
Date: Sun Aug  2 18:39:13 2015
New Revision: 1693821

URL: http://svn.apache.org/r1693821
Log:
PDFBOX-2530: Full syntax highlighting and nesting

Modified:

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamTextView.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/tooltip/FontToolTip.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java?rev=1693821r1=1693820r2=1693821view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java
 Sun Aug  2 18:39:13 2015
@@ -17,6 +17,7 @@
 
 package org.apache.pdfbox.tools.pdfdebugger.streampane;
 
+import java.awt.Color;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.ByteArrayOutputStream;
@@ -29,19 +30,25 @@ import javax.swing.JPanel;
 import javax.swing.SwingWorker;
 import javax.swing.text.BadLocationException;
 import javax.swing.text.DefaultStyledDocument;
+import javax.swing.text.Style;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.StyleContext;
 import javax.swing.text.StyledDocument;
 import org.apache.pdfbox.contentstream.operator.Operator;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSBoolean;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSFloat;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.cos.COSString;
 import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.pdfparser.PDFStreamParser;
 import org.apache.pdfbox.pdmodel.PDResources;
 import 
org.apache.pdfbox.tools.pdfdebugger.streampane.tooltip.ToolTipController;
+import org.apache.pdfbox.util.Charsets;
 
 /**
  * @author Khyrul Bashar
@@ -50,6 +57,32 @@ import org.apache.pdfbox.tools.pdfdebugg
  */
 public class StreamPane implements ActionListener
 {
+public static final String BEGIN_TEXT_OBJECT = BT;
+public static final String END_TEXT_OBJECT = ET;
+public static final String SAVE_GRAPHICS_STATE = q;
+public static final String RESTORE_GRAPHICS_STATE = Q;
+public static final String INLINE_IMAGE_BEGIN = BI;
+public static final String IMAGE_DATA = ID;
+public static final String INLINE_IMAGE_END = EI;
+
+private static final StyleContext CONTEXT = 
StyleContext.getDefaultStyleContext();
+private static final Style OPERATOR_STYLE = CONTEXT.addStyle(operator, 
null);
+private static final Style NUMBER_STYLE = CONTEXT.addStyle(number, null);
+private static final Style STRING_STYLE = CONTEXT.addStyle(string, null);
+private static final Style ESCAPE_STYLE = CONTEXT.addStyle(escape, null);
+private static final Style NAME_STYLE = CONTEXT.addStyle(name, null);
+private static final Style INLINE_IMAGE_STYLE = 
CONTEXT.addStyle(inline_image, null);
+
+static
+{
+StyleConstants.setForeground(OPERATOR_STYLE, new Color(25, 55, 156));
+StyleConstants.setForeground(NUMBER_STYLE, new Color(51, 86, 18));
+StyleConstants.setForeground(STRING_STYLE, new Color(128, 35, 32));
+StyleConstants.setForeground(ESCAPE_STYLE, new Color(179, 49, 36));
+StyleConstants.setForeground(NAME_STYLE, new Color(140, 38, 145));
+StyleConstants.setForeground(INLINE_IMAGE_STYLE, new Color(116, 113, 
39));
+}
+
 private final StreamPaneView view;
 private final Stream stream;
 private ToolTipController tTController;
@@ -59,12 +92,13 @@ public class StreamPane implements Actio
 /**
  * Constructor.
  *
- * @param cosStream   COSStream instance.
+ * @param cosStream COSStream instance.
  * @param isContentStream boolean instance. This says if a stream is 
content stream or not.
- * @param isThumb boolean instance. This says if a stream is an thumbnail 
image or not.
- * @param resourcesDicCOSDictionary instance that holds the resource 
dictionary for the stream.
+ * @param isThumb This says if a stream is an thumbnail image or not.
+ * @param resourcesDic COSDictionary instance that holds the resource 
dictionary for the stream.
  */
-public StreamPane(COSStream cosStream, boolean isContentStream, boolean 
isThumb, COSDictionary resourcesDic)
+public StreamPane(COSStream cosStream, boolean isContentStream, boolean 
isThumb,
+  COSDictionary

svn commit: r1693678 - /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java

2015-07-31 Thread jahewson
Author: jahewson
Date: Sat Aug  1 02:25:42 2015
New Revision: 1693678

URL: http://svn.apache.org/r1693678
Log:
PDFBOX-2530: Display content stream strings with correct escapes

Modified:

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java?rev=1693678r1=1693677r2=1693678view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/StreamPane.java
 Sat Aug  1 02:25:42 2015
@@ -228,12 +228,12 @@ public class StreamPane implements Actio
 
 for (Object obj : parser.getTokens())
 {
-writeObject(obj, docu);
+writeToken(obj, docu);
 }
 return docu;
 }
 
-private void writeObject(Object obj, StyledDocument docu)
+private void writeToken(Object obj, StyledDocument docu)
 {
 try
 {
@@ -243,40 +243,72 @@ public class StreamPane implements Actio
 }
 else
 {
-String str;
-if (obj instanceof COSName)
-{
-str = / + ((COSName) obj).getName();
-}
-else if (obj instanceof COSBoolean)
+docu.insertString(docu.getLength(), operandToString(obj) + 
 , null);
+}
+}
+catch (BadLocationException e)
+{
+e.printStackTrace();
+}
+}
+
+private String operandToString(Object obj)
+{
+if (obj instanceof COSName)
+{
+return / + ((COSName) obj).getName();
+}
+else if (obj instanceof COSBoolean)
+{
+return obj.toString();
+}
+else if (obj instanceof COSArray)
+{
+StringBuilder sb = new StringBuilder([ );
+for (COSBase elem : (COSArray) obj)
+{
+sb.append(operandToString(elem));
+sb.append(, );
+}
+if (((COSArray) obj).size()  0)
+{
+sb.delete(sb.lastIndexOf(,), sb.length());
+}
+sb.append(]);
+return sb.toString();
+}
+else if (obj instanceof COSString)
+{
+StringBuilder sb = new StringBuilder();
+sb.append(();
+byte[] bytes = ((COSString) obj).getBytes();
+for (byte b : bytes)
+{
+int chr = b  0xff;
+if (chr  0x20 || chr  0x7e)
 {
-str = obj.toString();
+// non-printable ASCII is shown as an octal escape
+sb.append(String.format(\\%03o, chr));
 }
-else if (obj instanceof COSArray)
+else if (chr == '(' || chr == ')' || chr == '\n' || chr == 
'\r'|| chr == '\t' ||
+chr == '\b' || chr == '\f' || chr == '\\')
 {
-StringBuilder builder = new StringBuilder([ );
-for (COSBase base : (COSArray) obj)
-{
-builder.append(getCOSValue(base));
-builder.append(, );
-}
-if (((COSArray) obj).size()  0)
-{
-builder.delete(builder.lastIndexOf(,), 
builder.length());
-}
-builder.append(]);
-str = builder.toString();
+// PDF reserved characters must be escaped
+sb.append('\\');
+sb.append((char)chr);
 }
 else
 {
-str = getCOSValue(obj);
+sb.append((char)chr);
 }
-docu.insertString(docu.getLength(), str +  , null);
 }
+return sb.append()).toString();
 }
-catch (BadLocationException e)
+else
 {
-e.printStackTrace();
+String str = obj.toString();
+str = str.substring(str.indexOf('{') + 1, str.length() - 1

svn commit: r1692027 - in /pdfbox/trunk: examples/src/main/java/org/apache/pdfbox/examples/util/ pdfbox/src/main/java/org/apache/pdfbox/contentstream/ pdfbox/src/main/java/org/apache/pdfbox/io/ pdfbox

2015-07-20 Thread jahewson
Author: jahewson
Date: Mon Jul 20 21:47:41 2015
New Revision: 1692027

URL: http://svn.apache.org/r1692027
Log:
PDFBOX-2894: Remove COSStreamArray / SequenceRandomAccessRead

Removed:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSStreamArray.java
Modified:

pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/LayerUtility.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPage.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageContentStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType3CharProc.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/form/PDFormXObject.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/PDTilingPattern.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripper.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/text/PDFTextStripperByArea.java

pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestSymmetricKeyEncryption.java

pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessBuffer.java

pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/TestPDPageContentStream.java

pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java

pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/graphic/ICCProfileWrapper.java

pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/CatalogValidationProcess.java

pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/MetadataValidationProcess.java

Modified: 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java?rev=1692027r1=1692026r2=1692027view=diff
==
--- 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java
 (original)
+++ 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/RemoveAllText.java
 Mon Jul 20 21:47:41 2015
@@ -70,7 +70,7 @@ public class RemoveAllText
 }
 for( PDPage page : document.getPages() )
 {
-PDFStreamParser parser = new 
PDFStreamParser(page.getStream());
+PDFStreamParser parser = new PDFStreamParser(page);
 parser.parse();
 ListObject tokens = parser.getTokens();
 ListObject newTokens = new ArrayListObject();

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java?rev=1692027r1=1692026r2=1692027view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDContentStream.java
 Mon Jul 20 21:47:41 2015
@@ -17,7 +17,8 @@
 
 package org.apache.pdfbox.contentstream;
 
-import org.apache.pdfbox.cos.COSStream;
+import java.io.IOException;
+import java.io.InputStream;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.util.Matrix;
@@ -30,9 +31,12 @@ import org.apache.pdfbox.util.Matrix;
 public interface PDContentStream
 {
 /**
- * Returns the underlying COS stream.
+ * Returns this stream's content, if any.
+ * 
+ * @return An InputStream or null.
+ * @throws IOException If the stream could not be read
  */
-COSStream getContentStream();
+InputStream getContents() throws IOException;
 
 /**
  * Returns this stream's resources, if any.

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java?rev=1692027r1

svn commit: r1691656 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io: RandomAccess.java RandomAccessBuffer.java RandomAccessFile.java RandomAccessRead.java RandomAccessWrite.java

2015-07-17 Thread jahewson
Author: jahewson
Date: Fri Jul 17 22:35:24 2015
New Revision: 1691656

URL: http://svn.apache.org/r1691656
Log:
PDFBOX-2301: Split RandomAccessWrite into its own interface

Added:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessWrite.java   
(with props)
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java?rev=1691656r1=1691655r2=1691656view=diff
==
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccess.java 
Fri Jul 17 22:35:24 2015
@@ -16,45 +16,13 @@
  */
 package org.apache.pdfbox.io;
 
-import java.io.IOException;
-
 /**
- * An interface to allow PDF files to be stored completely in memory or
+ * An interface to allow data to be stored completely in memory or
  * to use a scratch file on the disk.
  *
  * @author Ben Litchfield
  */
-public interface RandomAccess extends RandomAccessRead
+public interface RandomAccess extends RandomAccessRead, RandomAccessWrite
 {
-
-/**
- * Write a byte to the stream.
- *
- * @param b The byte to write.
- * @throws IOException If there is an IO error while writing.
- */
-void write(int b) throws IOException;
-
-/**
- * Write a buffer of data to the stream.
- *
- * @param b The buffer to get the data from.
- * @throws IOException If there is an error while writing the data.
- */
-void write(byte[] b) throws IOException;
-
-/**
- * Write a buffer of data to the stream.
- *
- * @param b The buffer to get the data from.
- * @param offset An offset into the buffer to get the data from.
- * @param length The length of data to write.
- * @throws IOException If there is an error while writing the data.
- */
-void write(byte[] b, int offset, int length) throws IOException;
-
-/**
- * Clears all data of the buffer.
- */
-void clear() throws IOException;
+// super interface for both read and write
 }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java?rev=1691656r1=1691655r2=1691656view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBuffer.java 
Fri Jul 17 22:35:24 2015
@@ -16,18 +16,16 @@
  */
 package org.apache.pdfbox.io;
 
-import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- * An implementation of the RandomAccess interface to store a pdf in memory.
+ * An implementation of the RandomAccess interface to store data in memory.
  * The data will be stored in chunks organized in an ArrayList.
- *
  */
-public class RandomAccessBuffer implements RandomAccess, Closeable, Cloneable
+public class RandomAccessBuffer implements RandomAccess, Cloneable
 {
 // default chunk size is 1kb
 private static final int DEFAULT_CHUNK_SIZE = 1024;

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java?rev=1691656r1=1691655r2=1691656view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java 
(original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessFile.java 
Fri Jul 17 22:35:24 2015
@@ -16,18 +16,17 @@
  */
 package org.apache.pdfbox.io;
 
-import java.io.Closeable;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 
 /**
- * An interface to allow temp PDF data to be stored in a scratch
- * file on the disk to reduce memory consumption.
+ * A RandomAccess implementation whcih allows data to be stored in a scratch 
file on the disk to
+ * reduce memory consumption.
  *
  * @author Ben Litchfield
  */
-public class RandomAccessFile implements RandomAccess, Closeable
+public class RandomAccessFile implements RandomAccess
 {
 private final java.io.RandomAccessFile ras;
 private boolean isClosed;

Modified: 
pdfbox/trunk/pdfbox/src/main/java

svn commit: r1691465 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java

2015-07-16 Thread jahewson
Author: jahewson
Date: Fri Jul 17 00:21:35 2015
New Revision: 1691465

URL: http://svn.apache.org/r1691465
Log:
PDFBOX-2862: Avoid concurrent access of nameToUnicode map

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java?rev=1691465r1=1691464r2=1691465view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
 Fri Jul 17 00:21:35 2015
@@ -91,8 +91,12 @@ public final class GlyphList
 return ZAPF_DINGBATS;
 }
 
+// read-only mappings, never modified outside GlyphList's constructor
 private final MapString, String nameToUnicode;
 private final MapString, String unicodeToName;
+
+// additional read/write cache for uni names
+private final MapString, String uniNameToUnicodeCache = new 
HashMapString, String();
 
 /**
  * Creates a new GlyphList from a glyph list file.
@@ -217,6 +221,13 @@ public final class GlyphList
 }
 
 String unicode = nameToUnicode.get(name);
+if (unicode != null)
+{
+return unicode;
+}
+
+// separate read/write cache for thread safety
+unicode = uniNameToUnicodeCache.get(name);
 if (unicode == null)
 {
 // test if we have a suffix and if so remove it
@@ -270,7 +281,7 @@ public final class GlyphList
 LOG.warn(Not a number in Unicode character name:  + 
name);
 }
 }
-nameToUnicode.put(name, unicode);
+uniNameToUnicodeCache.put(name, unicode);
 }
 return unicode;
 }




svn commit: r1691467 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java

2015-07-16 Thread jahewson
Author: jahewson
Date: Fri Jul 17 00:42:12 2015
New Revision: 1691467

URL: http://svn.apache.org/r1691467
Log:
PDFBOX-2881: Simplistic computation of axial shading bounds

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java?rev=1691467r1=1691466r2=1691467view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 Fri Jul 17 00:42:12 2015
@@ -20,7 +20,6 @@ import java.awt.PaintContext;
 import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
@@ -119,15 +118,11 @@ public class AxialShadingContext extends
 // shading space - device space
 AffineTransform shadingToDevice = (AffineTransform)xform.clone();
 shadingToDevice.concatenate(matrix.createAffineTransform());
-
-// convert the start and end coordinates to device space
-Point2D p0 = new Point2D.Double(coords[0], coords[1]);
-Point2D p1 = new Point2D.Double(coords[2], coords[3]);
-shadingToDevice.transform(p0, p0);
-shadingToDevice.transform(p1, p1);
-
-// the distance between them is number of steps
-factor = (int)Math.round(p0.distance(p1));
+
+// worst case for the number of steps is opposite diagonal corners, so 
use that
+double dist = Math.sqrt(Math.pow(deviceBounds.getMaxX() - 
deviceBounds.getMinX(), 2) +
+Math.pow(deviceBounds.getMaxY() - 
deviceBounds.getMinX(), 2));
+factor = (int) Math.ceil(dist);
 
 // build the color table for the given number of steps
 colorTable = calcColorTable();




svn commit: r1691301 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java

2015-07-15 Thread jahewson
Author: jahewson
Date: Thu Jul 16 01:23:54 2015
New Revision: 1691301

URL: http://svn.apache.org/r1691301
Log:
PDFBOX-2842: Additional API for retrieving font box fonts from CIDFontType2

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java?rev=1691301r1=1691300r2=1691301view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
 Thu Jul 16 01:23:54 2015
@@ -224,6 +224,21 @@ public class PDCIDFontType0 extends PDCI
 }
 
 /**
+ * Returns the embedded or substituted font.
+ */
+public FontBoxFont getFontBoxFont()
+{
+if (cidFont != null)
+{
+return cidFont;
+}
+else
+{
+return t1Font;
+}
+}
+
+/**
  * Returns the Type 2 charstring for the given CID, or null if the 
substituted font does not
  * contain Type 2 charstrings.
  *




svn commit: r1691262 - in /pdfbox/trunk: pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java

2015-07-15 Thread jahewson
Author: jahewson
Date: Wed Jul 15 19:52:44 2015
New Revision: 1691262

URL: http://svn.apache.org/r1691262
Log:
PDFBOX-2884: Handle invalid font dictionaries

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java

pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java?rev=1691262r1=1691261r2=1691262view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontMapper.java
 Wed Jul 15 19:52:44 2015
@@ -402,6 +402,12 @@ final class FontMapper
  */
 private static FontBoxFont findFont(FontFormat format, String 
postScriptName)
 {
+// handle damaged PDFs, see PDFBOX-2884
+if (postScriptName == null)
+{
+return null;
+}
+
 // make sure the font provider is initialized
 if (fontProvider == null)
 {

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java?rev=1691262r1=1691261r2=1691262view=diff
==
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/content/PreflightContentStream.java
 Wed Jul 15 19:52:44 2015
@@ -21,16 +21,11 @@
 
 package org.apache.pdfbox.preflight.content;
 
-import static 
org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_ENCODING_ERROR;
-import static 
org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_UNKNOWN_FONT_REF;
-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.contentstream.operator.Operator;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSFloat;
@@ -48,7 +43,12 @@ import org.apache.pdfbox.preflight.Valid
 import org.apache.pdfbox.preflight.exception.ValidationException;
 import org.apache.pdfbox.preflight.font.container.FontContainer;
 import org.apache.pdfbox.preflight.font.util.GlyphException;
-import org.apache.pdfbox.contentstream.operator.Operator;
+
+
+import static 
org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_ENCODING_ERROR;
+import static 
org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_UNKNOWN_FONT_REF;
+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;
 
 public class PreflightContentStream extends PreflightStreamEngine
 {
@@ -297,7 +297,7 @@ public class PreflightContentStream exte
 if (font == null)
 {
 // Unable to decode the Text without Font
-registerError(Text operator can't be process without Font, 
ERROR_FONTS_UNKNOWN_FONT_REF);
+registerError(Text operator can't be processed without a Font, 
ERROR_FONTS_UNKNOWN_FONT_REF);
 return;
 }
 
@@ -310,8 +310,14 @@ public class PreflightContentStream exte
 else if (fontContainer == null)
 {
 // Font Must be embedded if the RenderingMode isn't 3
-registerError(font.getName() +  is unknown wasn't found by the 
FontHelperValidator,
-ERROR_FONTS_UNKNOWN_FONT_REF);
+if (font.getName() == null)
+{
+registerError(invalid font dictionary, 
ERROR_FONTS_UNKNOWN_FONT_REF);
+}
+else
+{
+registerError(font ' + font.getName() + ' is missing, 
ERROR_FONTS_UNKNOWN_FONT_REF);
+}
 return;
 }
 else if (!fontContainer.isValid()  
!fontContainer.errorsAleadyMerged())




svn commit: r1691261 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form: PDAcroForm.java PDField.java PDFieldFactory.java PDNonTerminalField.java

2015-07-15 Thread jahewson
Author: jahewson
Date: Wed Jul 15 19:37:17 2015
New Revision: 1691261

URL: http://svn.apache.org/r1691261
Log:
PDFBOX-2885: Handle erroneous non-field objects in AcroForms

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDNonTerminalField.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java?rev=1691261r1=1691260r2=1691261view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
 Wed Jul 15 19:37:17 2015
@@ -173,7 +173,10 @@ public final class PDAcroForm implements
 if (element != null)
 {
 PDField field = PDField.fromDictionary(this, element, null);
-pdFields.add(field);
+if (field != null)
+{
+pdFields.add(field);
+}
 }
 }
 return new COSArrayListPDField(pdFields, cosFields);
@@ -256,23 +259,25 @@ public final class PDAcroForm implements
 fieldName.getString().equals(nameSubSection[0]))
 {
 PDField root = PDField.fromDictionary(this, element, 
null);
-
-if (nameSubSection.length  1)
+if (root != null)
 {
-PDField kid = root.findKid(nameSubSection, 1);
-if (kid != null)
+if (nameSubSection.length  1)
 {
-retval = kid;
+PDField kid = root.findKid(nameSubSection, 1);
+if (kid != null)
+{
+retval = kid;
+}
+else
+{
+retval = root;
+}
 }
 else
 {
 retval = root;
 }
 }
-else
-{
-retval = root;
-}
 }
 }
 }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java?rev=1691261r1=1691260r2=1691261view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java
 Wed Jul 15 19:37:17 2015
@@ -289,7 +289,7 @@ public abstract class PDField implements
 {
 retval = PDField.fromDictionary(acroForm, kidDictionary,
 (PDNonTerminalField)this);
-if (name.length  nameIndex + 1)
+if (retval != null  name.length  nameIndex + 1)
 {
 retval = retval.findKid(name, nameIndex + 1);
 }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java?rev=1691261r1=1691260r2=1691261view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDFieldFactory.java
 Wed Jul 15 19:37:17 2015
@@ -61,10 +61,15 @@ final class PDFieldFactory
 {
 return createButtonSubType(form, field, parent);
 }
-else
+else if (field.containsKey(COSName.KIDS))
 {
 return new PDNonTerminalField(form, field, parent);
 }
+else

svn commit: r1691272 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading: AxialShadingContext.java RadialShadingContext.java

2015-07-15 Thread jahewson
Author: jahewson
Date: Wed Jul 15 20:45:07 2015
New Revision: 1691272

URL: http://svn.apache.org/r1691272
Log:
PDFBOX-2881: Take into account the angle of the shading

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java?rev=1691272r1=1691271r2=1691272view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 Wed Jul 15 20:45:07 2015
@@ -20,6 +20,7 @@ import java.awt.PaintContext;
 import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
@@ -115,14 +116,23 @@ public class AxialShadingContext extends
 LOG.error(ex, ex);
 }
 
-// get the number of steps
-factor = (int) Math.max(Math.abs(deviceBounds.getWidth()),
-Math.abs(deviceBounds.getHeight()));
+// shading space - device space
+AffineTransform shadingToDevice = (AffineTransform)xform.clone();
+shadingToDevice.concatenate(matrix.createAffineTransform());
+
+// convert the start and end coordinates to device space
+Point2D p0 = new Point2D.Double(coords[0], coords[1]);
+Point2D p1 = new Point2D.Double(coords[2], coords[3]);
+shadingToDevice.transform(p0, p0);
+shadingToDevice.transform(p1, p1);
+
+// the distance between them is number of steps
+factor = (int)Math.round(p0.distance(p1));
 
 // build the color table for the given number of steps
 colorTable = calcColorTable();
 }
-
+
 /**
  * Calculate the color on the axial line and store them in an array.
  *

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java?rev=1691272r1=1691271r2=1691272view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
 Wed Jul 15 20:45:07 2015
@@ -20,6 +20,7 @@ import java.awt.PaintContext;
 import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
@@ -121,9 +122,18 @@ public class RadialShadingContext extend
 LOG.error(ex, ex);
 }
 
-// get the number of steps
-factor = (int) Math.max(Math.abs(deviceBounds.getWidth()),
-Math.abs(deviceBounds.getHeight()));
+// shading space - device space
+AffineTransform shadingToDevice = (AffineTransform)xform.clone();
+shadingToDevice.concatenate(matrix.createAffineTransform());
+
+// convert connects two circles' centers coordinates to device space
+Point2D p0 = new Point2D.Double(coords[0], coords[1]);
+Point2D p1 = new Point2D.Double(coords[3], coords[4]);
+shadingToDevice.transform(p0, p0);
+shadingToDevice.transform(p1, p1);
+
+// the distance between them is number of steps
+factor = (int)Math.round(p0.distance(p1));
 
 // build the color table for the given number of steps
 colorTable = calcColorTable();




svn commit: r1691294 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java

2015-07-15 Thread jahewson
Author: jahewson
Date: Wed Jul 15 23:39:55 2015
New Revision: 1691294

URL: http://svn.apache.org/r1691294
Log:
PDFBOX-2881: Simplistic computation of radial shading bounds

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java?rev=1691294r1=1691293r2=1691294view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
 Wed Jul 15 23:39:55 2015
@@ -20,7 +20,6 @@ import java.awt.PaintContext;
 import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
@@ -126,14 +125,10 @@ public class RadialShadingContext extend
 AffineTransform shadingToDevice = (AffineTransform)xform.clone();
 shadingToDevice.concatenate(matrix.createAffineTransform());
 
-// convert connects two circles' centers coordinates to device space
-Point2D p0 = new Point2D.Double(coords[0], coords[1]);
-Point2D p1 = new Point2D.Double(coords[3], coords[4]);
-shadingToDevice.transform(p0, p0);
-shadingToDevice.transform(p1, p1);
-
-// the distance between them is number of steps
-factor = (int)Math.round(p0.distance(p1));
+// worst case for the number of steps is opposite diagonal corners, so 
use that
+double dist = Math.sqrt(Math.pow(deviceBounds.getMaxX() - 
deviceBounds.getMinX(), 2) +
+Math.pow(deviceBounds.getMaxY() - 
deviceBounds.getMinX(), 2));
+factor = (int) Math.ceil(dist);
 
 // build the color table for the given number of steps
 colorTable = calcColorTable();




svn commit: r1691093 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading: AxialShadingContext.java AxialShadingPaint.java RadialShadingContext.java RadialShadingPaint.ja

2015-07-14 Thread jahewson
Author: jahewson
Date: Tue Jul 14 21:54:14 2015
New Revision: 1691093

URL: http://svn.apache.org/r1691093
Log:
PDFBOX-2881: Calculate the number of steps using the device bounds

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java?rev=1691093r1=1691092r2=1691093view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 Tue Jul 14 21:54:14 2015
@@ -17,9 +17,9 @@
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
 import java.awt.PaintContext;
+import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
@@ -50,7 +50,7 @@ public class AxialShadingContext extends
 private final double x1x0;
 private final double y1y0;
 private final float d1d0;
-private double denom;
+private final double denom;
 
 private final int factor;
 private final int[] colorTable;
@@ -64,10 +64,11 @@ public class AxialShadingContext extends
  * @param colorModel the color model to be used
  * @param xform transformation for user to device space
  * @param matrix the pattern matrix concatenated with that of the parent 
content stream
- * @throws java.io.IOException if there is an error getting the color 
space or doing color conversion.
+ * @param deviceBounds the bounds of the area to paint, in device units
+ * @throws IOException if there is an error getting the color space or 
doing color conversion.
  */
 public AxialShadingContext(PDShadingType2 shading, ColorModel colorModel, 
AffineTransform xform,
-   Matrix matrix) throws IOException
+   Matrix matrix, Rectangle deviceBounds) throws 
IOException
 {
 super(shading, colorModel, xform, matrix);
 this.axialShadingType = shading;
@@ -101,7 +102,6 @@ public class AxialShadingContext extends
 y1y0 = coords[3] - coords[1];
 d1d0 = domain[1] - domain[0];
 denom = Math.pow(x1x0, 2) + Math.pow(y1y0, 2);
-double longestDistance = Math.sqrt(denom);
 
 try
 {
@@ -115,12 +115,11 @@ public class AxialShadingContext extends
 LOG.error(ex, ex);
 }
 
-// transform the distance to actual pixel space
-// use transform, because xform.getScaleX() does not return correct 
scaling on 90° rotated matrix
-Point2D point = new Point2D.Double(longestDistance, longestDistance);
-matrix.transform(point);
-xform.transform(point, point);
-factor = (int) Math.max(Math.abs(point.getX()), 
Math.abs(point.getY()));
+// get the number of steps
+factor = (int) Math.max(Math.abs(deviceBounds.getWidth()),
+Math.abs(deviceBounds.getHeight()));
+
+// build the color table for the given number of steps
 colorTable = calcColorTable();
 }
 

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java?rev=1691093r1=1691092r2=1691093view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
 Tue Jul 14 21:54:14 2015
@@ -64,7 +64,7 @@ public class AxialShadingPaint implement
 {
 try
 {
-return new AxialShadingContext(shading, cm, xform, matrix);
+return new AxialShadingContext(shading, cm, xform, matrix, 
deviceBounds);
 }
 catch (IOException e)
 {

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org

svn commit: r1691077 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger: streampane/Stream.java ui/Tree.java

2015-07-14 Thread jahewson
Author: jahewson
Date: Tue Jul 14 20:39:38 2015
New Revision: 1691077

URL: http://svn.apache.org/r1691077
Log:
PDFBOX-2530: Comma separation for filter labels

Modified:

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java

pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java?rev=1691077r1=1691076r2=1691077view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/streampane/Stream.java
 Tue Jul 14 20:39:38 2015
@@ -91,10 +91,6 @@ class Stream
 COSBase filters = stream.getFilters();
 if (filters != null)
 {
-if (sb.length()  0)
-{
-sb.append(, );
-}
 if (filters instanceof COSName)
 {
 sb.append(((COSName) filters).getName());
@@ -104,6 +100,10 @@ class Stream
 COSArray filterArray = (COSArray) filters;
 for (int i = 0; i  filterArray.size(); i++)
 {
+if (i  0)
+{
+sb.append(, );
+}
 sb.append(((COSName) filterArray.get(i)).getName());
 }
 }

Modified: 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java?rev=1691077r1=1691076r2=1691077view=diff
==
--- 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java
 (original)
+++ 
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/pdfdebugger/ui/Tree.java
 Tue Jul 14 20:39:38 2015
@@ -181,10 +181,6 @@ public class Tree extends JTree
 COSBase filters = cosStream.getFilters();
 if (filters != null)
 {
-if (sb.length()  0)
-{
-sb.append(, );
-}
 if (filters instanceof COSName)
 {
 sb.append(((COSName) filters).getName());
@@ -194,13 +190,16 @@ public class Tree extends JTree
 COSArray filterArray = (COSArray) filters;
 for (int i = 0; i  filterArray.size(); i++)
 {
+if (i  0)
+{
+sb.append(, );
+}
 sb.append(((COSName) filterArray.get(i)).getName());
 }
 }
 }
 return sb.toString();
 }
-
 
 /**
  * Produce JMenuItem that saves unfiltered stream




svn commit: r1691110 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java

2015-07-14 Thread jahewson
Author: jahewson
Date: Tue Jul 14 23:43:47 2015
New Revision: 1691110

URL: http://svn.apache.org/r1691110
Log:
PDFBOX-2842: Re-build stale font cache

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java

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=1691110r1=1691109r2=1691110view=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
 Tue Jul 14 23:43:47 2015
@@ -214,7 +214,7 @@ final class FileSystemFontProvider exten
 
 // load cached FontInfo objects
 ListFSFontInfo cachedInfos = loadCache(files);
-if (cachedInfos.size()  0)
+if (cachedInfos != null  cachedInfos.size()  0)
 {
 fontInfoList.addAll(cachedInfos);
 }
@@ -304,19 +304,19 @@ final class FileSystemFontProvider exten
 catch (ClassNotFoundException e)
 {
 LOG.error(Error loading font cache, will be re-built, e);
-break;
+return null;
 }
 catch (IOException e)
 {
 LOG.error(Error loading font cache, will be re-built, e);
-break;
+return null;
 }
 }
 else
 {
 // re-build the entire cache if we encounter un-cached fonts 
(could be optimised)
 LOG.warn(New fonts found, font cache will be re-built);
-return new ArrayListFSFontInfo();
+return null;
 }
 }
 return results;




svn commit: r1691119 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: PDSimpleFont.java PDTrueTypeFont.java

2015-07-14 Thread jahewson
Author: jahewson
Date: Wed Jul 15 00:31:35 2015
New Revision: 1691119

URL: http://svn.apache.org/r1691119
Log:
PDFBOX-2842: Non-symbolic TTFs use StandardEncoding as their built-in

Modified:

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java

pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java?rev=1691119r1=1691118r2=1691119view=diff
==
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
 Wed Jul 15 00:31:35 2015
@@ -28,7 +28,6 @@ import org.apache.fontbox.FontBoxFont;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.pdmodel.font.encoding.BuiltInEncoding;
 import org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding;
 import org.apache.pdfbox.pdmodel.font.encoding.Encoding;
 import org.apache.pdfbox.pdmodel.font.encoding.GlyphList;
@@ -133,25 +132,8 @@ public abstract class PDSimpleFont exten
 this.encoding = readEncodingFromFont();
 }
 
-// TTFs have a built-in encoding, but if the font is non-symbolic then 
we instead
-// have Standard Encoding
-if (this.encoding instanceof BuiltInEncoding 
-getSymbolicFlag() != null !getSymbolicFlag())
-{
-this.encoding = StandardEncoding.INSTANCE;
-}
-
 // normalise the standard 14 name, e.g Symbol,Italic - Symbol
 String standard14Name = Standard14Fonts.getMappedFontName(getName());
-
-// TTFs may have a built-in encoding, but if the font is standard 14 
then we know
-// it's Standard Encoding
-if (this.encoding instanceof BuiltInEncoding  isStandard14() 
-!standard14Name.equals(Symbol) 
-!standard14Name.equals(ZapfDingbats))
-{
-this.encoding = StandardEncoding.INSTANCE;
-}
 
 // assign the glyph list based on the font
 if (ZapfDingbats.equals(standard14Name))

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=1691119r1=1691118r2=1691119view=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
 Wed Jul 15 00:31:35 2015
@@ -41,6 +41,7 @@ import org.apache.pdfbox.pdmodel.font.en
 import org.apache.pdfbox.pdmodel.font.encoding.Encoding;
 import org.apache.pdfbox.pdmodel.font.encoding.GlyphList;
 import org.apache.pdfbox.pdmodel.font.encoding.MacOSRomanEncoding;
+import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding;
 import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding;
 import org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding;
 
@@ -220,6 +221,25 @@ public class PDTrueTypeFont extends PDSi
 }
 else
 {
+// non-symbolic fonts don't have a built-in encoding per se, but 
there encoding is
+// assumed to be StandardEncoding by the PDF spec unless an 
explicit Encoding is present
+// which will override this anyway
+if (getSymbolicFlag() != null !getSymbolicFlag())
+{
+return StandardEncoding.INSTANCE;
+}
+
+// normalise the standard 14 name, e.g Symbol,Italic - Symbol
+String standard14Name = 
Standard14Fonts.getMappedFontName(getName());
+
+// likewise, if the font is standard 14 then we know it's Standard 
Encoding
+if (isStandard14() 
+!standard14Name.equals(Symbol) 
+!standard14Name.equals(ZapfDingbats))
+{
+return StandardEncoding.INSTANCE;
+}
+
 // synthesize an encoding, so that getEncoding() is always usable
 PostScriptTable post = ttf.getPostScript();
 MapInteger, String codeToName = new HashMapInteger, String();




svn propchange: r1690799 - svn:log

2015-07-13 Thread jahewson
Author: jahewson
Revision: 1690799
Modified property: svn:log

Modified: svn:log at Mon Jul 13 19:30:44 2015
--
--- svn:log (original)
+++ svn:log Mon Jul 13 19:30:44 2015
@@ -1 +1 @@
-private_annotations_flags
+PDFBOX-2880: Allow Type 1 embedding without AFM file



  1   2   3   4   5   6   7   8   >