svn commit: r1831310 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel: PDAbstractContentStream.java PDAppearanceContentStream.java PDFormContentStream.java PDPageContentStream.java PD
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/
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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/
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
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
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
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
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
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
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
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
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 HewsonAuthored: 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/
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
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
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
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/
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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/
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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