svn commit: r1565412 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
Author: tilman Date: Thu Feb 6 19:15:16 2014 New Revision: 1565412 URL: http://svn.apache.org/r1565412 Log: PDFBOX-1888: close ImageInputStream as suggested by Tim Cameron Task #PDFBOX-1888 - JBIG2Filter is creating an ImageInputStream (with temp file) and not closing it Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java?rev=1565412r1=1565411r2=1565412view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Thu Feb 6 19:15:16 2014 @@ -28,6 +28,7 @@ import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -76,15 +77,15 @@ public class JBIG2Filter implements Filt { st = (COSStream) decodeP.getDictionaryObject(COSName.JBIG2_GLOBALS); } -if(st != null) +if (st != null) { -reader.setInput(ImageIO.createImageInputStream(new SequenceInputStream(st.getFilteredStream(),compressedData))); -} -else -{ -reader.setInput(ImageIO.createImageInputStream(compressedData)); +compressedData = new SequenceInputStream(st.getFilteredStream(), +compressedData); } +ImageInputStream iis = ImageIO.createImageInputStream(compressedData); +reader.setInput(iis); BufferedImage bi = reader.read(0); +iis.close(); reader.dispose(); if ( bi != null ) {
svn commit: r1565545 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java
Author: tilman Date: Fri Feb 7 06:14:06 2014 New Revision: 1565545 URL: http://svn.apache.org/r1565545 Log: PDFBOX-1880: Type 1 Shading must not ignore current transformation matrix Task #PDFBOX-1880 - [PATCH] Type 1 Shading must not ignore current transformation matrix Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java?rev=1565545r1=1565544r2=1565545view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java Fri Feb 7 06:14:06 2014 @@ -121,9 +121,11 @@ class Type1ShadingContext implements Pai try { -// get inverse transform to be independent of current user / device space +// get inverse transform to be independent of +// shading matrix and current user / device space // when handling actual pixels in getRaster() rat = matrix.createAffineTransform().createInverse(); + rat.concatenate(currentTransformationMatrix.createAffineTransform().createInverse()); rat.concatenate(xform.createInverse()); } catch (NoninvertibleTransformException ex)
svn commit: r1566030 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading: GouraudShadingContext.java GouraudTriangle.java
Author: tilman Date: Sat Feb 8 15:36:50 2014 New Revision: 1566030 URL: http://svn.apache.org/r1566030 Log: PDFBOX-1887: Bugfixes + Optimization of Gouraud Shading Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java?rev=1566030r1=1566029r2=1566030view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java Sat Feb 8 15:36:50 2014 @@ -152,7 +152,7 @@ public abstract class GouraudShadingCont * * @throws IOException if something went wrong */ -protected Vertex readVertex(ImageInputStream input, byte flag, long maxSrcCoord, long maxSrcColor, +protected Vertex readVertex(ImageInputStream input, byte flag, long maxSrcCoord, long maxSrcColor, PDRange rangeX, PDRange rangeY, PDRange[] colRangeTab) throws IOException { float[] colorComponentTab = new float[numberOfColorComponents]; @@ -165,7 +165,7 @@ public abstract class GouraudShadingCont { int color = (int) input.readBits(bitsPerColorComponent); colorComponentTab[n] = interpolate(color, maxSrcColor, colRangeTab[n].getMin(), colRangeTab[n].getMax()); -LOG.debug(color[ + n + ]: + color + / + String.format(%02x, color) +LOG.debug(color[ + n + ]: + color + / + String.format(%02x, color) + - color[ + n + ]: + colorComponentTab[n]); } return new Vertex(flag, new Point2D.Double(dstX, dstY), colorComponentTab); @@ -248,7 +248,7 @@ public abstract class GouraudShadingCont * @param dstMax max dst value * @return interpolated value */ -private float interpolate(float src, float srcMax, float dstMin, float dstMax) +private float interpolate(float src, long srcMax, float dstMin, float dstMax) { return dstMin + (src * (dstMax - dstMin) / srcMax); } @@ -260,68 +260,68 @@ public abstract class GouraudShadingCont public final Raster getRaster(int x, int y, int w, int h) { WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h); -if (!triangleList.isEmpty()) +int[] data = new int[w * h * 4]; +for (int row = 0; row h; row++) { -int[] data = new int[w * h * 4]; -for (int row = 0; row h; row++) +for (int col = 0; col w; col++) { -for (int col = 0; col w; col++) +Point2D p = new Point(x + col, y + row); +GouraudTriangle triangle = null; +for (GouraudTriangle tryTriangle : triangleList) { -Point2D p = new Point(x + col, y + row); -float[] values = new float[numberOfColorComponents]; +if (tryTriangle.contains(p)) +{ +triangle = tryTriangle; +break; +} +} +float[] values; +if (triangle != null) +{ +double[] weights = triangle.getWeights(p); +values = new float[numberOfColorComponents]; +for (int i = 0; i numberOfColorComponents; ++i) +{ +values[i] = (float) (triangle.colorA[i] * weights[0] ++ triangle.colorB[i] * weights[1] ++ triangle.colorC[i] * weights[2]); +} +} +else +{ +if (background != null) +{ +values = background; +} +else +{ +continue; +} +} -//TODO test optmization after ch14.pdf works: -// check whether point is in combined java area -for (GouraudTriangle triangle : triangleList) +//TODO handle function +// convert color values from shading colorspace to RGB +if (shadingColorSpace != null) +{ +if (shadingTinttransform != null) { -if (triangle.contains(p
svn commit: r1566032 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading: GouraudShadingContext.java GouraudTriangle.java
Author: tilman Date: Sat Feb 8 15:41:03 2014 New Revision: 1566032 URL: http://svn.apache.org/r1566032 Log: PDFBOX-1887: Bugfixes + Optimization of Gouraud Shading Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java?rev=1566032r1=1566031r2=1566032view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java Sat Feb 8 15:41:03 2014 @@ -152,7 +152,7 @@ public abstract class GouraudShadingCont * * @throws IOException if something went wrong */ -protected Vertex readVertex(ImageInputStream input, byte flag, long maxSrcCoord, long maxSrcColor, +protected Vertex readVertex(ImageInputStream input, byte flag, long maxSrcCoord, long maxSrcColor, PDRange rangeX, PDRange rangeY, PDRange[] colRangeTab) throws IOException { float[] colorComponentTab = new float[numberOfColorComponents]; @@ -165,7 +165,7 @@ public abstract class GouraudShadingCont { int color = (int) input.readBits(bitsPerColorComponent); colorComponentTab[n] = interpolate(color, maxSrcColor, colRangeTab[n].getMin(), colRangeTab[n].getMax()); -LOG.debug(color[ + n + ]: + color + / + String.format(%02x, color) +LOG.debug(color[ + n + ]: + color + / + String.format(%02x, color) + - color[ + n + ]: + colorComponentTab[n]); } return new Vertex(flag, new Point2D.Double(dstX, dstY), colorComponentTab); @@ -192,8 +192,6 @@ public abstract class GouraudShadingCont // transform from shading to user space ctm.createAffineTransform().transform(v.point, v.point); // transform from user to device space -// move the 0,0-reference including the y-translation from user to device space -v.point.setLocation(v.point.getX(), pageHeight - v.point.getY()); xform.transform(v.point, v.point); } else @@ -222,6 +220,7 @@ public abstract class GouraudShadingCont /** * {@inheritDoc} */ +@Override public void dispose() { triangleList = null; @@ -234,6 +233,7 @@ public abstract class GouraudShadingCont /** * {@inheritDoc} */ +@Override public final ColorModel getColorModel() { return outputColorModel; @@ -248,7 +248,7 @@ public abstract class GouraudShadingCont * @param dstMax max dst value * @return interpolated value */ -private float interpolate(float src, float srcMax, float dstMin, float dstMax) +private float interpolate(float src, long srcMax, float dstMin, float dstMax) { return dstMin + (src * (dstMax - dstMin) / srcMax); } @@ -256,71 +256,72 @@ public abstract class GouraudShadingCont /** * {@inheritDoc} */ +@Override public final Raster getRaster(int x, int y, int w, int h) { -float[] values = new float[numberOfColorComponents]; WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h); -if (!triangleList.isEmpty()) +int[] data = new int[w * h * 4]; +for (int row = 0; row h; row++) { -int[] data = new int[w * h * 4]; -for (int row = 0; row h; row++) +for (int col = 0; col w; col++) { -for (int col = 0; col w; col++) +Point2D p = new Point(x + col, y + row); +GouraudTriangle triangle = null; +for (GouraudTriangle tryTriangle : triangleList) +{ +if (tryTriangle.contains(p)) +{ +triangle = tryTriangle; +break; +} +} +float[] values; +if (triangle != null) { -Point2D p = new Point(x + col, y + row); +double[] weights = triangle.getWeights(p); +values = new float[numberOfColorComponents]; +for (int i = 0; i numberOfColorComponents; ++i) +{ +values[i] = (float) (triangle.colorA[i] * weights[0
svn commit: r1566051 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
Author: tilman Date: Sat Feb 8 17:05:17 2014 New Revision: 1566051 URL: http://svn.apache.org/r1566051 Log: PDFBOX-1887: removed @override because Java 6 which doesn't support @Override annotations for methods inherited when implementing an interface Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java?rev=1566051r1=1566050r2=1566051view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java Sat Feb 8 17:05:17 2014 @@ -220,7 +220,6 @@ public abstract class GouraudShadingCont /** * {@inheritDoc} */ -@Override public void dispose() { triangleList = null; @@ -233,7 +232,6 @@ public abstract class GouraudShadingCont /** * {@inheritDoc} */ -@Override public final ColorModel getColorModel() { return outputColorModel; @@ -256,7 +254,6 @@ public abstract class GouraudShadingCont /** * {@inheritDoc} */ -@Override public final Raster getRaster(int x, int y, int w, int h) { WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h);
svn commit: r1566713 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Mon Feb 10 19:41:16 2014 New Revision: 1566713 URL: http://svn.apache.org/r1566713 Log: PDFBOX-1897: fix javadoc error Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1566713r1=1566712r2=1566713view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Mon Feb 10 19:41:16 2014 @@ -121,7 +121,7 @@ public class ImageIOUtil * @param imageFormat the target format (ex. png) * @param outputStream the output stream to be used for writing * @param resolution resolution to be used when writing the image - * @param quality quality to be used when compressing the image (0 quality 1.0f) + * @param quality quality to be used when compressing the image (0 lt; quality lt; 1.0f) * * @return true if the images were produced, false if there was an error * @throws IOException if an I/O error occurs
svn commit: r1567317 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
Author: tilman Date: Tue Feb 11 19:29:33 2014 New Revision: 1567317 URL: http://svn.apache.org/r1567317 Log: PDFBOX-1909: Close open streams Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java?rev=1567317r1=1567316r2=1567317view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java Tue Feb 11 19:29:33 2014 @@ -44,14 +44,13 @@ import org.apache.pdfbox.pdmodel.graphic /** * An image class for CCITT Fax. - * + * * @author a href=b...@benlitchfield.comBen Litchfield/a * @author paul king - * + * */ public class PDCcitt extends PDXObjectImage { - private static final ListString FAX_FILTERS = new ArrayListString(); static @@ -62,7 +61,7 @@ public class PDCcitt extends PDXObjectIm /** * Standard constructor. - * + * * @param ccitt The PDStream that already contains all ccitt information. */ public PDCcitt(PDStream ccitt) @@ -73,12 +72,11 @@ public class PDCcitt extends PDXObjectIm /** * Construct from a tiff file. - * + * * @param doc The document to create the image as part of. * @param raf The random access TIFF file which contains a suitable CCITT compressed image * @throws IOException If there is an error reading the tiff data. */ - public PDCcitt(PDDocument doc, RandomAccess raf) throws IOException { super(new PDStream(doc), tiff); @@ -103,7 +101,7 @@ public class PDCcitt extends PDXObjectIm /** * Returns an image of the CCITT Fax, or null if TIFFs are not supported. (Requires additional JAI Image filters ) - * + * * {@inheritDoc} */ public BufferedImage getRGBImage() throws IOException @@ -182,7 +180,9 @@ public class PDCcitt extends PDXObjectIm WritableRaster raster = colorModel.createCompatibleWritableRaster(cols, rows); DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer(); bufferData = buffer.getData(); -IOUtils.populateBuffer(stream.getUnfilteredStream(), bufferData); +InputStream is = stream.getUnfilteredStream(); +IOUtils.populateBuffer(is, bufferData); +IOUtils.closeQuietly(is); BufferedImage image = new BufferedImage(colorModel, raster, false, null); if (!blackIsOne) { @@ -221,7 +221,7 @@ public class PDCcitt extends PDXObjectIm /** * This writes a tiff to out. - * + * * {@inheritDoc} */ public void write2OutputStream(OutputStream out) throws IOException @@ -229,11 +229,12 @@ public class PDCcitt extends PDXObjectIm // We should use another format than TIFF to get rid of the TiffWrapper InputStream data = new TiffWrapper(getPDStream().getPartiallyFilteredStream(FAX_FILTERS), getCOSStream()); IOUtils.copy(data, out); +IOUtils.closeQuietly(data); } /** * Extract the ccitt stream from the tiff file. - * + * * @param raf - TIFF File * @param os - Stream to write raw ccitt data two * @param parms - COSDictionary which the encoding parameters are added to @@ -296,102 +297,102 @@ public class PDCcitt extends PDXObjectIm { switch (type) { -case 1: -{ -val = val 24; -break; // byte value +case 1: +{ +val = val 24; +break; // byte value +} +case 3: +{ +val = val 16; +break; // short value +} +case 4: +{ +break; // long value +} +default: +{ +// do nothing +} } -case 3: +} +switch (tag) +{ +case 256: { -val = val 16; -break; // short value +parms.setInt(COSName.COLUMNS, val); +break; } -case 4: +case 257
svn commit: r1567327 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
Author: tilman Date: Tue Feb 11 19:34:40 2014 New Revision: 1567327 URL: http://svn.apache.org/r1567327 Log: PDFBOX-1909: Close open streams Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java?rev=1567327r1=1567326r2=1567327view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java Tue Feb 11 19:34:40 2014 @@ -182,7 +182,9 @@ public class PDCcitt extends PDXObjectIm WritableRaster raster = colorModel.createCompatibleWritableRaster(cols, rows); DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer(); bufferData = buffer.getData(); -IOUtils.populateBuffer(stream.getUnfilteredStream(), bufferData); +InputStream is = stream.getUnfilteredStream(); +IOUtils.populateBuffer(is, bufferData); +IOUtils.closeQuietly(is); BufferedImage image = new BufferedImage(colorModel, raster, false, null); if (!blackIsOne) { @@ -229,6 +231,7 @@ public class PDCcitt extends PDXObjectIm // We should use another format than TIFF to get rid of the TiffWrapper InputStream data = new TiffWrapper(getPDStream().getPartiallyFilteredStream(FAX_FILTERS), getCOSStream()); IOUtils.copy(data, out); +IOUtils.closeQuietly(data); } /**
svn commit: r1567406 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel: common/PDStream.java font/PDCIDFontType2Font.java font/PDSimpleFont.java graphics/xobject/PDJpeg.java
Author: tilman Date: Tue Feb 11 21:46:19 2014 New Revision: 1567406 URL: http://svn.apache.org/r1567406 Log: PDFBOX-1909: Close open streams Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java?rev=1567406r1=1567405r2=1567406view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java Tue Feb 11 21:46:19 2014 @@ -35,6 +35,7 @@ import org.apache.pdfbox.cos.COSStream; import org.apache.pdfbox.filter.Filter; import org.apache.pdfbox.filter.FilterManager; +import org.apache.pdfbox.io.IOUtils; import org.apache.pdfbox.pdmodel.PDDocument; @@ -249,21 +250,21 @@ public class PDStream implements COSObje InputStream is = stream.getFilteredStream(); ByteArrayOutputStream os = new ByteArrayOutputStream(); ListCOSName filters = getFilters(); -COSName nextFilter = null; boolean done = false; for (int i = 0; i filters.size() !done; i++) { -os.reset(); -nextFilter = filters.get(i); +COSName nextFilter = filters.get(i); if (stopFilters.contains(nextFilter.getName())) { done = true; -} +} else { Filter filter = manager.getFilter(nextFilter); filter.decode(is, os, stream, i); +IOUtils.closeQuietly(is); is = new ByteArrayInputStream(os.toByteArray()); +os.reset(); } } return is; Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java?rev=1567406r1=1567405r2=1567406view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java Tue Feb 11 21:46:19 2014 @@ -17,6 +17,7 @@ package org.apache.pdfbox.pdmodel.font; import java.io.IOException; +import java.io.InputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -77,7 +78,9 @@ public class PDCIDFontType2Font extends COSStream stream = (COSStream) map; try { -byte[] mapAsBytes = IOUtils.toByteArray(stream.getUnfilteredStream()); +InputStream is = stream.getUnfilteredStream(); +byte[] mapAsBytes = IOUtils.toByteArray(is); +IOUtils.closeQuietly(is); int numberOfInts = mapAsBytes.length / 2; cid2gid = new int[numberOfInts]; int offset = 0; 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=1567406r1=1567405r2=1567406view=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 Feb 11 21:46:19 2014 @@ -285,7 +285,9 @@ public abstract class PDSimpleFont exten COSStream encodingStream = (COSStream) encoding; try { -cmap = parseCmap(null, encodingStream.getUnfilteredStream()); +InputStream is = encodingStream.getUnfilteredStream(); +cmap = parseCmap(null, is); +IOUtils.closeQuietly(is); } catch (IOException exception) { @@ -351,7 +353,9 @@ public abstract class PDSimpleFont exten { try { -toUnicodeCmap = parseCmap(resourceRootCMAP, ((COSStream) toUnicode).getUnfilteredStream()); +InputStream is = ((COSStream) toUnicode).getUnfilteredStream
svn commit: r1569063 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading: GouraudShadingContext.java GouraudTriangle.java Type4ShadingContext.java Type5ShadingCon
Author: tilman Date: Mon Feb 17 17:55:35 2014 New Revision: 1569063 URL: http://svn.apache.org/r1569063 Log: PDFBOX-1924: Gouraud shading: detect empty triangles Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java?rev=1569063r1=1569062r2=1569063view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java Mon Feb 17 17:55:35 2014 @@ -245,81 +245,84 @@ public abstract class GouraudShadingCont { WritableRaster raster = getColorModel().createCompatibleWritableRaster(w, h); int[] data = new int[w * h * 4]; -for (int row = 0; row h; row++) +if (!triangleList.isEmpty() || background != null) { -for (int col = 0; col w; col++) +for (int row = 0; row h; row++) { -Point2D p = new Point(x + col, y + row); -GouraudTriangle triangle = null; -for (GouraudTriangle tryTriangle : triangleList) +for (int col = 0; col w; col++) { -if (tryTriangle.contains(p)) +Point2D p = new Point(x + col, y + row); +GouraudTriangle triangle = null; +for (GouraudTriangle tryTriangle : triangleList) { -triangle = tryTriangle; -break; -} -} -float[] values; -if (triangle != null) -{ -double[] weights = triangle.getWeights(p); -values = new float[numberOfColorComponents]; -for (int i = 0; i numberOfColorComponents; ++i) -{ -values[i] = (float) (triangle.colorA[i] * weights[0] -+ triangle.colorB[i] * weights[1] -+ triangle.colorC[i] * weights[2]); +if (tryTriangle.contains(p)) +{ +triangle = tryTriangle; +break; +} } -} -else -{ -if (background != null) +float[] values; +if (triangle != null) { -values = background; +double[] weights = triangle.getWeights(p); +values = new float[numberOfColorComponents]; +for (int i = 0; i numberOfColorComponents; ++i) +{ +values[i] = (float) (triangle.colorA[i] * weights[0] ++ triangle.colorB[i] * weights[1] ++ triangle.colorC[i] * weights[2]); +} } else { -continue; -} -} - -if (hasFunction) -{ -try -{ -values = gouraudShadingType.evalFunction(values); -} -catch (IOException exception) -{ -LOG.error(error while processing a function, exception); +if (background != null) +{ +values = background; +} +else +{ +continue; +} } -} -// convert color values from shading colorspace to RGB -if (shadingColorSpace != null) -{ -if (shadingTinttransform != null) +if (hasFunction) { try
svn commit: r1571090 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Sun Feb 23 20:54:52 2014 New Revision: 1571090 URL: http://svn.apache.org/r1571090 Log: PDFBOX-1734: fix change that broke JPEG compression Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1571090r1=1571089r2=1571090view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Sun Feb 23 20:54:52 2014 @@ -185,7 +185,7 @@ public class ImageIOUtil writerParams.setCompressionType(writerParams.getCompressionTypes()[0]); } } -writerParams.setCompressionQuality(0); +writerParams.setCompressionQuality(quality); } IIOMetadata meta = createMetadata(image, imageWriter, writerParams, resolution); if (meta != null)
svn commit: r1571089 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Sun Feb 23 20:54:22 2014 New Revision: 1571089 URL: http://svn.apache.org/r1571089 Log: PDFBOX-1734: fix change that broke JPEG compression Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1571089r1=1571088r2=1571089view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Sun Feb 23 20:54:22 2014 @@ -185,7 +185,7 @@ public class ImageIOUtil writerParams.setCompressionType(writerParams.getCompressionTypes()[0]); } } -writerParams.setCompressionQuality(0); +writerParams.setCompressionQuality(quality); } IIOMetadata meta = createMetadata(image, imageWriter, writerParams, resolution); if (meta != null)
svn commit: r1571801 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: filter/LZWDictionary.java filter/LZWFilter.java filter/LZWNode.java io/NBitInputStream.java io/NBitOutputStream.java
Author: tilman Date: Tue Feb 25 19:44:10 2014 New Revision: 1571801 URL: http://svn.apache.org/r1571801 Log: PDFBOX-1147: rewrote LZW filter after failure to find bug; PDFBOX-205: catch EOF if EOD marker is missing; delete files that are no longer needed. Removed: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWDictionary.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWNode.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/NBitInputStream.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/NBitOutputStream.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java?rev=1571801r1=1571800r2=1571801view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Tue Feb 25 19:44:10 2014 @@ -1,10 +1,9 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the License); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * @@ -16,183 +15,259 @@ */ package org.apache.pdfbox.filter; -import java.io.ByteArrayOutputStream; +import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.PushbackInputStream; -import java.io.StreamCorruptedException; - +import java.util.ArrayList; +import java.util.Arrays; +import javax.imageio.stream.MemoryCacheImageInputStream; +import javax.imageio.stream.MemoryCacheImageOutputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.pdfbox.cos.COSDictionary; -import org.apache.pdfbox.io.NBitInputStream; -import org.apache.pdfbox.io.NBitOutputStream; - /** - * This is the used for the LZWDecode filter. * - * @author Ben Litchfield + * This is the filter used for the LZWDecode filter. + * + * @author a href=mailto:b...@benlitchfield.com;Ben Litchfield/a + * @author Tilman Hausherr */ -final class LZWFilter extends Filter +public class LZWFilter extends Filter { +/** + * Log instance. + */ +private static final Log LOG = LogFactory.getLog(LZWFilter.class); + +/** + * The LZW clear table code. + */ public static final long CLEAR_TABLE = 256; + +/** + * The LZW end of data code. + */ public static final long EOD = 257; +/** + * The LZW code table. + */ +private ArrayListbyte[] codeTable = null; + +/** + * {@inheritDoc} + */ @Override protected final DecodeResult decode(InputStream encoded, OutputStream decoded, - COSDictionary parameters) throws IOException +COSDictionary parameters) throws IOException { -//log.debug(decode()); -NBitInputStream in = new NBitInputStream(encoded); -in.setBitsInChunk(9); -LZWDictionary dic = new LZWDictionary(); -byte firstByte = 0; -long nextCommand; -while ((nextCommand = in.read()) != EOD) -{ -// log.debug(decode - nextCommand= + nextCommand + , bitsInChunk: + in.getBitsInChunk()); +codeTable = null; +int chunk = 9; +MemoryCacheImageInputStream in = new MemoryCacheImageInputStream(encoded); +long nextCommand = 0; +long prevCommand = -1; -if (nextCommand == CLEAR_TABLE) -{ -in.setBitsInChunk(9); -dic = new LZWDictionary(); -} -else +try +{ +while ((nextCommand = in.readBits(chunk)) != EOD) { -byte[] data = dic.getData(nextCommand); -if (data == null) -{ -dic.visit(firstByte); -data = dic.getData(nextCommand); -dic.clear(); -} -if (data == null) -{ -throw new StreamCorruptedException(Error: data is null); -} -dic.visit(data); - -//log.debug
svn commit: r1571806 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox: filter/LZWDictionary.java filter/LZWFilter.java filter/LZWNode.java io/NBitInputStream.java io/NBitOutputStream.j
Author: tilman Date: Tue Feb 25 19:56:41 2014 New Revision: 1571806 URL: http://svn.apache.org/r1571806 Log: PDFBOX-1147: rewrote LZW filter after failure to find bug; PDFBOX-205: catch EOF if EOD marker is missing; delete files that are no longer needed. Removed: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWDictionary.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWNode.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/io/NBitInputStream.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/io/NBitOutputStream.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java?rev=1571806r1=1571805r2=1571806view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Tue Feb 25 19:56:41 2014 @@ -1,10 +1,9 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the License); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * @@ -16,196 +15,257 @@ */ package org.apache.pdfbox.filter; -import java.io.ByteArrayOutputStream; +import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.PushbackInputStream; -import java.io.StreamCorruptedException; - +import java.util.ArrayList; +import java.util.Arrays; +import javax.imageio.stream.MemoryCacheImageInputStream; +import javax.imageio.stream.MemoryCacheImageOutputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.pdfbox.cos.COSDictionary; -import org.apache.pdfbox.io.NBitInputStream; -import org.apache.pdfbox.io.NBitOutputStream; - /** - * This is the used for the LZWDecode filter. + * + * This is the filter used for the LZWDecode filter. * * @author a href=mailto:b...@benlitchfield.com;Ben Litchfield/a - * @version $Revision: 1.15 $ + * @author Tilman Hausherr */ public class LZWFilter implements Filter { +/** + * Log instance. + */ +private static final Log LOG = LogFactory.getLog(LZWFilter.class); /** * The LZW clear table code. */ public static final long CLEAR_TABLE = 256; + /** * The LZW end of data code. */ public static final long EOD = 257; /** + * The LZW code table. + */ +private ArrayListbyte[] codeTable = null; + +/** * {@inheritDoc} */ -public void decode( InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex ) -throws IOException +public void decode(InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex) +throws IOException { -//log.debug(decode( )); -NBitInputStream in = null; -in = new NBitInputStream( compressedData ); -in.setBitsInChunk( 9 ); -LZWDictionary dic = new LZWDictionary(); -byte firstByte = 0; +codeTable = null; +int chunk = 9; +MemoryCacheImageInputStream in = new MemoryCacheImageInputStream(compressedData); long nextCommand = 0; -while( (nextCommand = in.read() ) != EOD ) -{ -// log.debug( decode - nextCommand= + nextCommand + , bitsInChunk: + in.getBitsInChunk()); +long prevCommand = -1; -if( nextCommand == CLEAR_TABLE ) -{ -in.setBitsInChunk( 9 ); -dic = new LZWDictionary(); -} -else +try +{ +while ((nextCommand = in.readBits(chunk)) != EOD) { -byte[] data = dic.getData( nextCommand ); -if( data == null ) +if (nextCommand == CLEAR_TABLE) { -dic.visit( firstByte ); -data = dic.getData( nextCommand ); -dic.clear(); -} -if( data == null
svn commit: r1571822 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java
Author: tilman Date: Tue Feb 25 21:02:55 2014 New Revision: 1571822 URL: http://svn.apache.org/r1571822 Log: PDFBOX-1147: code modified for JDK5 Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java?rev=1571822r1=1571821r2=1571822view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Tue Feb 25 21:02:55 2014 @@ -88,7 +88,9 @@ public class LZWFilter implements Filter if (prevCommand != -1) { data = codeTable.get((int) prevCommand); -byte[] newData = Arrays.copyOf(data, data.length + 1); +byte[] newData = new byte[data.length + 1]; +for (int i = 0; i data.length; ++i) +newData[i] = data[i]; newData[data.length] = firstByte; codeTable.add(newData); } @@ -96,7 +98,9 @@ public class LZWFilter implements Filter else { byte[] data = codeTable.get((int) prevCommand); -byte[] newData = Arrays.copyOf(data, data.length + 1); +byte[] newData = new byte[data.length + 1]; +for (int i = 0; i data.length; ++i) +newData[i] = data[i]; newData[data.length] = data[0]; result.write(newData); codeTable.add(newData); @@ -155,7 +159,10 @@ public class LZWFilter implements Filter } else { -inputPattern = Arrays.copyOf(inputPattern, inputPattern.length + 1); +byte[] inputPatternCopy = new byte[inputPattern.length + 1]; +for (int i = 0; i inputPattern.length; ++i) +inputPatternCopy[i] = inputPattern[i]; +inputPattern = inputPatternCopy; inputPattern[inputPattern.length - 1] = by; int newFoundCode = findPatternCode(codeTable, inputPattern); if (newFoundCode == -1)
svn commit: r1573195 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: PDCIDFontType0Font.java PDCIDFontType2Font.java PDTrueTypeFont.java PDType1Font.java
Author: tilman Date: Sat Mar 1 16:48:54 2014 New Revision: 1573195 URL: http://svn.apache.org/r1573195 Log: PDFBOX-1664: check for null pointer Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0Font.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0Font.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0Font.java?rev=1573195r1=1573194r2=1573195view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0Font.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0Font.java Sat Mar 1 16:48:54 2014 @@ -64,8 +64,11 @@ public class PDCIDFontType0Font extends public Font getawtFont() throws IOException { PDFontDescriptor fd = getFontDescriptor(); -Font awtFont = FontManager.getAwtFont(fd.getFontName()); - +Font awtFont = null; +if (fd.getFontName() != null) +{ +awtFont = FontManager.getAwtFont(fd.getFontName()); +} if (awtFont == null fd instanceof PDFontDescriptorDictionary) { PDFontDescriptorDictionary fdd = (PDFontDescriptorDictionary) fd; if (fdd.getFontFile3() != null) { Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java?rev=1573195r1=1573194r2=1573195view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2Font.java Sat Mar 1 16:48:54 2014 @@ -87,7 +87,10 @@ public class PDCIDFontType2Font extends } if (awtFont == null) { -awtFont = FontManager.getAwtFont(fd.getFontName()); +if (fd.getFontName() != null) +{ +awtFont = FontManager.getAwtFont(fd.getFontName()); +} if (awtFont != null) { LOG.info(Using font +awtFont.getName()+ instead); Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1573195r1=1573194r2=1573195view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java Sat Mar 1 16:48:54 2014 @@ -468,7 +468,10 @@ public class PDTrueTypeFont extends PDSi } if (awtFont == null) { -awtFont = FontManager.getAwtFont(fd.getFontName()); +if (fd.getFontName() != null) +{ +awtFont = FontManager.getAwtFont(fd.getFontName()); +} if (awtFont != null) { log.info(Using font +awtFont.getName()+ instead); @@ -479,7 +482,10 @@ public class PDTrueTypeFont extends PDSi else { // check if the font is part of our environment -awtFont = FontManager.getAwtFont(fd.getFontName()); +if (fd.getFontName() != null) +{ +awtFont = FontManager.getAwtFont(fd.getFontName()); +} if (awtFont == null) { log.info(Can't find the specified font + fd.getFontName() ); Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java?rev=1573195r1=1573194r2=1573195view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font
svn commit: r1574180 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter: FilterManager.java JPXFilter.java
Author: tilman Date: Tue Mar 4 19:34:50 2014 New Revision: 1574180 URL: http://svn.apache.org/r1574180 Log: PDFBOX-52: use JPXFilter instead of DCTFilter Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java?rev=1574180r1=1574179r2=1574180view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FilterManager.java Tue Mar 4 19:34:50 2014 @@ -32,7 +32,7 @@ import org.apache.pdfbox.cos.COSName; */ public class FilterManager { -private MapCOSName, Filter filters = new HashMapCOSName, Filter(); +private final MapCOSName, Filter filters = new HashMapCOSName, Filter(); /** * Constructor. @@ -40,7 +40,6 @@ public class FilterManager public FilterManager() { Filter flateFilter = new FlateFilter(); -Filter dctFilter = new DCTFilter(); Filter ccittFaxFilter = new CCITTFaxDecodeFilter(); Filter lzwFilter = new LZWFilter(); Filter asciiHexFilter = new ASCIIHexFilter(); @@ -52,8 +51,8 @@ public class FilterManager addFilter( COSName.FLATE_DECODE, flateFilter ); addFilter( COSName.FLATE_DECODE_ABBREVIATION, flateFilter ); -addFilter( COSName.DCT_DECODE, dctFilter ); -addFilter( COSName.DCT_DECODE_ABBREVIATION, dctFilter ); +addFilter( COSName.DCT_DECODE, jpxFilter); +addFilter( COSName.DCT_DECODE_ABBREVIATION, jpxFilter); addFilter( COSName.CCITTFAX_DECODE, ccittFaxFilter ); addFilter( COSName.CCITTFAX_DECODE_ABBREVIATION, ccittFaxFilter ); addFilter( COSName.LZW_DECODE, lzwFilter ); @@ -66,8 +65,7 @@ public class FilterManager addFilter( COSName.RUN_LENGTH_DECODE_ABBREVIATION, runLengthFilter ); addFilter( COSName.CRYPT, cryptFilter ); addFilter( COSName.JPX_DECODE, jpxFilter ); -addFilter( COSName.JBIG2_DECODE, jbig2Filter ); - +addFilter( COSName.JBIG2_DECODE, jbig2Filter ); } /** Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java?rev=1574180r1=1574179r2=1574180view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java Tue Mar 4 19:34:50 2014 @@ -69,7 +69,26 @@ public class JPXFilter implements Filter options.setInt(COSName.BITS_PER_COMPONENT, colorModel.getPixelSize() / colorModel.getNumComponents()); options.setInt(COSName.HEIGHT, bi.getHeight()); options.setInt(COSName.WIDTH, bi.getWidth()); -result.write(((DataBufferByte) dBuf).getData()); + +if (bi.getType() == BufferedImage.TYPE_3BYTE_BGR) +{ +// PDFBOX-52 +byte[] byteBuffer = ((DataBufferByte) dBuf).getData(); +for (int i = 0; i byteBuffer.length; i += 3) +{ +//BGR +//to +//RGB +byte tmp0 = byteBuffer[i]; +byteBuffer[i] = byteBuffer[i + 2]; +byteBuffer[i + 2] = tmp0; +} +result.write(byteBuffer); +} +else +{ +result.write(((DataBufferByte) dBuf).getData()); +} } else {
svn commit: r1574653 - in /pdfbox/branches/1.8/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java test/java/org/apache/pdfbox/pdmodel/common/function/TestPDFunctionTy
Author: tilman Date: Wed Mar 5 20:39:29 2014 New Revision: 1574653 URL: http://svn.apache.org/r1574653 Log: PDFBOX-1876: Fix Type 4 Function used in PDFBOX-1876 and its test Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/TestPDFunctionType4.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java?rev=1574653r1=1574652r2=1574653view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType4.java Wed Mar 5 20:39:29 2014 @@ -67,9 +67,8 @@ public class PDFunctionType4 extends PDF public float[] eval(float[] input) throws IOException { //Setup the input values -int numberOfInputValues = input.length; ExecutionContext context = new ExecutionContext(OPERATORS); -for (int i = numberOfInputValues - 1; i = 0; i--) +for (int i = 0; i input.length; i++) { PDRange domain = getDomainForInput(i); float value = clipToRange(input[i], domain.getMin(), domain.getMax()); Modified: pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/TestPDFunctionType4.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/TestPDFunctionType4.java?rev=1574653r1=1574652r2=1574653view=diff == --- pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/TestPDFunctionType4.java (original) +++ pdfbox/branches/1.8/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/TestPDFunctionType4.java Wed Mar 5 20:39:29 2014 @@ -98,19 +98,16 @@ public class TestPDFunctionType4 extends public void testFunctionArgumentOrder() throws Exception { String functionText = { pop }; -//pops the top-most argument and returns the second as is. +// pops an argument (2nd) and returns the next argument (1st) PDFunctionType4 function = createFunction(functionText, new float[] {-1.0f, 1.0f, -1.0f, 1.0f}, new float[] {-1.0f, 1.0f}); -COSArray input = new COSArray(); -input.setFloatArray(new float[] {-0.7f, 0.0f}); -COSArray output = function.eval(input); +float[] input = new float[] {-0.7f, 0.0f }; +float[] output = function.eval(input); -assertEquals(1, output.size()); -assertEquals(0.0f, ((COSFloat)output.get(0)).floatValue(), 0.0001f); -//TODO not sure if this is really correct +assertEquals(1, output.length); +assertEquals(-0.7f, output[0], 0.0001f); } - }
svn commit: r1574961 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
Author: tilman Date: Thu Mar 6 17:01:34 2014 New Revision: 1574961 URL: http://svn.apache.org/r1574961 Log: PDFBOX-1931: fix regression introduced in rev. 1562921, revert 2 lines to use Matrix.getXScale() as before, instead of AffineTransform.getScaleX() because its different 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=1574961r1=1574960r2=1574961view=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 Thu Mar 6 17:01:34 2014 @@ -85,8 +85,8 @@ public class RadialShadingContext implem AffineTransform at = ctm.createAffineTransform(); at.transform(coords, 0, coords, 0, 1); at.transform(coords, 3, coords, 3, 1); -coords[2] *= at.getScaleX(); -coords[5] *= at.getScaleX(); +coords[2] *= ctm.getXScale(); +coords[5] *= ctm.getXScale(); } // transform coords to device space xform.transform(coords, 0, coords, 0, 1);
svn commit: r1575426 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
Author: tilman Date: Fri Mar 7 22:02:25 2014 New Revision: 1575426 URL: http://svn.apache.org/r1575426 Log: PDFBOX-1164: add heuristic by Timo Boehme to detect wrongly assumed end of inline image Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java?rev=1575426r1=1575425r2=1575426view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Fri Mar 7 22:02:25 2014 @@ -19,6 +19,7 @@ package org.apache.pdfbox.pdfparser; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.PushbackInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -46,6 +47,8 @@ public class PDFStreamParser extends Bas { private ListObject streamObjects = new ArrayListObject( 100 ); private RandomAccess file; +private final intmaxBinCharTestLength = 5; +private final byte[] binCharTestArr = new byte[maxBinCharTestLength]; /** * Constructor that takes a stream to parse. @@ -391,10 +394,11 @@ public class PDFStreamParser extends Bas // PDF spec is kinda unclear about this. Should a whitespace // always appear before EI? Not sure, so that we just read // until EIwhitespace. -// Be aware not all kind of whitespaces are allowed here. see PDFBOX1561 +// Be aware not all kind of whitespaces are allowed here. see PDFBOX-1561 while( !(lastByte == 'E' currentByte == 'I' - isSpaceOrReturn()) + isSpaceOrReturn() + hasNoFollowingBinData( pdfSource )) !pdfSource.isEOF() ) { imageData.write( lastByte ); @@ -436,6 +440,37 @@ public class PDFStreamParser extends Bas } /** + * Looks up next 5 bytes if they contain only ASCII characters (no control + * sequences etc.). + * + * @return codetrue/code if next 5 bytes are printable ASCII characters, + * otherwise codefalse/code + */ +private boolean hasNoFollowingBinData(final PushbackInputStream pdfSource) +throws IOException +{ +// as suggested in PDFBOX-1164 +final int readBytes = pdfSource.read(binCharTestArr, 0, maxBinCharTestLength); +boolean noBinData = true; + +if (readBytes 0) +{ +for (int bIdx = 0; bIdx readBytes; bIdx++) +{ +final byte b = binCharTestArr[bIdx]; +if ((b 0x09) || ((b 0x0a) (b 0x20) (b != 0x0d))) +{ +// control character or 0x7f - we have binary data +noBinData = false; +break; +} +} +pdfSource.unread(binCharTestArr, 0, readBytes); +} +return noBinData; +} + +/** * This will read an operator from the stream. * * @return The operator that was read from the stream.
svn commit: r1575427 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
Author: tilman Date: Fri Mar 7 22:03:59 2014 New Revision: 1575427 URL: http://svn.apache.org/r1575427 Log: PDFBOX-1164: add heuristic by Timo Boehme to detect wrongly assumed end of inline image Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java?rev=1575427r1=1575426r2=1575427view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Fri Mar 7 22:03:59 2014 @@ -19,6 +19,7 @@ package org.apache.pdfbox.pdfparser; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.PushbackInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -47,6 +48,8 @@ public class PDFStreamParser extends Bas { private ListObject streamObjects = new ArrayListObject( 100 ); private RandomAccess file; +private final intmaxBinCharTestLength = 5; +private final byte[] binCharTestArr = new byte[maxBinCharTestLength]; /** * Constructor that takes a stream to parse. @@ -393,7 +396,8 @@ public class PDFStreamParser extends Bas // Be aware not all kind of whitespaces are allowed here. see PDFBOX1561 while( !(lastByte == 'E' currentByte == 'I' - isSpaceOrReturn()) + isSpaceOrReturn() + hasNoFollowingBinData( pdfSource )) !pdfSource.isEOF() ) { imageData.write( lastByte ); @@ -435,6 +439,37 @@ public class PDFStreamParser extends Bas } /** + * Looks up next 5 bytes if they contain only ASCII characters (no control + * sequences etc.). + * + * @return codetrue/code if next 5 bytes are printable ASCII characters, + * otherwise codefalse/code + */ +private boolean hasNoFollowingBinData(final PushbackInputStream pdfSource) +throws IOException +{ +// as suggested in PDFBOX-1164 +final int readBytes = pdfSource.read(binCharTestArr, 0, maxBinCharTestLength); +boolean noBinData = true; + +if (readBytes 0) +{ +for (int bIdx = 0; bIdx readBytes; bIdx++) +{ +final byte b = binCharTestArr[bIdx]; +if ((b 0x09) || ((b 0x0a) (b 0x20) (b != 0x0d))) +{ +// control character or 0x7f - we have binary data +noBinData = false; +break; +} +} +pdfSource.unread(binCharTestArr, 0, readBytes); +} +return noBinData; +} + +/** * This will read an operator from the stream. * * @return The operator that was read from the stream.
svn commit: r1575539 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
Author: tilman Date: Sat Mar 8 13:16:35 2014 New Revision: 1575539 URL: http://svn.apache.org/r1575539 Log: PDFBOX-1966: Type 1, 4 and 5 shadings for shFill(); use transparency for type 6 and 7; DRY principle will be applied later Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=1575539r1=1575538r2=1575539view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Sat Mar 8 13:16:35 2014 @@ -42,11 +42,17 @@ import org.apache.pdfbox.pdmodel.common. import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.graphics.PDGraphicsState; import org.apache.pdfbox.pdmodel.graphics.PDShading; -import org.apache.pdfbox.pdmodel.graphics.shading.AxialShadingPaint; import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingResources; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType1; import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType2; import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType3; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType4; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType5; +import org.apache.pdfbox.pdmodel.graphics.shading.Type1ShadingPaint; +import org.apache.pdfbox.pdmodel.graphics.shading.AxialShadingPaint; import org.apache.pdfbox.pdmodel.graphics.shading.RadialShadingPaint; +import org.apache.pdfbox.pdmodel.graphics.shading.Type4ShadingPaint; +import org.apache.pdfbox.pdmodel.graphics.shading.Type5ShadingPaint; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; @@ -571,9 +577,8 @@ public class PageDrawer extends PDFStrea switch (shadingType) { case 1: -// TODO -LOG.debug(Function based shading not yet supported); -break; +paint = new Type1ShadingPaint((PDShadingType1)shading, ctm, pageSize.height); +break; case 2: paint = new AxialShadingPaint((PDShadingType2)shading, ctm, pageSize.height); break; @@ -581,11 +586,16 @@ public class PageDrawer extends PDFStrea paint = new RadialShadingPaint((PDShadingType3)shading, ctm, pageSize.height); break; case 4: +paint = new Type4ShadingPaint((PDShadingType4)shading, ctm, pageSize.height); +break; case 5: +paint = new Type5ShadingPaint((PDShadingType5)shading, ctm, pageSize.height); +break; case 6: case 7: // TODO LOG.debug(Shading type +shadingType+ not yet supported); +paint = new Color(0, 0, 0, 0); // transparent break; default: throw new IOException(Invalid ShadingType + shadingType + for Shading + shadingName);
svn commit: r1575540 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Author: tilman Date: Sat Mar 8 13:17:17 2014 New Revision: 1575540 URL: http://svn.apache.org/r1575540 Log: PDFBOX-1966: Type 1, 4 and 5 shadings for shFill(); use transparency for type 6 and 7; DRY principle will be applied later 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=1575540r1=1575539r2=1575540view=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 Sat Mar 8 13:17:17 2014 @@ -71,9 +71,15 @@ import org.apache.pdfbox.pdmodel.graphic import org.apache.pdfbox.pdmodel.graphics.pattern.PDTilingPattern; import org.apache.pdfbox.pdmodel.graphics.shading.AxialShadingPaint; import org.apache.pdfbox.pdmodel.graphics.shading.PDShading; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType1; import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType2; import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType3; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType4; +import org.apache.pdfbox.pdmodel.graphics.shading.PDShadingType5; import org.apache.pdfbox.pdmodel.graphics.shading.RadialShadingPaint; +import org.apache.pdfbox.pdmodel.graphics.shading.Type1ShadingPaint; +import org.apache.pdfbox.pdmodel.graphics.shading.Type4ShadingPaint; +import org.apache.pdfbox.pdmodel.graphics.shading.Type5ShadingPaint; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream; @@ -836,8 +842,7 @@ public class PageDrawer extends PDFStrea switch (shadingType) { case 1: -// TODO -LOG.debug(Function based shading not yet supported); +paint = new Type1ShadingPaint((PDShadingType1) shading, ctm, pageHeight); break; case 2: paint = new AxialShadingPaint((PDShadingType2) shading, ctm, pageHeight); @@ -846,11 +851,16 @@ public class PageDrawer extends PDFStrea paint = new RadialShadingPaint((PDShadingType3) shading, ctm, pageHeight); break; case 4: +paint = new Type4ShadingPaint((PDShadingType4) shading, ctm, pageHeight); +break; case 5: +paint = new Type5ShadingPaint((PDShadingType5) shading, ctm, pageHeight); +break; case 6: case 7: // TODO LOG.debug(Shading type + shadingType + not yet supported); +paint = new Color(0, 0, 0, 0); // transparent break; default: throw new IOException(Invalid ShadingType + shadingType + for Shading + shadingName);
svn commit: r1575682 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
Author: tilman Date: Sun Mar 9 09:07:31 2014 New Revision: 1575682 URL: http://svn.apache.org/r1575682 Log: PDFBOX-1442: clear cached paint value Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java?rev=1575682r1=1575681r2=1575682view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java Sun Mar 9 09:07:31 2014 @@ -275,8 +275,9 @@ public class PDColorState implements Clo public void setColorSpace(PDColorSpace value) { colorSpace = value; -// Clear color cache and current pattern +// Clear color/paint cache and current pattern color = null; +paint = null; pattern = null; } @@ -308,8 +309,9 @@ public class PDColorState implements Clo public void setColorSpaceValue(float[] value) { colorSpaceValue.setFloatArray(value); -// Clear color cache and current pattern +// Clear color/paint cache and current pattern color = null; +paint = null; pattern = null; } @@ -331,8 +333,9 @@ public class PDColorState implements Clo public void setPattern(PDPatternResources patternValue) { pattern = patternValue; -// Clear color cache +// Clear color/paint cache color = null; +paint = null; } }
svn commit: r1576067 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Mon Mar 10 20:20:38 2014 New Revision: 1576067 URL: http://svn.apache.org/r1576067 Log: PDFBOX-1963: put setCompressionMode() at the correct place Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1576067r1=1576066r2=1576067view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Mon Mar 10 20:20:38 2014 @@ -136,6 +136,7 @@ public class ImageIOUtil // compression if (param.canWriteCompressed()) { +param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); if (formatName.toLowerCase().startsWith(tif)) { // TIFF compression @@ -144,7 +145,6 @@ public class ImageIOUtil else { // JPEG, PNG compression -param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionType(param.getCompressionTypes()[0]); param.setCompressionQuality(quality); }
svn commit: r1576071 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java
Author: tilman Date: Mon Mar 10 20:36:32 2014 New Revision: 1576071 URL: http://svn.apache.org/r1576071 Log: PDFBOX-1963: fix if statement that had switched branches Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java?rev=1576071r1=1576070r2=1576071view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java Mon Mar 10 20:36:32 2014 @@ -25,9 +25,7 @@ import javax.imageio.metadata.IIOMetadat import javax.imageio.metadata.IIOMetadataNode; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.awt.image.BufferedImage; @@ -87,15 +85,15 @@ class TIFFUtil IIOMetadataNode ifd; if (root.getElementsByTagName(TIFFIFD).getLength() == 0) { -ifd = (IIOMetadataNode)root.getElementsByTagName(TIFFIFD).item(0); -} -else -{ ifd = new IIOMetadataNode(TIFFIFD); ifd.setAttribute(tagSets, com.sun.media.imageio.plugins.tiff.BaselineTIFFTagSet); root.appendChild(ifd); } +else +{ +ifd = (IIOMetadataNode)root.getElementsByTagName(TIFFIFD).item(0); +} // standard metadata does not work, so we set the DPI manually ifd.appendChild(createRationalField(282, XResolution, dpi, 1));
svn commit: r1576083 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Mon Mar 10 20:59:37 2014 New Revision: 1576083 URL: http://svn.apache.org/r1576083 Log: PDFBOX-1963: fix PNG image resolution Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1576083r1=1576082r2=1576083view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Mon Mar 10 20:59:37 2014 @@ -31,8 +31,6 @@ import javax.imageio.metadata.IIOInvalid import javax.imageio.metadata.IIOMetadata; import javax.imageio.metadata.IIOMetadataNode; import javax.imageio.stream.ImageOutputStream; - -import org.apache.pdfbox.filter.MissingImageReaderException; import org.w3c.dom.Element; /** @@ -177,7 +175,7 @@ public class ImageIOUtil } return true; } - + // sets the DPI metadata private static void setDPI(IIOMetadata metadata, int dpi) { @@ -191,6 +189,8 @@ public class ImageIOUtil Element v = new IIOMetadataNode(VerticalPixelSize); v.setAttribute(value, Double.toString(dpi / 25.4)); dimension.appendChild(v); + +root.appendChild(dimension); try {
svn commit: r1576202 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: encoding/Encoding.java pdfparser/BaseParser.java util/PDFStreamEngine.java util/PDFTextStripper.java util/ResourceLoader
Author: tilman Date: Tue Mar 11 07:01:31 2014 New Revision: 1576202 URL: http://svn.apache.org/r1576202 Log: PDFBOX-1946: catch SecurityException and resulting null values when run in an applet Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ResourceLoader.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java?rev=1576202r1=1576201r2=1576202view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java Tue Mar 11 07:01:31 2014 @@ -70,15 +70,22 @@ public abstract class Encoding implement loadGlyphProperties(org/apache/pdfbox/resources/additional_glyphlist.properties); // Load an external glyph list file that user can give as JVM property -String location = System.getProperty(glyphlist_ext); -if (location != null) +try { -File external = new File(location); -if (external.exists()) +String location = System.getProperty(glyphlist_ext); +if (location != null) { -loadGlyphProperties(location); +File external = new File(location); +if (external.exists()) +{ +loadGlyphProperties(location); +} } } +catch (SecurityException e) // can occur on Sytem.getProperty +{ +// PDFBOX-1946 ignore and continue +} NAME_TO_CHARACTER.put(NOTDEF, ); NAME_TO_CHARACTER.put(fi, fi); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java?rev=1576202r1=1576201r2=1576202view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Tue Mar 11 07:01:31 2014 @@ -165,8 +165,19 @@ public abstract class BaseParser public BaseParser(InputStream input, boolean forceParsingValue) throws IOException { +int pushbacksize = 65536; +try +{ +pushbacksize = Integer.getInteger(PROP_PUSHBACK_SIZE, 65536); +} +catch (SecurityException e) +{ +// PDFBOX-1946 getInteger calls System.getProperties, +// which can get exception in an applet +// ignore and use default +} this.pdfSource = new PushBackInputStream( -new BufferedInputStream(input, 16384), Integer.getInteger( PROP_PUSHBACK_SIZE, 65536 ) ); +new BufferedInputStream(input, 16384), pushbacksize); this.forceParsing = forceParsingValue; } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1576202r1=1576201r2=1576202view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Tue Mar 11 07:01:31 2014 @@ -334,15 +334,18 @@ public class PDFStreamEngine glyphSpaceToTextSpaceFactor = 1f / fontMatrix.getValue(0, 0); } float spaceWidthText = 0; -try -{ -// to avoid crash as described in PDFBOX-614 -// lets see what the space displacement should be -spaceWidthText = (font.getSpaceWidth() * glyphSpaceToTextSpaceFactor); -} -catch (Throwable exception) +if (font != null) // PDFBOX-1946 font might still be null if in applet { -LOG.warn(exception, exception); +try +{ +// to avoid crash as described in PDFBOX-614 +// lets see what the space displacement should be +spaceWidthText = (font.getSpaceWidth() * glyphSpaceToTextSpaceFactor); +} +catch (Throwable exception) +{ +LOG.warn(exception, exception
svn commit: r1576436 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
Author: tilman Date: Tue Mar 11 17:46:33 2014 New Revision: 1576436 URL: http://svn.apache.org/r1576436 Log: PDFBOX-1946: set default value (missed two lines in last commit) Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1576436r1=1576435r2=1576436view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Tue Mar 11 17:46:33 2014 @@ -355,6 +355,8 @@ public class PDFStreamEngine // so lets make it a little bit smaller. spaceWidthText *= .80f; } +else +spaceWidthText = 1.0f; // if could not find font, use a generic value float maxVerticalDisplacementText = 0;
svn commit: r1576439 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox: encoding/Encoding.java pdfparser/BaseParser.java util/PDFStreamEngine.java util/PDFTextStripper.java util/Resourc
Author: tilman Date: Tue Mar 11 17:52:49 2014 New Revision: 1576439 URL: http://svn.apache.org/r1576439 Log: PDFBOX-1946: catch SecurityException and resulting null values when run in an applet Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ResourceLoader.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java?rev=1576439r1=1576438r2=1576439view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java Tue Mar 11 17:52:49 2014 @@ -75,15 +75,22 @@ public abstract class Encoding implement loadGlyphList(org/apache/pdfbox/resources/additional_glyphlist.txt); // Load an external glyph list file that user can give as JVM property -String location = System.getProperty(glyphlist_ext); -if(location != null) +try { -File external = new File(location); -if(external.exists()) +String location = System.getProperty(glyphlist_ext); +if(location != null) { -loadGlyphList(location); +File external = new File(location); +if(external.exists()) +{ +loadGlyphList(location); +} } } +catch (SecurityException e) // can occur on Sytem.getProperty +{ +// PDFBOX-1946 ignore and continue +} NAME_TO_CHARACTER.put( NOTDEF, ); NAME_TO_CHARACTER.put( fi, fi ); Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java?rev=1576439r1=1576438r2=1576439view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Tue Mar 11 17:52:49 2014 @@ -128,9 +128,22 @@ public abstract class BaseParser /** * Default value of the {@link #forceParsing} flag. */ -protected static final boolean FORCE_PARSING = -Boolean.getBoolean(org.apache.pdfbox.forceParsing); +static boolean FORCE_PARSING = true; +static +{ +// get preferences value for force parsing +try +{ +FORCE_PARSING = Boolean.getBoolean(org.apache.pdfbox.forceParsing); +} +catch (SecurityException e) +{ +// PDFBOX-1946 since Boolean.getBoolean calls System.getProperty, this can occur +/* ignore and use default */ +} +} + /** * This is the stream that will be read from. */ @@ -166,8 +179,17 @@ public abstract class BaseParser public BaseParser(InputStream input, boolean forceParsingValue) throws IOException { + int pushbacksize = 65536; + try + { + pushbacksize = Integer.getInteger( PROP_PUSHBACK_SIZE, 65536 ); + } + catch (SecurityException e) // getInteger calls System.getProperties, which can get exception + { + // ignore and use default + } this.pdfSource = new PushBackInputStream( -new BufferedInputStream(input, 16384), Integer.getInteger( PROP_PUSHBACK_SIZE, 65536 ) ); + new BufferedInputStream(input, 16384), pushbacksize ); this.forceParsing = forceParsingValue; } Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1576439r1=1576438r2=1576439view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Tue Mar 11 17:52:49 2014 @@ -348,24 +348,29 @@ public class PDFStreamEngine glyphSpaceToTextSpaceFactor = 1f
svn commit: r1576468 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
Author: tilman Date: Tue Mar 11 18:40:00 2014 New Revision: 1576468 URL: http://svn.apache.org/r1576468 Log: PDFBOX-1946: respect coding convention Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1576468r1=1576467r2=1576468view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Tue Mar 11 18:40:00 2014 @@ -355,9 +355,10 @@ public class PDFStreamEngine // so lets make it a little bit smaller. spaceWidthText *= .80f; } -else +else +{ spaceWidthText = 1.0f; // if could not find font, use a generic value - +} float maxVerticalDisplacementText = 0; Matrix textStateParameters = new Matrix();
svn commit: r1576467 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
Author: tilman Date: Tue Mar 11 18:39:23 2014 New Revision: 1576467 URL: http://svn.apache.org/r1576467 Log: PDFBOX-1946: respect coding convention Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1576467r1=1576466r2=1576467view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Tue Mar 11 18:39:23 2014 @@ -362,16 +362,17 @@ public class PDFStreamEngine } } -if( spaceWidthText == 0 ) +if (spaceWidthText == 0) { -spaceWidthText = (font.getAverageFontWidth()*glyphSpaceToTextSpaceFactor); +spaceWidthText = (font.getAverageFontWidth() * glyphSpaceToTextSpaceFactor); // The average space width appears to be higher than necessary // so lets make it a little bit smaller. spaceWidthText *= .80f; } -else -spaceWidthText=1.0f; // if could not find font, use a generic value - +else +{ +spaceWidthText = 1.0f; // if could not find font, use a generic value +} float maxVerticalDisplacementText = 0; Matrix textStateParameters = new Matrix();
svn commit: r1576531 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Tue Mar 11 22:30:00 2014 New Revision: 1576531 URL: http://svn.apache.org/r1576531 Log: PDFBOX-1975: add the helper methods for the unit tests (not used yet) Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1576531r1=1576530r2=1576531view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Tue Mar 11 22:30:00 2014 @@ -1,112 +1,230 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the License); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.pdfbox.util; - -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.pdfbox.pdmodel.PDDocument; -import org.apache.pdfbox.rendering.ImageType; -import org.apache.pdfbox.rendering.PDFRenderer; - -/** - * Test suite for ImageIOUtil. - */ -public class TestImageIOUtils extends TestCase -{ -private static final Log LOG = LogFactory.getLog(TestImageIOUtils.class); - -/** - * Validate page rendering for all supported image formats (JDK5). - * @param file The file to validate - * @param outDir Name of the output directory - * @throws IOException when there is an exception - */ -private void doTestFile(File file, String outDir) throws IOException -{ -PDDocument document = null; -String imageType = png; -LOG.info(Preparing to convert + file.getName()); -try -{ -float dpi = 120; -document = PDDocument.load(file); -// testing PNG -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing JPG/JPEG -imageType = jpg; -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing BMP -imageType = bmp; -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing WBMP -imageType = wbmp; -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing TIFF -imageType = tif; -writeImage(document, imageType, outDir + file.getName() + -bw-, ImageType.BINARY, dpi); -writeImage(document, imageType, outDir + file.getName() + -co-, ImageType.RGB, dpi); -} -finally -{ -if (document!= null) -{ -document.close(); -} -} -} - -private void writeImage(PDDocument document, String imageFormat, String outputPrefix, -ImageType imageType, float dpi) throws IOException -{ -PDFRenderer renderer = new PDFRenderer(document); -BufferedImage image = renderer.renderImageWithDPI(0, dpi, imageType); -String fileName = outputPrefix + 1; -LOG.info(Writing: + fileName + . + imageFormat); -ImageIOUtil.writeImage(image, imageFormat, fileName, Math.round(dpi)); -} - -/** - * Test to validate image rendering of file set. - * @throws Exception when there is an exception - */ -public void testRenderImage() throws Exception -{ -String inDir = src/test/resources/input/ImageIOUtil; -String outDir = target/test-output/ImageIOUtil/; -new File(outDir).mkdir(); - -File[] testFiles = new File(inDir).listFiles(new FilenameFilter() -{ -public boolean accept(File dir, String name) -{ -return (name.endsWith(.pdf) || name.endsWith(.ai)); -} -}); - -for (File file : testFiles) -{ -doTestFile(file, outDir
svn commit: r1576536 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Tue Mar 11 22:46:38 2014 New Revision: 1576536 URL: http://svn.apache.org/r1576536 Log: PDFBOX-1975: enable the test for PNG files Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1576536r1=1576535r2=1576536view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Tue Mar 11 22:46:38 2014 @@ -1,230 +1,231 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the License); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.pdfbox.util; - -import java.awt.image.BufferedImage; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.Iterator; -import javax.imageio.ImageIO; -import javax.imageio.ImageReader; -import javax.imageio.metadata.IIOMetadata; -import javax.imageio.stream.ImageInputStream; - -import junit.framework.TestCase; -import static junit.framework.TestCase.assertEquals; -import static junit.framework.TestCase.assertNotNull; -import static junit.framework.TestCase.assertTrue; -import static junit.framework.TestCase.fail; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.pdfbox.pdmodel.PDDocument; -import org.apache.pdfbox.rendering.ImageType; -import org.apache.pdfbox.rendering.PDFRenderer; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Test suite for ImageIOUtil. - */ -public class TestImageIOUtils extends TestCase -{ -private static final Log LOG = LogFactory.getLog(TestImageIOUtils.class); - -/** - * Validate page rendering for all supported image formats (JDK5). - * @param file The file to validate - * @param outDir Name of the output directory - * @throws IOException when there is an exception - */ -private void doTestFile(File file, String outDir) throws IOException -{ -PDDocument document = null; -String imageType = png; -LOG.info(Preparing to convert + file.getName()); -try -{ -float dpi = 120; -document = PDDocument.load(file); -// testing PNG -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing JPG/JPEG -imageType = jpg; -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing BMP -imageType = bmp; -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing WBMP -imageType = wbmp; -writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -// testing TIFF -imageType = tif; -writeImage(document, imageType, outDir + file.getName() + -bw-, ImageType.BINARY, dpi); -writeImage(document, imageType, outDir + file.getName() + -co-, ImageType.RGB, dpi); -} -finally -{ -if (document!= null) -{ -document.close(); -} -} -} - -private void writeImage(PDDocument document, String imageFormat, String outputPrefix, -ImageType imageType, float dpi) throws IOException -{ -PDFRenderer renderer = new PDFRenderer(document); -BufferedImage image = renderer.renderImageWithDPI(0, dpi, imageType); -String fileName = outputPrefix + 1; -LOG.info(Writing: + fileName + . + imageFormat); -ImageIOUtil.writeImage(image, imageFormat, fileName, Math.round(dpi)); -} - -/** - * Test to validate image rendering of file set. - * @throws Exception when there is an exception
svn commit: r1576588 - /pdfbox/trunk/parent/pom.xml
Author: tilman Date: Wed Mar 12 06:09:53 2014 New Revision: 1576588 URL: http://svn.apache.org/r1576588 Log: PDFBOX-1975: added JAI and levigo for test purposes only Modified: pdfbox/trunk/parent/pom.xml Modified: pdfbox/trunk/parent/pom.xml URL: http://svn.apache.org/viewvc/pdfbox/trunk/parent/pom.xml?rev=1576588r1=1576587r2=1576588view=diff == --- pdfbox/trunk/parent/pom.xml (original) +++ pdfbox/trunk/parent/pom.xml Wed Mar 12 06:09:53 2014 @@ -82,8 +82,38 @@ artifactIdicu4j/artifactId version52.1/version /dependency + + !-- For legal reasons (incompatible license), these two dependencies + are to be used only in the tests and may not be distributed. + See also LEGAL-195 -- + dependency + groupIdcom.levigo.jbig2/groupId + artifactIdlevigo-jbig2-imageio/artifactId + version1.6.2/version + scopetest/scope + /dependency + dependency + groupIdjavax.media/groupId + artifactIdjai_imageio/artifactId + version1.1/version + scopetest/scope + /dependency /dependencies /dependencyManagement + + repositories + repository + idjbig2.googlecode/id + nameJBIG2 ImageIO-Plugin repository at googlecode.com/name + urlhttp://jbig2-imageio.googlecode.com/svn/maven-repository//url + /repository + repository + idosgeo/id + nameOpen Source Geospatial Foundation Repository/name + urlhttp://download.osgeo.org/webdav/geotools//url + /repository + /repositories + profiles profile idpedantic/id
svn commit: r1576598 - /pdfbox/trunk/pdfbox/pom.xml
Author: tilman Date: Wed Mar 12 07:00:05 2014 New Revision: 1576598 URL: http://svn.apache.org/r1576598 Log: PDFBOX-1975: added JAI and levigo for test purposes only Modified: pdfbox/trunk/pdfbox/pom.xml Modified: pdfbox/trunk/pdfbox/pom.xml URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/pom.xml?rev=1576598r1=1576597r2=1576598view=diff == --- pdfbox/trunk/pdfbox/pom.xml (original) +++ pdfbox/trunk/pdfbox/pom.xml Wed Mar 12 07:00:05 2014 @@ -71,6 +71,19 @@ artifactIdjunit/artifactId scopetest/scope /dependency +!-- For legal reasons (incompatible license), these two dependencies + are to be used only in the tests and may not be distributed. + See also LEGAL-195 -- +dependency + groupIdcom.levigo.jbig2/groupId + artifactIdlevigo-jbig2-imageio/artifactId + scopetest/scope +/dependency +dependency + groupIdjavax.media/groupId + artifactIdjai_imageio/artifactId + scopetest/scope +/dependency /dependencies build
svn commit: r1576599 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Wed Mar 12 07:08:39 2014 New Revision: 1576599 URL: http://svn.apache.org/r1576599 Log: PDFBOX-1975: activated unit tests for TIFF (resolution and compression) Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1576599r1=1576598r2=1576599view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Wed Mar 12 07:08:39 2014 @@ -67,22 +67,35 @@ public class TestImageIOUtils extends Te { float dpi = 120; document = PDDocument.load(file); + // testing PNG writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); checkResolution(outDir + file.getName() + -1. + imageType, (int) dpi); + // testing JPG/JPEG imageType = jpg; writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); +//TODO this one doesn't save the meta data + // testing BMP imageType = bmp; writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); +//TODO sometimes empty, sometimes correct? +//checkResolution(outDir + file.getName() + -1. + imageType, (int) dpi); + // testing WBMP +//TODO this doesn't work at all, am empty image is always created imageType = wbmp; writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); + // testing TIFF imageType = tif; writeImage(document, imageType, outDir + file.getName() + -bw-, ImageType.BINARY, dpi); +checkResolution(outDir + file.getName() + -bw-1. + imageType, (int) dpi); +checkTiffCompression(outDir + file.getName() + -bw-1. + imageType, CCITT T.6); writeImage(document, imageType, outDir + file.getName() + -co-, ImageType.RGB, dpi); +checkResolution(outDir + file.getName() + -co-1. + imageType, (int) dpi); +checkTiffCompression(outDir + file.getName() + -co-1. + imageType, LZW); } finally { @@ -144,6 +157,7 @@ public class TestImageIOUtils extends Te private void checkResolution(String filename, int expectedResolution) throws IOException { +assertFalse(Empty file + filename, new File(filename).length() == 0); String suffix = filename.substring(filename.lastIndexOf('.') + 1); if (BMP.equals(suffix.toUpperCase())) { @@ -210,14 +224,14 @@ public class TestImageIOUtils extends Te } /** - * Get the compression of a TIFF file + * checks whether the compression of a TIFF file is as expected. * * @param filename Filename - * @return the TIFF compression + * @param the expected TIFF compression * - * @throws IOException + * @throws IOException if something goes wrong */ -String getTiffCompression(String filename) throws IOException +void checkTiffCompression(String filename, String expectedCompression) throws IOException { Iterator readers = ImageIO.getImageReadersBySuffix(tiff); ImageReader reader = (ImageReader) readers.next(); @@ -227,10 +241,10 @@ public class TestImageIOUtils extends Te Element root = (Element) imageMetadata.getAsTree(STANDARD_METADATA_FORMAT); Element comprElement = (Element) root.getElementsByTagName(Compression).item(0); Node comprTypeNode = comprElement.getElementsByTagName(CompressionTypeName).item(0); -String compression = comprTypeNode.getAttributes().getNamedItem(value).getNodeValue(); +String actualCompression = comprTypeNode.getAttributes().getNamedItem(value).getNodeValue(); +assertEquals(Incorrect TIFF compression in file + filename, expectedCompression, actualCompression); iis.close(); reader.dispose(); -return compression; } }
svn commit: r1576815 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Wed Mar 12 16:53:04 2014 New Revision: 1576815 URL: http://svn.apache.org/r1576815 Log: PDFBOX-1975: fix build problem when test directory already existed Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1576815r1=1576814r2=1576815view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Wed Mar 12 16:53:04 2014 @@ -125,11 +125,12 @@ public class TestImageIOUtils extends Te String inDir = src/test/resources/input/ImageIOUtil; String outDir = target/test-output/ImageIOUtil/; -if (!new File(outDir).mkdirs()) +new File(outDir).mkdirs(); +if (!new File(outDir).exists()) { throw new IOException(could not create output directory); } - + File[] testFiles = new File(inDir).listFiles(new FilenameFilter() { public boolean accept(File dir, String name)
svn commit: r1576821 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java
Author: tilman Date: Wed Mar 12 17:05:28 2014 New Revision: 1576821 URL: http://svn.apache.org/r1576821 Log: PDFBOX-1977: Check whether chunk needs adjusting before writing EOD Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java?rev=1576821r1=1576820r2=1576821view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Wed Mar 12 17:05:28 2014 @@ -105,22 +105,8 @@ public class LZWFilter implements Filter result.write(newData); codeTable.add(newData); } -if (codeTable.size() = 2047) -{ -chunk = 12; -} -else if (codeTable.size() = 1023) -{ -chunk = 11; -} -else if (codeTable.size() = 511) -{ -chunk = 10; -} -else -{ -chunk = 9; -} + +chunk = calculateChunk(codeTable.size()); prevCommand = nextCommand; } } @@ -168,6 +154,7 @@ public class LZWFilter implements Filter if (newFoundCode == -1) { // use previous +chunk = calculateChunk(codeTable.size() - 1); out.writeBits(foundCode, chunk); // create new table entry codeTable.add(inputPattern); @@ -191,29 +178,22 @@ public class LZWFilter implements Filter foundCode = newFoundCode; } } -if (codeTable.size() - 1 = 2047) -{ -chunk = 12; -} -else if (codeTable.size() - 1 = 1023) -{ -chunk = 11; -} -else if (codeTable.size() - 1 = 511) -{ -chunk = 10; -} -else -{ -chunk = 9; -} } if (foundCode != -1) { +chunk = calculateChunk(codeTable.size() - 1); out.writeBits(foundCode, chunk); } + +// PPDFBOX-1977: the decoder wouldn't know that the encoder would output +// an EOD as code, so he would have increased his own code table and +// possibly adjusted the chunk. Therefore, the encoder must behave as +// if the code table had just grown and thus it must be checked it is +// needed to adjust the chunk, based on an increased table size parameter +chunk = calculateChunk(codeTable.size()); + out.writeBits(EOD, chunk); -out.writeBits(0, 7); +out.writeBits(0, 7); // pad with 0 out.flush(); // must do or file will be empty :-( codeTable.clear(); } @@ -275,4 +255,27 @@ public class LZWFilter implements Filter codeTable.add(null); // 257 CLEAR_TABLE } +/** + * Calculate the appropriate chunk size + * + * @param tabSize the size of the code table + * + * @return a value between 9 and 12 + */ +private int calculateChunk(int tabSize) +{ +if (tabSize = 2047) +{ +return 12; +} +if (tabSize = 1023) +{ +return 11; +} +if (tabSize = 511) +{ +return 10; +} +return 9; +} }
svn commit: r1576820 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java
Author: tilman Date: Wed Mar 12 17:05:03 2014 New Revision: 1576820 URL: http://svn.apache.org/r1576820 Log: PDFBOX-1977: Check whether chunk needs adjusting before writing EOD Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java?rev=1576820r1=1576819r2=1576820view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Wed Mar 12 17:05:03 2014 @@ -102,22 +102,8 @@ public class LZWFilter extends Filter decoded.write(newData); codeTable.add(newData); } -if (codeTable.size() = 2047) -{ -chunk = 12; -} -else if (codeTable.size() = 1023) -{ -chunk = 11; -} -else if (codeTable.size() = 511) -{ -chunk = 10; -} -else -{ -chunk = 9; -} + +chunk = calculateChunk(codeTable.size()); prevCommand = nextCommand; } } @@ -164,6 +150,7 @@ public class LZWFilter extends Filter if (newFoundCode == -1) { // use previous +chunk = calculateChunk(codeTable.size() - 1); out.writeBits(foundCode, chunk); // create new table entry codeTable.add(inputPattern); @@ -187,29 +174,22 @@ public class LZWFilter extends Filter foundCode = newFoundCode; } } -if (codeTable.size() - 1 = 2047) -{ -chunk = 12; -} -else if (codeTable.size() - 1 = 1023) -{ -chunk = 11; -} -else if (codeTable.size() - 1 = 511) -{ -chunk = 10; -} -else -{ -chunk = 9; -} } if (foundCode != -1) { +chunk = calculateChunk(codeTable.size() - 1); out.writeBits(foundCode, chunk); } + +// PPDFBOX-1977: the decoder wouldn't know that the encoder would output +// an EOD as code, so he would have increased his own code table and +// possibly adjusted the chunk. Therefore, the encoder must behave as +// if the code table had just grown and thus it must be checked it is +// needed to adjust the chunk, based on an increased table size parameter +chunk = calculateChunk(codeTable.size()); + out.writeBits(EOD, chunk); -out.writeBits(0, 7); +out.writeBits(0, 7); // pad with 0 out.flush(); // must do or file will be empty :-( codeTable.clear(); } @@ -270,4 +250,28 @@ public class LZWFilter extends Filter codeTable.add(null); // 256 EOD codeTable.add(null); // 257 CLEAR_TABLE } + +/** + * Calculate the appropriate chunk size + * + * @param tabSize the size of the code table + * + * @return a value between 9 and 12 + */ +private int calculateChunk(int tabSize) +{ +if (tabSize = 2047) +{ +return 12; +} +if (tabSize = 1023) +{ +return 11; +} +if (tabSize = 511) +{ +return 10; +} +return 9; +} }
svn commit: r1576868 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java
Author: tilman Date: Wed Mar 12 19:36:26 2014 New Revision: 1576868 URL: http://svn.apache.org/r1576868 Log: PDFBOX-1977: set and test resolution for JPEG images (forgot javadoc and cleanup) Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java?rev=1576868r1=1576867r2=1576868view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java Wed Mar 12 19:36:26 2014 @@ -15,7 +15,6 @@ */ package org.apache.pdfbox.util; -import java.awt.image.BufferedImage; import javax.imageio.metadata.IIOInvalidTreeException; import javax.imageio.metadata.IIOMetadata; import org.w3c.dom.Element; @@ -28,11 +27,18 @@ class JPEGUtil { static final String JPEG_NATIVE_FORMAT = javax_imageio_jpeg_image_1.0; +/** + * Set dpi ina JPEG file + * + * @param metadata the meta data + * @param dpi the dpi + * + * @throws IIOInvalidTreeException if something goes wrong + */ static void updateMetadata(IIOMetadata metadata, int dpi) throws IIOInvalidTreeException { // https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/writer/imageio/ImageIOJPEGImageWriter.java // http://docs.oracle.com/javase/6/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html - Element root = (Element) metadata.getAsTree(JPEG_NATIVE_FORMAT); Element child = (Element) root.getElementsByTagName(app0JFIF).item(0); child.setAttribute(resUnits, 1); // inch
svn commit: r1576902 - /pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf
Author: tilman Date: Wed Mar 12 21:06:10 2014 New Revision: 1576902 URL: http://svn.apache.org/r1576902 Log: PDFBOX-1977: add a JBIG2 sample PDF Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf (with props) Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf?rev=1576902view=auto == Binary file - no diff available. Propchange: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf -- svn:mime-type = application/pdf
svn commit: r1577249 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Thu Mar 13 17:04:52 2014 New Revision: 1577249 URL: http://svn.apache.org/r1577249 Log: PDFBOX-1975: added a read-after-write test with compare where possible Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1577249r1=1577248r2=1577249view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Thu Mar 13 17:04:52 2014 @@ -16,6 +16,7 @@ */ package org.apache.pdfbox.util; +import java.awt.Color; import java.awt.image.BufferedImage; import java.io.DataInputStream; import java.io.File; @@ -29,12 +30,10 @@ import javax.imageio.ImageReader; import javax.imageio.metadata.IIOMetadata; import javax.imageio.stream.ImageInputStream; -import junit.framework.Assert; import junit.framework.TestCase; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertNotNull; import static junit.framework.TestCase.assertTrue; -import static junit.framework.TestCase.fail; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -85,13 +84,12 @@ public class TestImageIOUtils extends Te // testing GIF imageType = gif; writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); -//TODO -//checkResolution(outDir + file.getName() + -1. + imageType, (int) dpi); +// no META data posible for GIF, thus no test // testing WBMP imageType = wbmp; writeImage(document, imageType, outDir + file.getName() + -, ImageType.BINARY, dpi); -//TODO check that it isn't empty, i.e. that a real image is created +// no META data posible for WBMP, thus no test // testing TIFF imageType = tif; @@ -111,6 +109,52 @@ public class TestImageIOUtils extends Te } } + +/** + * Checks whether file image size and content are identical + * @param filename the filename where we just wrote to + * @param image the image that is to be checked + * @throws IOException if something goes wrong + */ +private void checkImageFileSizeAndContent(String filename, BufferedImage image) +throws IOException +{ +BufferedImage newImage = ImageIO.read(new File(filename)); +assertNotNull(File ' + filename + ' could not be read, newImage); +checkBufferedImageSize(filename, image, newImage); +for (int x = 0; x image.getWidth(); ++x) +{ +for (int y = 0; y image.getHeight(); ++y) +{ +if (image.getRGB(x, y) != newImage.getRGB(x, y)) +{ +assertEquals(\File ' + filename + ' has different pixel at ( + x + , + y + ), new Color(image.getRGB(x, y)), new Color(newImage.getRGB(x, y))); +} +} +} +} + +/** + * Checks whether file image size is identical + * @param filename the filename where we just wrote to + * @param image the image that is to be checked + * @throws IOException if something goes wrong + */ +private void checkImageFileSize(String filename, BufferedImage image) +throws IOException +{ +BufferedImage newImage = ImageIO.read(new File(filename)); +assertNotNull(File ' + filename + ' could not be read, newImage); +checkBufferedImageSize(filename, image, newImage); +} + +private void checkBufferedImageSize(String filename, +BufferedImage image, BufferedImage newImage) throws IOException +{ +assertEquals(File ' + filename + ' has different height after read, image.getHeight(), newImage.getHeight()); +assertEquals(File ' + filename + ' has different width after read, image.getWidth(), newImage.getWidth()); +} + private void writeImage(PDDocument document, String imageFormat, String outputPrefix, ImageType imageType, float dpi) throws IOException { @@ -118,7 +162,18 @@ public class TestImageIOUtils extends Te BufferedImage image = renderer.renderImageWithDPI(0, dpi, imageType); String fileName = outputPrefix + 1; LOG.info(Writing: + fileName + . + imageFormat); -ImageIOUtil.writeImage(image, imageFormat, fileName, Math.round(dpi)); +ImageIOUtil.writeImage(image, imageFormat, fileName, Math.round(dpi)); +if (true) return; +if (jpg.equals(imageFormat) || gif.equals(imageFormat
svn commit: r1577260 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java
Author: tilman Date: Thu Mar 13 17:49:22 2014 New Revision: 1577260 URL: http://svn.apache.org/r1577260 Log: PDFBOX-1964: support non-sequential parser Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java?rev=1577260r1=1577259r2=1577260view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Thu Mar 13 17:49:22 2014 @@ -34,6 +34,7 @@ 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.RandomAccess; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.PDDocumentInformation; @@ -52,10 +53,11 @@ import org.apache.pdfbox.pdmodel.interac import org.apache.pdfbox.pdmodel.interactive.form.PDFieldFactory; /** - * This class will take a list of pdf documents and merge them, saving the result in a new document. - * + * This class will take a list of pdf documents and merge them, saving the + * result in a new document. + * * @author a href=mailto:b...@benlitchfield.com;Ben Litchfield/a - * + * */ public class PDFMergerUtility { @@ -76,7 +78,7 @@ public class PDFMergerUtility /** * Get the name of the destination file. - * + * * @return Returns the destination. */ public String getDestinationFileName() @@ -86,7 +88,7 @@ public class PDFMergerUtility /** * Set the name of the destination file. - * + * * @param destination The destination to set. */ public void setDestinationFileName(String destination) @@ -96,7 +98,7 @@ public class PDFMergerUtility /** * Get the destination OutputStream. - * + * * @return Returns the destination OutputStream. */ public OutputStream getDestinationStream() @@ -106,7 +108,7 @@ public class PDFMergerUtility /** * Set the destination OutputStream. - * + * * @param destStream The destination to set. */ public void setDestinationStream(OutputStream destStream) @@ -116,7 +118,7 @@ public class PDFMergerUtility /** * Add a source file to the list of files to merge. - * + * * @param source Full path and file name of source document. */ public void addSource(String source) @@ -133,7 +135,7 @@ public class PDFMergerUtility /** * Add a source file to the list of files to merge. - * + * * @param source File representing source document */ public void addSource(File source) @@ -150,7 +152,7 @@ public class PDFMergerUtility /** * Add a source to the list of documents to merge. - * + * * @param source InputStream representing source document */ public void addSource(InputStream source) @@ -160,8 +162,9 @@ public class PDFMergerUtility /** * Add a list of sources to the list of documents to merge. - * - * @param sourcesList List of InputStream objects representing source documents + * + * @param sourcesList List of InputStream objects representing source + * documents */ public void addSources(ListInputStream sourcesList) { @@ -169,12 +172,31 @@ public class PDFMergerUtility } /** - * Merge the list of source documents, saving the result in the destination file. - * + * Merge the list of source documents, saving the result in the destination + * file. + * * @throws IOException If there is an error saving the document. */ public void mergeDocuments() throws IOException { +mergeDocuments(false, null); +} + +/** + * Merge the list of source documents with the non sequential parser, saving + * the result in the destination file. + * + * @param scratchFile location to store temp PDFBox data for this output + * document + * @throws IOException If there is an error saving the document. + */ +public void mergeDocumentsNonSeq(RandomAccess scratchFile) throws IOException +{ +mergeDocuments(true, scratchFile); +} + +private void mergeDocuments(boolean isNonSeq, RandomAccess scratchFile) throws IOException +{ PDDocument destination = null; InputStream sourceFile; PDDocument source; @@ -186,12 +208,27 @@ public class PDFMergerUtility { IteratorInputStream sit = sources.iterator(); sourceFile = sit.next
svn commit: r1577261 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java
Author: tilman Date: Thu Mar 13 17:51:32 2014 New Revision: 1577261 URL: http://svn.apache.org/r1577261 Log: PDFBOX-1964: support non-sequential parser Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java?rev=1577261r1=1577260r2=1577261view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Thu Mar 13 17:51:32 2014 @@ -35,6 +35,7 @@ import org.apache.pdfbox.cos.COSNumber; import org.apache.pdfbox.cos.COSStream; import org.apache.pdfbox.cos.COSString; import org.apache.pdfbox.exceptions.COSVisitorException; +import org.apache.pdfbox.io.RandomAccess; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.PDDocumentInformation; @@ -53,10 +54,11 @@ import org.apache.pdfbox.pdmodel.interac import org.apache.pdfbox.pdmodel.interactive.form.PDFieldFactory; /** - * This class will take a list of pdf documents and merge them, saving the result in a new document. - * + * This class will take a list of pdf documents and merge them, saving the + * result in a new document. + * * @author a href=mailto:b...@benlitchfield.com;Ben Litchfield/a - * + * */ public class PDFMergerUtility { @@ -77,7 +79,7 @@ public class PDFMergerUtility /** * Get the name of the destination file. - * + * * @return Returns the destination. */ public String getDestinationFileName() @@ -87,7 +89,7 @@ public class PDFMergerUtility /** * Set the name of the destination file. - * + * * @param destination The destination to set. */ public void setDestinationFileName(String destination) @@ -97,7 +99,7 @@ public class PDFMergerUtility /** * Get the destination OutputStream. - * + * * @return Returns the destination OutputStream. */ public OutputStream getDestinationStream() @@ -107,7 +109,7 @@ public class PDFMergerUtility /** * Set the destination OutputStream. - * + * * @param destStream The destination to set. */ public void setDestinationStream(OutputStream destStream) @@ -117,7 +119,7 @@ public class PDFMergerUtility /** * Add a source file to the list of files to merge. - * + * * @param source Full path and file name of source document. */ public void addSource(String source) @@ -134,7 +136,7 @@ public class PDFMergerUtility /** * Add a source file to the list of files to merge. - * + * * @param source File representing source document */ public void addSource(File source) @@ -151,7 +153,7 @@ public class PDFMergerUtility /** * Add a source to the list of documents to merge. - * + * * @param source InputStream representing source document */ public void addSource(InputStream source) @@ -161,8 +163,9 @@ public class PDFMergerUtility /** * Add a list of sources to the list of documents to merge. - * - * @param sourcesList List of InputStream objects representing source documents + * + * @param sourcesList List of InputStream objects representing source + * documents */ public void addSources(ListInputStream sourcesList) { @@ -170,13 +173,37 @@ public class PDFMergerUtility } /** - * Merge the list of source documents, saving the result in the destination file. - * + * Merge the list of source documents, saving the result in the destination + * file. + * * @throws IOException If there is an error saving the document. - * @throws COSVisitorException If an error occurs while saving the destination file. + * @throws COSVisitorException If an error occurs while saving the + * destination file. */ public void mergeDocuments() throws IOException, COSVisitorException { +mergeDocuments(false, null); +} + +/** + * Merge the list of source documents with the non sequential parser, saving + * the result in the destination file. + * + * @param scratchFile location to store temp PDFBox data for this output + * document + * @throws IOException If there is an error saving the document. + * @throws COSVisitorException If an error occurs while saving the + * destination file. + */ +public void mergeDocumentsNonSeq(RandomAccess scratchFile) +throws IOException, COSVisitorException +{ +mergeDocuments(true, scratchFile
svn commit: r1577262 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java
Author: tilman Date: Thu Mar 13 18:03:15 2014 New Revision: 1577262 URL: http://svn.apache.org/r1577262 Log: PDFBOX-1964: improved javadoc Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java?rev=1577262r1=1577261r2=1577262view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Thu Mar 13 18:03:15 2014 @@ -190,7 +190,7 @@ public class PDFMergerUtility * the result in the destination file. * * @param scratchFile location to store temp PDFBox data for this output - * document + * document, can be null if temp data is to be stored in memory * @throws IOException If there is an error saving the document. * @throws COSVisitorException If an error occurs while saving the * destination file.
svn commit: r1577263 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java
Author: tilman Date: Thu Mar 13 18:03:24 2014 New Revision: 1577263 URL: http://svn.apache.org/r1577263 Log: PDFBOX-1964: improved javadoc Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java?rev=1577263r1=1577262r2=1577263view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFMergerUtility.java Thu Mar 13 18:03:24 2014 @@ -187,7 +187,7 @@ public class PDFMergerUtility * the result in the destination file. * * @param scratchFile location to store temp PDFBox data for this output - * document + * document, can be null if temp data is to be stored in memory * @throws IOException If there is an error saving the document. */ public void mergeDocumentsNonSeq(RandomAccess scratchFile) throws IOException
svn commit: r1577266 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
Author: tilman Date: Thu Mar 13 18:12:38 2014 New Revision: 1577266 URL: http://svn.apache.org/r1577266 Log: PDFBOX-1984: corrected javadoc Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java?rev=1577266r1=1577265r2=1577266view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java Thu Mar 13 18:12:38 2014 @@ -194,13 +194,13 @@ public abstract class PDFont implements public abstract float getFontWidth(byte[] c, int offset, int length) throws IOException; /** - * This will get the font width for a character. + * This will get the font height for a character. * - * @param c The character code to get the width for. + * @param c The character code to get the height for. * @param offset The offset into the array. * @param length The length of the data. * - * @return The width is in 1000 unit of text space, ie 333 or 777 + * @return The height is in 1000 unit of text space, ie 333 or 777 * * @throws IOException If an error occurs while parsing. */
svn commit: r1577267 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
Author: tilman Date: Thu Mar 13 18:14:57 2014 New Revision: 1577267 URL: http://svn.apache.org/r1577267 Log: PDFBOX-1984: corrected javadoc Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java?rev=1577267r1=1577266r2=1577267view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java Thu Mar 13 18:14:57 2014 @@ -265,13 +265,13 @@ public abstract class PDFont implements public abstract float getFontWidth( byte[] c, int offset, int length ) throws IOException; /** - * This will get the font width for a character. + * This will get the font height for a character. * - * @param c The character code to get the width for. + * @param c The character code to get the height for. * @param offset The offset into the array. * @param length The length of the data. * - * @return The width is in 1000 unit of text space, ie 333 or 777 + * @return The height is in 1000 unit of text space, ie 333 or 777 * * @throws IOException If an error occurs while parsing. */
svn commit: r1577341 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Thu Mar 13 22:14:45 2014 New Revision: 1577341 URL: http://svn.apache.org/r1577341 Log: PDFBOX-1975: check color count; remove a statement that disabled code Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1577341r1=1577340r2=1577341view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Thu Mar 13 22:14:45 2014 @@ -24,7 +24,9 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FilenameFilter; import java.io.IOException; +import java.util.HashSet; import java.util.Iterator; +import java.util.Set; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.metadata.IIOMetadata; @@ -121,6 +123,7 @@ public class TestImageIOUtils extends Te { BufferedImage newImage = ImageIO.read(new File(filename)); assertNotNull(File ' + filename + ' could not be read, newImage); +checkNotBlank(filename, newImage); checkBufferedImageSize(filename, image, newImage); for (int x = 0; x image.getWidth(); ++x) { @@ -145,6 +148,7 @@ public class TestImageIOUtils extends Te { BufferedImage newImage = ImageIO.read(new File(filename)); assertNotNull(File ' + filename + ' could not be read, newImage); +checkNotBlank(filename, newImage); checkBufferedImageSize(filename, image, newImage); } @@ -154,6 +158,22 @@ public class TestImageIOUtils extends Te assertEquals(File ' + filename + ' has different height after read, image.getHeight(), newImage.getHeight()); assertEquals(File ' + filename + ' has different width after read, image.getWidth(), newImage.getWidth()); } + +private void checkNotBlank (String filename, BufferedImage newImage) +{ +// http://stackoverflow.com/a/5253698/535646 +SetInteger colors = new HashSetInteger(); +int w = newImage.getWidth(); +int h = newImage.getHeight(); +for (int x = 0; x w; x++) +{ +for (int y = 0; y h; y++) +{ +colors.add(newImage.getRGB(x, y)); +} +} +assertFalse(File ' + filename + ' has less than two colors, colors.size() 2); +} private void writeImage(PDDocument document, String imageFormat, String outputPrefix, ImageType imageType, float dpi) throws IOException @@ -163,7 +183,6 @@ public class TestImageIOUtils extends Te String fileName = outputPrefix + 1; LOG.info(Writing: + fileName + . + imageFormat); ImageIOUtil.writeImage(image, imageFormat, fileName, Math.round(dpi)); -if (true) return; if (jpg.equals(imageFormat) || gif.equals(imageFormat)) { // jpeg is lossy, gif has 256 colors, @@ -175,7 +194,7 @@ public class TestImageIOUtils extends Te checkImageFileSizeAndContent(fileName + . + imageFormat, image); } } - + /** * Test to validate image rendering of file set. * @throws Exception when there is an exception
svn commit: r1577619 - in /pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics: ./ image/ image/ccittg4.tif
Author: tilman Date: Fri Mar 14 17:33:51 2014 New Revision: 1577619 URL: http://svn.apache.org/r1577619 Log: PDFBOX-1983: added a test for CCITTFactory Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/ pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/ pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/ccittg4.tif (with props) Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/ccittg4.tif URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/ccittg4.tif?rev=1577619view=auto == Binary file - no diff available. Propchange: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/ccittg4.tif -- svn:mime-type = image/tiff
svn commit: r1577622 - in /pdfbox/trunk/pdfbox/src/test: java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java resources/org/apache/pdfbox/pdmodel/graphics/image/jpeg.jpg
Author: tilman Date: Fri Mar 14 17:49:32 2014 New Revision: 1577622 URL: http://svn.apache.org/r1577622 Log: PDFBOX-1969: added a test for JPEGFactory Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java (with props) pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/jpeg.jpg (with props) Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java?rev=1577622view=auto == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java (added) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java Fri Mar 14 17:49:32 2014 @@ -0,0 +1,98 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import javax.imageio.ImageIO; +import junit.framework.TestCase; +import static junit.framework.TestCase.assertEquals; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * + * @author Tilman Hausherr + */ +public class JPEGFactoryTest extends TestCase +{ + +/** {@inheritDoc} */ +@Override +public void setUp() throws Exception +{ +super.setUp(); +} + + +/** + * Test of createFromStream method, of class JPEGFactory. + */ +@Test +public void testCreateFromStream() throws Exception +{ +PDDocument document = new PDDocument(); +InputStream stream = new FileInputStream(new File(src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/jpeg.jpg)); +PDImageXObject ximage = JPEGFactory.createFromStream(document, stream); +assertNotNull(ximage); +assertNotNull(ximage.getCOSStream()); +assertTrue(ximage.getCOSStream().getFilteredLength() 0); +assertEquals(8, ximage.getBitsPerComponent()); +assertEquals(344, ximage.getWidth()); +assertEquals(287, ximage.getHeight()); +assertEquals(jpg, ximage.getSuffix()); + +//TODO shouldn't ximage.getImage() return a real image? +//assertNotNull(ximage.getImage()); +//assertEquals(344, ximage.getImage().getWidth()); +//assertEquals(287, ximage.getImage().getHeight()); + +document.close(); +} + +/** + * Test of createFromImage method, of class JPEGFactory. + */ +@Test +public void testCreateFromImage() throws Exception +{ + +//TODO enable this test when JPEGFactory.createFromImage() works +//PDDocument document = new PDDocument(); +//BufferedImage bim = ImageIO.read(new File(src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/jpeg.jpg)); +//PDImageXObject ximage = JPEGFactory.createFromImage(document, bim); +//assertNotNull(ximage); +//assertNotNull(ximage.getCOSStream()); +//assertTrue(ximage.getCOSStream().getFilteredLength() 0); +//assertEquals(8, ximage.getBitsPerComponent()); +//assertEquals(344, ximage.getWidth()); +//assertEquals(287, ximage.getHeight()); +//assertEquals(jpg, ximage.getSuffix()); + +//TODO shouldn't ximage.getImage() return a real image? +//assertNotNull(ximage.getImage()); +//assertEquals(344, ximage.getImage().getWidth()); +//assertEquals(287, ximage.getImage().getHeight()); + +//document.close(); +} + + +} Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java -- svn:eol-style = native Added: pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/jpeg.jpg URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/jpeg.jpg?rev=1577622view=auto == Binary file - no diff
svn commit: r1577653 - /pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf
Author: tilman Date: Fri Mar 14 18:42:37 2014 New Revision: 1577653 URL: http://svn.apache.org/r1577653 Log: PDFBOX-1975: added a CCITT G4 compressed file as test Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf (with props) Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf?rev=1577653view=auto == Binary file - no diff available. Propchange: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf -- svn:mime-type = application/pdf
svn commit: r1577661 - in /pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil: JPXTestCMYK.pdf JPXTestGrey.pdf JPXTestRGB.pdf
Author: tilman Date: Fri Mar 14 18:58:05 2014 New Revision: 1577661 URL: http://svn.apache.org/r1577661 Log: PDFBOX-1975: add three JPX test files Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestCMYK.pdf (with props) pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestGrey.pdf (with props) pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestRGB.pdf (with props) Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestCMYK.pdf URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestCMYK.pdf?rev=1577661view=auto == Binary file - no diff available. Propchange: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestCMYK.pdf -- svn:mime-type = application/pdf Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestGrey.pdf URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestGrey.pdf?rev=1577661view=auto == Binary file - no diff available. Propchange: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestGrey.pdf -- svn:mime-type = application/pdf Added: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestRGB.pdf URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestRGB.pdf?rev=1577661view=auto == Binary file - no diff available. Propchange: pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestRGB.pdf -- svn:mime-type = application/pdf
svn commit: r1577734 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Author: tilman Date: Fri Mar 14 21:38:35 2014 New Revision: 1577734 URL: http://svn.apache.org/r1577734 Log: PDFBOX-1969: fix JPEGFactory bug Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1577734r1=1577733r2=1577734view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Fri Mar 14 21:38:35 2014 @@ -18,12 +18,12 @@ package org.apache.pdfbox.pdmodel.graphi import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; -import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.filter.MissingImageReaderException; import org.apache.pdfbox.io.IOUtils; @@ -40,6 +40,7 @@ import javax.imageio.metadata.IIOMetadat import javax.imageio.plugins.jpeg.JPEGImageWriteParam; import javax.imageio.stream.ImageInputStream; import javax.imageio.stream.ImageOutputStream; +import org.apache.pdfbox.cos.COSStream; /** * Factory for creating a PDImageXObject containing a JPEG compressed image. @@ -170,40 +171,15 @@ public final class JPEGFactory extends I { return createJPEG(document, image, quality, dpi); } - -// Creates an Image XObject from a Buffered Image using JAI Image I/O -private static PDImageXObject createJPEG(PDDocument document, BufferedImage image, - float quality, int dpi) throws IOException + +private static void encodeImageToJPEGStream(BufferedImage image, float quality, int dpi, OutputStream out) +throws IOException { -// extract alpha channel (if any) -BufferedImage awtColor = getColorImage(image); -BufferedImage awtAlpha = getAlphaImage(image); - -// create XObject -PDImageXObject pdImage = new PDImageXObject(new PDStream(document), null); - -// add DCT filter -COSDictionary dict = pdImage.getCOSStream(); -pdImage.getCOSStream().setItem(COSName.FILTER, COSName.DCT_DECODE); - -// alpha - soft mask -if (awtAlpha != null) -{ -PDImage xAlpha = JPEGFactory.createFromImage(document, awtAlpha, quality); -dict.setItem(COSName.SMASK, xAlpha); -} - -// set properties (width, height, depth, color space, etc.) -setPropertiesFromAWT(awtColor, pdImage); - // encode to JPEG -OutputStream out = null; ImageOutputStream ios = null; ImageWriter imageWriter = null; try { -out = pdImage.getCOSStream().createFilteredStream(); - // find JAI writer imageWriter = ImageIO.getImageWritersBySuffix(jpeg).next(); ios = ImageIO.createImageOutputStream(out); @@ -239,6 +215,36 @@ public final class JPEGFactory extends I imageWriter.dispose(); } } +} + +// Creates an Image XObject from a Buffered Image using JAI Image I/O +private static PDImageXObject createJPEG(PDDocument document, BufferedImage image, + float quality, int dpi) throws IOException +{ +// extract alpha channel (if any) +BufferedImage awtColorImage = getColorImage(image); +BufferedImage awtAlphaImage = getAlphaImage(image); + +// create XObject +ByteArrayOutputStream bos = new ByteArrayOutputStream(); +encodeImageToJPEGStream(image, quality, dpi, bos); +ByteArrayInputStream byteStream = new ByteArrayInputStream(bos.toByteArray()); +PDImageXObject pdImage = new PDImageXObject(new PDStream(document, byteStream, true), null); + +// add DCT filter +COSStream dict = pdImage.getCOSStream(); +dict.setItem(COSName.FILTER, COSName.DCT_DECODE); + +// alpha - soft mask +if (awtAlphaImage != null) +{ +encodeImageToJPEGStream(awtAlphaImage, quality, dpi, dict.createFilteredStream()); +PDImage xAlpha = JPEGFactory.createFromImage(document, awtAlphaImage, quality); +dict.setItem(COSName.SMASK, xAlpha); +} + +// set properties (width, height, depth, color space, etc.) +setPropertiesFromAWT(awtColorImage, pdImage); return pdImage; }
svn commit: r1577878 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/graphics/image/ test/java/org/apache/pdfbox/pdmodel/graphics/image/
Author: tilman Date: Sat Mar 15 15:21:50 2014 New Revision: 1577878 URL: http://svn.apache.org/r1577878 Log: PDFBOX-1969: more refactoring; removed useless line; added graphics.dispose() call; prepare test for ARGB image Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java?rev=1577878r1=1577877r2=1577878view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ImageFactory.java Sat Mar 15 15:21:50 2014 @@ -108,6 +108,7 @@ class ImageFactory Graphics2D g = rgbImage.createGraphics(); g.setComposite(AlphaComposite.Src); g.drawImage(image, 0, 0, null); +g.dispose(); return rgbImage; } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1577878r1=1577877r2=1577878view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Sat Mar 15 15:21:50 2014 @@ -21,7 +21,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.IOException; -import java.io.OutputStream; import java.util.Iterator; import org.apache.pdfbox.cos.COSName; @@ -29,18 +28,11 @@ import org.apache.pdfbox.filter.MissingI import org.apache.pdfbox.io.IOUtils; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.common.PDStream; -import org.w3c.dom.Element; - -import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageReader; -import javax.imageio.ImageTypeSpecifier; -import javax.imageio.ImageWriter; -import javax.imageio.metadata.IIOMetadata; -import javax.imageio.plugins.jpeg.JPEGImageWriteParam; import javax.imageio.stream.ImageInputStream; -import javax.imageio.stream.ImageOutputStream; import org.apache.pdfbox.cos.COSStream; +import org.apache.pdfbox.util.ImageIOUtil; /** * Factory for creating a PDImageXObject containing a JPEG compressed image. @@ -172,51 +164,6 @@ public final class JPEGFactory extends I return createJPEG(document, image, quality, dpi); } -private static void encodeImageToJPEGStream(BufferedImage image, float quality, int dpi, OutputStream out) -throws IOException -{ -// encode to JPEG -ImageOutputStream ios = null; -ImageWriter imageWriter = null; -try -{ -// find JAI writer -imageWriter = ImageIO.getImageWritersBySuffix(jpeg).next(); -ios = ImageIO.createImageOutputStream(out); -imageWriter.setOutput(ios); - -// add compression -JPEGImageWriteParam jpegParam = (JPEGImageWriteParam)imageWriter.getDefaultWriteParam(); -jpegParam.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT); -jpegParam.setCompressionQuality(quality); - -// add metadata -ImageTypeSpecifier imageTypeSpecifier = new ImageTypeSpecifier(image); -IIOMetadata data = imageWriter.getDefaultImageMetadata(imageTypeSpecifier, jpegParam); -Element tree = (Element)data.getAsTree(javax_imageio_jpeg_image_1.0); -Element jfif = (Element)tree.getElementsByTagName(app0JFIF).item(0); -jfif.setAttribute(Xdensity, Integer.toString(dpi)); -jfif.setAttribute(Ydensity, Integer.toString(dpi)); -jfif.setAttribute(resUnits, 1); // 1 = dots/inch - -// write -imageWriter.write(data, new IIOImage(image, null, null), jpegParam); -} -finally -{ -// clean up -IOUtils.closeQuietly(out); -if (ios != null) -{ -ios.close(); -} -if (imageWriter != null) -{ -imageWriter.dispose(); -} -} -} - // Creates an Image XObject from a Buffered Image using JAI Image I/O private static PDImageXObject createJPEG(PDDocument document
svn commit: r1577931 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util: ImageIOUtil.java JPEGUtil.java MetaUtil.java TIFFUtil.java
Author: tilman Date: Sat Mar 15 20:07:44 2014 New Revision: 1577931 URL: http://svn.apache.org/r1577931 Log: PDFBOX-1975: expand JPEGUtil for missing nodes in metadata; some refactoring Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/MetaUtil.java (with props) Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1577931r1=1577930r2=1577931view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Sat Mar 15 20:07:44 2014 @@ -32,6 +32,7 @@ import javax.imageio.metadata.IIOInvalid import javax.imageio.metadata.IIOMetadata; import javax.imageio.metadata.IIOMetadataNode; import javax.imageio.stream.ImageOutputStream; +import static org.apache.pdfbox.util.MetaUtil.STANDARD_METADATA_FORMAT; import org.w3c.dom.NodeList; /** @@ -39,8 +40,6 @@ import org.w3c.dom.NodeList; */ public class ImageIOUtil { -private static final String STANDARD_METADATA_FORMAT = javax_imageio_1.0; - private ImageIOUtil() { } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java?rev=1577931r1=1577930r2=1577931view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java Sat Mar 15 20:07:44 2014 @@ -17,7 +17,11 @@ package org.apache.pdfbox.util; import javax.imageio.metadata.IIOInvalidTreeException; import javax.imageio.metadata.IIOMetadata; +import javax.imageio.metadata.IIOMetadataNode; +import static org.apache.pdfbox.util.MetaUtil.JPEG_NATIVE_FORMAT; +import static org.apache.pdfbox.util.MetaUtil.debugLogMetadata; import org.w3c.dom.Element; +import org.w3c.dom.NodeList; /** * @@ -25,25 +29,63 @@ import org.w3c.dom.Element; */ class JPEGUtil { -static final String JPEG_NATIVE_FORMAT = javax_imageio_jpeg_image_1.0; - /** - * Set dpi ina JPEG file - * + * Set dpi in a JPEG file + * * @param metadata the meta data * @param dpi the dpi - * + * * @throws IIOInvalidTreeException if something goes wrong */ static void updateMetadata(IIOMetadata metadata, int dpi) throws IIOInvalidTreeException { -// https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/writer/imageio/ImageIOJPEGImageWriter.java +debugLogMetadata(metadata, JPEG_NATIVE_FORMAT); + +// https://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/writer/imageio/ImageIOJPEGImageWriter.java // http://docs.oracle.com/javase/6/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html Element root = (Element) metadata.getAsTree(JPEG_NATIVE_FORMAT); -Element child = (Element) root.getElementsByTagName(app0JFIF).item(0); -child.setAttribute(resUnits, 1); // inch -child.setAttribute(Xdensity, Integer.toString(dpi)); -child.setAttribute(Ydensity, Integer.toString(dpi)); -metadata.mergeTree(JPEG_NATIVE_FORMAT, root); +NodeList jvarNodeList = root.getElementsByTagName(JPEGvariety); +Element jvarChild; +if (jvarNodeList.getLength() == 0) +{ +jvarChild = new IIOMetadataNode(JPEGvariety); +root.appendChild(jvarChild); +} +else +{ +jvarChild = (Element) jvarNodeList.item(0); +} + +NodeList jfifNodeList = jvarChild.getElementsByTagName(app0JFIF); +Element jfifChild; +if (jfifNodeList.getLength() == 0) +{ +jfifChild = new IIOMetadataNode(app0JFIF); +jvarChild.appendChild(jfifChild); +} +else +{ +jfifChild = (Element) jfifNodeList.item(0); +} +if (jfifChild.getAttribute(majorVersion).isEmpty()) +{ +jfifChild.setAttribute(majorVersion, 1); +} +if (jfifChild.getAttribute(minorVersion).isEmpty()) +{ +jfifChild.setAttribute(minorVersion, 2); +} +jfifChild.setAttribute(resUnits, 1); // inch +jfifChild.setAttribute(Xdensity, Integer.toString(dpi)); +jfifChild.setAttribute(Ydensity, Integer.toString(dpi
svn commit: r1578259 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Mon Mar 17 07:37:53 2014 New Revision: 1578259 URL: http://svn.apache.org/r1578259 Log: PDFBOX-1975: added error log output if writeImage() returns false Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1578259r1=1578258r2=1578259view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Mon Mar 17 07:37:53 2014 @@ -32,6 +32,8 @@ import javax.imageio.metadata.IIOInvalid import javax.imageio.metadata.IIOMetadata; import javax.imageio.metadata.IIOMetadataNode; import javax.imageio.stream.ImageOutputStream; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.apache.pdfbox.util.MetaUtil.STANDARD_METADATA_FORMAT; import org.w3c.dom.NodeList; @@ -40,6 +42,11 @@ import org.w3c.dom.NodeList; */ public class ImageIOUtil { +/** + * Log instance + */ +private static final Log LOG = LogFactory.getLog(ImageIOUtil.class); + private ImageIOUtil() { } @@ -120,7 +127,7 @@ public class ImageIOUtil IIOMetadata metadata = null; // Loop until we get the best driver, i.e. one that supports // setting dpi in the standard metadata format; however we'd also -// accept a driver that can't if a better one can't be found +// accept a driver that can't, if a better one can't be found while (writers.hasNext()) { if (writer != null) @@ -139,6 +146,15 @@ public class ImageIOUtil } if (writer == null) { +LOG.error(No ImageWriter found for ' + formatName + ' format); +StringBuilder sb = new StringBuilder(); +String[] writerFormatNames = ImageIO.getWriterFormatNames(); +for (String fmt : writerFormatNames) +{ +sb.append(fmt); +sb.append(' '); +} +LOG.error(Supported formats: + sb); return false; }
svn commit: r1578489 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/graphics/image/ test/java/org/apache/pdfbox/pdmodel/graphics/image/ test/resources/org/apache/pdfbox/pdmodel/gra
Author: tilman Date: Mon Mar 17 18:09:50 2014 New Revision: 1578489 URL: http://svn.apache.org/r1578489 Log: PDFBOX-1990: Support creating PDF from lossless encoded images; improved the other tests in that package; added test image Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (with props) pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java - copied, changed from r1578235, pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java (with props) pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/png.png (with props) Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/CCITTFactoryTest.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1578489view=auto == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (added) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Mon Mar 17 18:09:50 2014 @@ -0,0 +1,82 @@ +/* + * Copyright 2014 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pdfbox.pdmodel.graphics.image; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.filter.Filter; +import org.apache.pdfbox.filter.FilterFactory; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; + +/** + * Factory for creating a PDImageXObject containing a lossless compressed image. + * + * @author Tilman Hausherr + */ +class LosslessFactory +{ +/** + * Creates a new lossless encoded Image XObject from a Buffered Image. + * + * @param document the document where the image will be created + * @param image the buffered image to embed + * @return a new Image XObject + * @throws IOException if something goes wrong + */ +static PDImageXObject createLosslessFromImage(PDDocument document, BufferedImage bim) +throws IOException +{ +ByteArrayOutputStream bos = new ByteArrayOutputStream(); + +//TODO use bit writing, indexed, etc +int h = bim.getHeight(); +int w = bim.getWidth(); +for (int y = 0; y h; ++y) +{ +for (int x = 0; x w; ++x) +{ +Color co = new Color(bim.getRGB(x, y)); +bos.write(co.getRed()); +bos.write(co.getGreen()); +bos.write(co.getBlue()); +} +} + +ByteArrayInputStream bais = new ByteArrayInputStream(bos.toByteArray()); + +Filter filter = FilterFactory.INSTANCE.getFilter(COSName.FLATE_DECODE); +ByteArrayOutputStream bos2 = new ByteArrayOutputStream(); +filter.encode(bais, bos2, new COSDictionary(), 0); + +ByteArrayInputStream filteredByteStream = new ByteArrayInputStream(bos2.toByteArray()); +PDImageXObject pdImage = new PDImageXObject(document, filteredByteStream); + +COSDictionary dict = pdImage.getCOSStream(); +dict.setItem(COSName.FILTER, COSName.FLATE_DECODE); +pdImage.setColorSpace(PDDeviceRGB.INSTANCE); //TODO from image +pdImage.setBitsPerComponent(8); //TODO other sizes +pdImage.setHeight(bim.getHeight()); +pdImage.setWidth(bim.getWidth()); +return pdImage; +} + +} Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java
svn commit: r1578503 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java
Author: tilman Date: Mon Mar 17 18:41:31 2014 New Revision: 1578503 URL: http://svn.apache.org/r1578503 Log: PDFBOX-1990: forgot to set the class public Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1578503r1=1578502r2=1578503view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Mon Mar 17 18:41:31 2014 @@ -32,7 +32,7 @@ import org.apache.pdfbox.pdmodel.graphic * * @author Tilman Hausherr */ -class LosslessFactory +public class LosslessFactory { /** * Creates a new lossless encoded Image XObject from a Buffered Image.
svn commit: r1578505 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java
Author: tilman Date: Mon Mar 17 18:42:52 2014 New Revision: 1578505 URL: http://svn.apache.org/r1578505 Log: PDFBOX-1990: forgot to set the method public Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1578505r1=1578504r2=1578505view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Mon Mar 17 18:42:52 2014 @@ -42,7 +42,7 @@ public class LosslessFactory * @return a new Image XObject * @throws IOException if something goes wrong */ -static PDImageXObject createLosslessFromImage(PDDocument document, BufferedImage bim) +public static PDImageXObject createLosslessFromImage(PDDocument document, BufferedImage bim) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream();
svn commit: r1578507 - /pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java
Author: tilman Date: Mon Mar 17 18:46:20 2014 New Revision: 1578507 URL: http://svn.apache.org/r1578507 Log: PDFBOX-1990: added gif, bmp and png to ImageToPdf example Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java?rev=1578507r1=1578506r2=1578507view=diff == --- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java (original) +++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java Mon Mar 17 18:46:20 2014 @@ -16,9 +16,11 @@ */ package org.apache.pdfbox.examples.pdmodel; +import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import javax.imageio.ImageIO; import org.apache.pdfbox.io.RandomAccessFile; @@ -30,6 +32,7 @@ import org.apache.pdfbox.pdmodel.edit.PD import org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory; import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; /** * This is an example that creates a simple document. @@ -65,10 +68,18 @@ public class ImageToPDF { pdImage = JPEGFactory.createFromStream(doc, new FileInputStream(image)); } -else if (image.toLowerCase().endsWith(.tif) || image.toLowerCase().endsWith(.tiff)) +else if (image.toLowerCase().endsWith(.tif) || +image.toLowerCase().endsWith(.tiff)) { pdImage = CCITTFactory.createFromRandomAccess(doc, new RandomAccessFile(new File(image),r)); } +else if (image.toLowerCase().endsWith(.gif) || +image.toLowerCase().endsWith(.bmp) || +image.toLowerCase().endsWith(.png)) +{ +BufferedImage bim = ImageIO.read(new File(image)); +pdImage = LosslessFactory.createLosslessFromImage(doc, bim); +} else { //BufferedImage awtImage = ImageIO.read( new File( image ) );
svn commit: r1578544 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Mon Mar 17 20:20:01 2014 New Revision: 1578544 URL: http://svn.apache.org/r1578544 Log: PDFBOX-1975, PDFBOX-1989: added a test to save PDImageXObject objects from PDF within TestImageIOUtils Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1578544r1=1578543r2=1578544view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Mon Mar 17 20:20:01 2014 @@ -26,6 +26,8 @@ import java.io.FilenameFilter; import java.io.IOException; import java.util.HashSet; import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Set; import javax.imageio.ImageIO; import javax.imageio.ImageReader; @@ -40,6 +42,12 @@ import static junit.framework.TestCase.a import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.apache.pdfbox.pdmodel.graphics.image.NullOutputStream; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.PDFRenderer; import org.w3c.dom.Element; @@ -53,8 +61,50 @@ public class TestImageIOUtils extends Te { private static final Log LOG = LogFactory.getLog(TestImageIOUtils.class); + +/** + * Check whether the resource images can be saved. + * + * @param resources + * @throws IOException + */ +void checkSaveResources(PDResources resources) throws IOException +{ +if (resources == null) +{ +return; +} +MapString, PDXObject xobjects = resources.getXObjects(); +if (xobjects != null) +{ +for (String key : xobjects.keySet()) +{ +PDXObject xobject = xobjects.get(key); +if (xobject instanceof PDImageXObject) +{ +PDImageXObject imageObject = (PDImageXObject) xobject; +String suffix = imageObject.getSuffix(); +if (suffix != null) +{ +if (jpx.equals(suffix)) +{ +suffix = JPEG2000; +} +boolean writeOK = ImageIOUtil.writeImage(imageObject.getImage(), suffix, new NullOutputStream()); +assertTrue(writeOK); +} +} +else if (xobject instanceof PDFormXObject) +{ +checkSaveResources(((PDFormXObject) xobject).getResources()); +} +} +} +} + /** * Validate page rendering for all supported image formats (JDK5). + * * @param file The file to validate * @param outDir Name of the output directory * @throws IOException when there is an exception @@ -69,10 +119,14 @@ public class TestImageIOUtils extends Te float dpi = 120; document = PDDocument.load(file); +// Save image resources of first page +ListPDPage pdPages = document.getDocumentCatalog().getAllPages(); +checkSaveResources(pdPages.get(0).getResources()); + // testing PNG writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); checkResolution(outDir + file.getName() + -1. + imageType, (int) dpi); - + // testing JPG/JPEG imageType = jpg; writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); @@ -87,7 +141,7 @@ public class TestImageIOUtils extends Te imageType = gif; writeImage(document, imageType, outDir + file.getName() + -, ImageType.RGB, dpi); // no META data posible for GIF, thus no test - + // testing WBMP imageType = wbmp; writeImage(document, imageType, outDir + file.getName() + -, ImageType.BINARY, dpi); @@ -104,21 +158,21 @@ public class TestImageIOUtils extends Te } finally { -if (document!= null) +if (document != null) { document.close(); } } } - /** * Checks whether file image size and content
svn commit: r1578940 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java
Author: tilman Date: Tue Mar 18 14:57:37 2014 New Revision: 1578940 URL: http://svn.apache.org/r1578940 Log: PDFBOX-1990: optimize NullOutputStream for speed Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java?rev=1578940r1=1578939r2=1578940view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java Tue Mar 18 14:57:37 2014 @@ -29,4 +29,14 @@ public class NullOutputStream extends Ou public void write(int b) throws IOException { } + +@Override +public void write(byte[] b, int off, int len) throws IOException +{ +} + +@Override +public void write(byte[] b) throws IOException +{ +} }
svn commit: r1579073 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java
Author: tilman Date: Tue Mar 18 22:15:27 2014 New Revision: 1579073 URL: http://svn.apache.org/r1579073 Log: PDFBOX-1990: improve names as suggested by John Hewson Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1579073r1=1579072r2=1579073view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Tue Mar 18 22:15:27 2014 @@ -29,7 +29,7 @@ import org.apache.pdfbox.pdmodel.graphic /** * Factory for creating a PDImageXObject containing a lossless compressed image. - * + * * @author Tilman Hausherr */ public class LosslessFactory @@ -42,22 +42,22 @@ public class LosslessFactory * @return a new Image XObject * @throws IOException if something goes wrong */ -public static PDImageXObject createLosslessFromImage(PDDocument document, BufferedImage bim) +public static PDImageXObject createFromImage(PDDocument document, BufferedImage image) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); //TODO use bit writing, indexed, etc -int h = bim.getHeight(); -int w = bim.getWidth(); +int h = image.getHeight(); +int w = image.getWidth(); for (int y = 0; y h; ++y) { for (int x = 0; x w; ++x) { -Color co = new Color(bim.getRGB(x, y)); -bos.write(co.getRed()); -bos.write(co.getGreen()); -bos.write(co.getBlue()); +Color color = new Color(image.getRGB(x, y)); +bos.write(color.getRed()); +bos.write(color.getGreen()); +bos.write(color.getBlue()); } } @@ -74,8 +74,8 @@ public class LosslessFactory dict.setItem(COSName.FILTER, COSName.FLATE_DECODE); pdImage.setColorSpace(PDDeviceRGB.INSTANCE); //TODO from image pdImage.setBitsPerComponent(8); //TODO other sizes -pdImage.setHeight(bim.getHeight()); -pdImage.setWidth(bim.getWidth()); +pdImage.setHeight(image.getHeight()); +pdImage.setWidth(image.getWidth()); return pdImage; } Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java?rev=1579073r1=1579072r2=1579073view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java Tue Mar 18 22:15:27 2014 @@ -30,14 +30,14 @@ import org.apache.pdfbox.util.ImageIOUti public class LosslessFactoryTest extends TestCase { /** - * Tests LosslessFactoryTest#createLosslessFromImage(PDDocument document, + * Tests LosslessFactoryTest#createFromImage(PDDocument document, * BufferedImage image) */ public void testCreateLosslessFromImage() throws IOException { PDDocument document = new PDDocument(); BufferedImage image = ImageIO.read(JPEGFactoryTest.class.getResourceAsStream(png.png)); -PDImageXObject ximage = LosslessFactory.createLosslessFromImage(document, image); +PDImageXObject ximage = LosslessFactory.createFromImage(document, image); assertNotNull(ximage); assertNotNull(ximage.getCOSStream()); assertTrue(ximage.getCOSStream().getFilteredLength() 0);
svn commit: r1579074 - /pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java
Author: tilman Date: Tue Mar 18 22:17:22 2014 New Revision: 1579074 URL: http://svn.apache.org/r1579074 Log: PDFBOX-1990: improve names as suggested by John Hewson Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java?rev=1579074r1=1579073r2=1579074view=diff == --- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java (original) +++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ImageToPDF.java Tue Mar 18 22:17:22 2014 @@ -78,7 +78,7 @@ public class ImageToPDF image.toLowerCase().endsWith(.png)) { BufferedImage bim = ImageIO.read(new File(image)); -pdImage = LosslessFactory.createLosslessFromImage(doc, bim); +pdImage = LosslessFactory.createFromImage(doc, bim); } else {
svn commit: r1579369 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Wed Mar 19 19:55:33 2014 New Revision: 1579369 URL: http://svn.apache.org/r1579369 Log: PDFBOX-1975: deprecated one call, more javadoc Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1579369r1=1579368r2=1579369view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Wed Mar 19 19:55:33 2014 @@ -46,22 +46,59 @@ public class ImageIOUtil * Log instance */ private static final Log LOG = LogFactory.getLog(ImageIOUtil.class); - + private ImageIOUtil() { } /** - * Writes a buffered image to a file using the given image format. + * Writes a buffered image to a file using the given image format. See + * {@link #writeImage(BufferedImage image, String formatName, + * OutputStream output, int dpi, float quality)} for more details. + * + * @param image the image to be written + * @param formatName the target format (ex. png) which is also the suffix + * @param filename used to construct the filename for the individual image. + * Its suffix will be used as the image format. + * @param dpi the resolution in dpi (dots per inch) + * @return true if the image file was produced, false if there was an error. + * @throws IOException if an I/O error occurs + */ +public static boolean writeImage(BufferedImage image, String filename, +int dpi) throws IOException +{ +File file = new File(filename); +FileOutputStream output = new FileOutputStream(file); +try +{ +String formatName = filename.substring(filename.lastIndexOf('.') + 1); +return writeImage(image, formatName, output, dpi); +} +finally +{ +output.close(); +} +} + +/** + * Writes a buffered image to a file using the given image format. See + * {@link #writeImage(BufferedImage image, String formatName, + * OutputStream output, int dpi, float quality)} for more details. + * * @param image the image to be written * @param formatName the target format (ex. png) which is also the suffix - * @param filename used to construct the filename for the individual images, without the suffix + * for the filename + * @param filename used to construct the filename for the individual image. + * The formatName parameter will be used as the suffix. * @param dpi the resolution in dpi (dots per inch) - * @return true if the image file was produced, false if there was an error + * @return true if the image file was produced, false if there was an error. * @throws IOException if an I/O error occurs + * @deprecated use + * {@link #writeImage(BufferedImage image, String filename, int dpi)}, which + * uses the full filename instead of just the prefix. */ public static boolean writeImage(BufferedImage image, String formatName, String filename, - int dpi) throws IOException +int dpi) throws IOException { File file = new File(filename + . + formatName); FileOutputStream output = new FileOutputStream(file); @@ -76,11 +113,14 @@ public class ImageIOUtil } /** - * Writes a buffered image to a file using the given image format. + * Writes a buffered image to a file using the given image format. See + * {@link #writeImage(BufferedImage image, String formatName, + * OutputStream output, int dpi, float quality)} for more details. + * * @param image the image to be written * @param formatName the target format (ex. png) * @param output the output stream to be used for writing - * @return true if the image file was produced, false if there was an error + * @return true if the image file was produced, false if there was an error. * @throws IOException if an I/O error occurs */ public static boolean writeImage(BufferedImage image, String formatName, OutputStream output) @@ -90,32 +130,42 @@ public class ImageIOUtil } /** - * Writes a buffered image to a file using the given image format. + * Writes a buffered image to a file using the given image format. See + * {@link #writeImage(BufferedImage image, String formatName, + * OutputStream output, int dpi, float quality)} for more details. + * * @param image the image to be written * @param formatName the target format (ex. png) * @param output the output stream to be used
svn commit: r1579414 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
Author: tilman Date: Wed Mar 19 21:42:00 2014 New Revision: 1579414 URL: http://svn.apache.org/r1579414 Log: PDFBOX-1975: fixed javadoc Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1579414r1=1579413r2=1579414view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Wed Mar 19 21:42:00 2014 @@ -57,7 +57,6 @@ public class ImageIOUtil * OutputStream output, int dpi, float quality)} for more details. * * @param image the image to be written - * @param formatName the target format (ex. png) which is also the suffix * @param filename used to construct the filename for the individual image. * Its suffix will be used as the image format. * @param dpi the resolution in dpi (dots per inch)
svn commit: r1579990 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/graphics/image/ test/java/org/apache/pdfbox/pdmodel/graphics/image/ test/resources/org/apache/pdfbox/pdmodel/gra
Author: tilman Date: Fri Mar 21 17:40:54 2014 New Revision: 1579990 URL: http://svn.apache.org/r1579990 Log: PDFBOX-1990: added writing bitonal and grayscale images as single color samples and improved the unit test Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java pdfbox/trunk/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/graphics/image/png.png Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1579990r1=1579989r2=1579990view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Fri Mar 21 17:40:54 2014 @@ -21,11 +21,13 @@ import java.awt.image.WritableRaster; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import javax.imageio.stream.MemoryCacheImageOutputStream; import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.filter.Filter; import org.apache.pdfbox.filter.FilterFactory; import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceColorSpace; import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray; import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; import static org.apache.pdfbox.pdmodel.graphics.image.ImageFactory.getColorImage; @@ -48,22 +50,54 @@ public class LosslessFactory public static PDImageXObject createFromImage(PDDocument document, BufferedImage image) throws IOException { +int bpc; +PDDeviceColorSpace deviceColorSpace; + // extract color channel BufferedImage awtColorImage = getColorImage(image); ByteArrayOutputStream bos = new ByteArrayOutputStream(); -//TODO use bit writing, indexed, etc -int h = awtColorImage.getHeight(); -int w = awtColorImage.getWidth(); -for (int y = 0; y h; ++y) +//TODO: using the grayscale branch for BufferedImage.TYPE_BYTE_GRAY +// fails the test. We use the RGB branch instead until this is fixed. +if ((//image.getType() == BufferedImage.TYPE_BYTE_GRAY || +image.getType() == BufferedImage.TYPE_BYTE_BINARY) + image.getColorModel().getPixelSize() = 8) +{ +MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(bos); + +// grayscale images need one color per sample +bpc = image.getColorModel().getPixelSize(); +deviceColorSpace = PDDeviceGray.INSTANCE; +int h = awtColorImage.getHeight(); +int w = awtColorImage.getWidth(); +for (int y = 0; y h; ++y) +{ +for (int x = 0; x w; ++x) +{ +mcios.writeBits(awtColorImage.getRGB(x, y), bpc); +} +} +mcios.writeBits(0, 7); // padding +mcios.flush(); +mcios.close(); +} +else { -for (int x = 0; x w; ++x) +// RGB +bpc = 8; +deviceColorSpace = PDDeviceRGB.INSTANCE; +int h = awtColorImage.getHeight(); +int w = awtColorImage.getWidth(); +for (int y = 0; y h; ++y) { -Color color = new Color(awtColorImage.getRGB(x, y)); -bos.write(color.getRed()); -bos.write(color.getGreen()); -bos.write(color.getBlue()); +for (int x = 0; x w; ++x) +{ +Color color = new Color(awtColorImage.getRGB(x, y)); +bos.write(color.getRed()); +bos.write(color.getGreen()); +bos.write(color.getBlue()); +} } } @@ -79,8 +113,8 @@ public class LosslessFactory COSDictionary dict = pdImage.getCOSStream(); dict.setItem(COSName.FILTER, COSName.FLATE_DECODE); -pdImage.setColorSpace(PDDeviceRGB.INSTANCE); //TODO from awtColorImage -pdImage.setBitsPerComponent(8); //TODO other sizes +pdImage.setColorSpace(deviceColorSpace); +pdImage.setBitsPerComponent(bpc); pdImage.setHeight(awtColorImage.getHeight()); pdImage.setWidth(awtColorImage.getWidth()); Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactoryTest.java URL: http://svn.apache.org/viewvc/pdfbox
svn commit: r1580201 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java
Author: tilman Date: Sat Mar 22 12:22:31 2014 New Revision: 1580201 URL: http://svn.apache.org/r1580201 Log: PDFBOX-1954: set initialization to CAP_BUTT as per PDF specification Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java?rev=1580201r1=1580200r2=1580201view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDGraphicsState.java Sat Mar 22 12:22:31 2014 @@ -46,7 +46,7 @@ public class PDGraphicsState implements private PDColorSpace nonStrokingColorSpace = PDDeviceGray.INSTANCE; private PDTextState textState = new PDTextState(); private float lineWidth = 1; -private int lineCap = BasicStroke.CAP_SQUARE; +private int lineCap = BasicStroke.CAP_BUTT; private int lineJoin = BasicStroke.JOIN_MITER; private float miterLimit = 10; private PDLineDashPattern lineDashPattern = new PDLineDashPattern();
svn commit: r1580443 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics: color/PDDeviceGray.java image/LosslessFactory.java
Author: tilman Date: Sun Mar 23 04:31:50 2014 New Revision: 1580443 URL: http://svn.apache.org/r1580443 Log: PDFBOX-1990: activate direct encoding of TYPE_BYTE_GRAY lossless images now that test works thanks to fix of PDDeviceGray (PDFBOX-1993 and PDFBOX-1955); removed unused imports in PDDeviceGray. Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java?rev=1580443r1=1580442r2=1580443view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceGray.java Sun Mar 23 04:31:50 2014 @@ -18,16 +18,7 @@ package org.apache.pdfbox.pdmodel.graphi import org.apache.pdfbox.cos.COSName; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; -import java.awt.image.ColorConvertOp; -import java.awt.image.ColorModel; -import java.awt.image.ComponentColorModel; -import java.awt.image.DataBuffer; -import java.awt.image.IndexColorModel; -import java.awt.Transparency; import java.awt.image.WritableRaster; import java.io.IOException; Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java?rev=1580443r1=1580442r2=1580443view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/LosslessFactory.java Sun Mar 23 04:31:50 2014 @@ -58,10 +58,8 @@ public class LosslessFactory ByteArrayOutputStream bos = new ByteArrayOutputStream(); -//TODO: using the grayscale branch for BufferedImage.TYPE_BYTE_GRAY -// fails the test. We use the RGB branch instead until this is fixed. -if ((//image.getType() == BufferedImage.TYPE_BYTE_GRAY || -image.getType() == BufferedImage.TYPE_BYTE_BINARY) +if ((image.getType() == BufferedImage.TYPE_BYTE_GRAY +|| image.getType() == BufferedImage.TYPE_BYTE_BINARY) image.getColorModel().getPixelSize() = 8) { MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(bos);
svn commit: r1581244 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java
Author: tilman Date: Tue Mar 25 05:57:12 2014 New Revision: 1581244 URL: http://svn.apache.org/r1581244 Log: PDFBOX-1998: different composite for rendering of /ImageMask true /Decode [ 1 0 ] Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java?rev=1581244r1=1581243r2=1581244view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDXObjectImage.java Tue Mar 25 05:57:12 2014 @@ -187,9 +187,16 @@ public abstract class PDXObjectImage ext } graphics.fillRect(0, 0, baseImage.getWidth(), baseImage.getHeight()); -// assume default values ([0,1]) for the DecodeArray -// TODO DecodeArray == [1,0] -graphics.setComposite(AlphaComposite.DstIn); +COSArray decode = getDecode(); +if (decode != null decode.getInt(0) == 1) +{ +// PDFBOX-1998 +graphics.setComposite(AlphaComposite.DstOut); +} +else +{ +graphics.setComposite(AlphaComposite.DstIn); +} graphics.drawImage(baseImage, null, 0, 0); graphics.dispose(); return stencilMask;
svn commit: r1581420 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
Author: tilman Date: Tue Mar 25 17:18:39 2014 New Revision: 1581420 URL: http://svn.apache.org/r1581420 Log: PDFBOX-1999: pass unfiltered JBIG2Globals stream to JBIG2 filter, as suggested by Dave Smith Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java?rev=1581420r1=1581419r2=1581420view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Tue Mar 25 17:18:39 2014 @@ -89,7 +89,7 @@ final class JBIG2Filter extends Filter if (globals != null) { iis = ImageIO.createImageInputStream( -new SequenceInputStream(globals.getFilteredStream(), encoded)); +new SequenceInputStream(globals.getUnfilteredStream(), encoded)); reader.setInput(iis); } else
svn commit: r1581422 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
Author: tilman Date: Tue Mar 25 17:20:03 2014 New Revision: 1581422 URL: http://svn.apache.org/r1581422 Log: PDFBOX-1999: pass unfiltered JBIG2Globals stream to JBIG2 filter, as suggested by Dave Smith Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java?rev=1581422r1=1581421r2=1581422view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Tue Mar 25 17:20:03 2014 @@ -79,7 +79,7 @@ public class JBIG2Filter implements Filt } if (st != null) { -compressedData = new SequenceInputStream(st.getFilteredStream(), +compressedData = new SequenceInputStream(st.getUnfilteredStream(), compressedData); } ImageInputStream iis = ImageIO.createImageInputStream(compressedData);
svn commit: r1581603 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter: CCITTFaxFilter.java ccitt/TIFFFaxDecoder.java
Author: tilman Date: Tue Mar 25 23:50:07 2014 New Revision: 1581603 URL: http://svn.apache.org/r1581603 Log: PDFBOX-1074: implemented EncodedByteAlign = true for T6decode Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/TIFFFaxDecoder.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java?rev=1581603r1=1581602r2=1581603view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java Tue Mar 25 23:50:07 2014 @@ -91,6 +91,7 @@ final class CCITTFaxFilter extends Filte // decompress data int k = decodeParms.getInt(COSName.K, 0); +boolean encodedByteAlign = decodeParms.getBoolean(COSName.ENCODED_BYTE_ALIGN, false); int arraySize = (cols + 7) / 8 * rows; TIFFFaxDecoder faxDecoder = new TIFFFaxDecoder(1, cols, rows); // TODO possible options?? @@ -112,7 +113,7 @@ final class CCITTFaxFilter extends Filte else if (k 0) { decompressed = new byte[arraySize]; -faxDecoder.decodeT6(decompressed, compressed, 0, rows, tiffOptions); +faxDecoder.decodeT6(decompressed, compressed, 0, rows, tiffOptions, encodedByteAlign); } // invert bitmap Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/TIFFFaxDecoder.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/TIFFFaxDecoder.java?rev=1581603r1=1581602r2=1581603view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/TIFFFaxDecoder.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/TIFFFaxDecoder.java Tue Mar 25 23:50:07 2014 @@ -881,7 +881,8 @@ public final class TIFFFaxDecoder { byte[] compData, int startX, int height, - long tiffT6Options) { + long tiffT6Options, + boolean encodedByteAlign) { this.data = compData; compression = 4; @@ -918,6 +919,11 @@ public final class TIFFFaxDecoder { int bitOffset; for (int lines = 0; lines height; lines++) { +if (encodedByteAlign bitPointer != 0) +{ +bitPointer = 0; +bytePointer++; +} // a0 has to be set just before the start of the scanline. a0 = -1; isWhite = true;
svn commit: r1581708 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox: cos/COSName.java filter/CCITTFaxDecodeFilter.java filter/TIFFFaxDecoder.java
Author: tilman Date: Wed Mar 26 06:42:33 2014 New Revision: 1581708 URL: http://svn.apache.org/r1581708 Log: PDFBOX-1074: implemented EncodedByteAlign = true for T6decode Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFFaxDecoder.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=1581708r1=1581707r2=1581708view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Wed Mar 26 06:42:33 2014 @@ -535,6 +535,10 @@ public final class COSName extends COSBa /** * A common COSName value. */ +public static final COSName ENCODED_BYTE_ALIGN = new COSName(EncodedByteAlign); +/** + * A common COSName value. + */ public static final COSName ENCODING = new COSName( Encoding ); /** * A common COSName value. @@ -562,6 +566,11 @@ public final class COSName extends COSBa * A common COSName value. */ public static final COSName ENCRYPT_META_DATA = new COSName( EncryptMetadata ); + +/** + * A common COSName value. + */ +public static final COSName END_OF_LINE = new COSName(EndOfLine); /** * A common COSName value. Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java?rev=1581708r1=1581707r2=1581708view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxDecodeFilter.java Wed Mar 26 06:42:33 2014 @@ -102,6 +102,7 @@ public class CCITTFaxDecodeFilter implem rows = Math.max(rows, height); } int k = decodeParms.getInt(COSName.K, 0); +boolean encodedByteAlign = decodeParms.getBoolean(COSName.ENCODED_BYTE_ALIGN, false); int arraySize = (cols + 7) / 8 * rows; TIFFFaxDecoder faxDecoder = new TIFFFaxDecoder(1, cols, rows); // TODO possible options?? @@ -123,7 +124,7 @@ public class CCITTFaxDecodeFilter implem else if (k 0) { byte[] decompressed = new byte[arraySize]; -faxDecoder.decodeT6(decompressed, compressed, 0, rows, tiffOptions); +faxDecoder.decodeT6(decompressed, compressed, 0, rows, tiffOptions, encodedByteAlign); result.write(decompressed); } } Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFFaxDecoder.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFFaxDecoder.java?rev=1581708r1=1581707r2=1581708view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFFaxDecoder.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/TIFFFaxDecoder.java Wed Mar 26 06:42:33 2014 @@ -878,7 +878,8 @@ class TIFFFaxDecoder { byte[] compData, int startX, int height, - long tiffT6Options) { + long tiffT6Options, + boolean encodedByteAlign) { this.data = compData; compression = 4; @@ -915,6 +916,11 @@ class TIFFFaxDecoder { int bitOffset; for (int lines = 0; lines height; lines++) { +if (encodedByteAlign bitPointer != 0) +{ +bitPointer = 0; +bytePointer++; +} // a0 has to be set just before the start of the scanline. a0 = -1; isWhite = true;
svn commit: r1581928 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/filter/ main/java/org/apache/pdfbox/filter/ccitt/ test/java/org/apache/pdfbox/filter/ccitt/
Author: tilman Date: Wed Mar 26 16:48:02 2014 New Revision: 1581928 URL: http://svn.apache.org/r1581928 Log: PDFBOX-1708: implemented EncodedByteAlign = true for CCITTFaxG31DDecodeInputStream Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/CCITTFaxG31DDecodeInputStream.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/filter/ccitt/TestCCITTFaxG31DDecodeInputStream.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java?rev=1581928r1=1581927r2=1581928view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java Wed Mar 26 16:48:02 2014 @@ -100,7 +100,7 @@ final class CCITTFaxFilter extends Filte if (k == 0) { InputStream in = new CCITTFaxG31DDecodeInputStream( -new ByteArrayInputStream(compressed), cols); +new ByteArrayInputStream(compressed), cols, encodedByteAlign); in = new FillOrderChangeInputStream(in); //Decorate to change fill order decompressed = IOUtils.toByteArray(in); in.close(); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/CCITTFaxG31DDecodeInputStream.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/CCITTFaxG31DDecodeInputStream.java?rev=1581928r1=1581927r2=1581928view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/CCITTFaxG31DDecodeInputStream.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/ccitt/CCITTFaxG31DDecodeInputStream.java Wed Mar 26 16:48:02 2014 @@ -35,6 +35,7 @@ public final class CCITTFaxG31DDecodeInp private InputStream source; private int columns; private int rows; +private boolean encodedByteAlign; //for reading compressed bits private int bits; @@ -60,27 +61,34 @@ public final class CCITTFaxG31DDecodeInp /** * Creates a new decoder. + * * @param source the input stream containing the compressed data. * @param columns the number of columns * @param rows the number of rows (0 if undefined) + * @param encodedByteAlign true if each encoded scan line is filled + * to a byte boundary, false if not */ -public CCITTFaxG31DDecodeInputStream(InputStream source, int columns, int rows) +public CCITTFaxG31DDecodeInputStream(InputStream source, int columns, int rows, boolean encodedByteAlign) { this.source = source; this.columns = columns; this.rows = rows; this.decodedLine = new PackedBitArray(columns); this.decodedReadPos = this.decodedLine.getByteCount(); +this.encodedByteAlign = encodedByteAlign; } /** * Creates a new decoder. + * * @param source the input stream containing the compressed data. * @param columns the number of columns + * @param encodedByteAlign true if each encoded scan line is filled + * to a byte boundary, false if not */ -public CCITTFaxG31DDecodeInputStream(InputStream source, int columns) +public CCITTFaxG31DDecodeInputStream(InputStream source, int columns, boolean encodedByteAlign) { -this(source, columns, 0); +this(source, columns, 0, encodedByteAlign); } /** {@inheritDoc} */ @@ -110,6 +118,10 @@ public final class CCITTFaxG31DDecodeInp private boolean decodeLine() throws IOException { +if (encodedByteAlign this.bitPos != 0) +{ +readByte(); +} if (this.bits 0) { return false; //Shortcut after EOD Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/filter/ccitt/TestCCITTFaxG31DDecodeInputStream.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/filter/ccitt/TestCCITTFaxG31DDecodeInputStream.java?rev=1581928r1=1581927r2=1581928view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/filter/ccitt/TestCCITTFaxG31DDecodeInputStream.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/filter/ccitt/TestCCITTFaxG31DDecodeInputStream.java Wed Mar 26 16:48:02 2014 @@ -121,7 +121,7 @@ public class TestCCITTFaxG31DDecodeInput int rows = 2; //We actually have data for three rows. Just checking the restriction. CCITTFaxG31DDecodeInputStream decoder = new
svn commit: r1581986 - /pdfbox/trunk/parent/pom.xml
Author: tilman Date: Wed Mar 26 18:23:31 2014 New Revision: 1581986 URL: http://svn.apache.org/r1581986 Log: PDFBOX-2002: Show deprecation in the build Modified: pdfbox/trunk/parent/pom.xml Modified: pdfbox/trunk/parent/pom.xml URL: http://svn.apache.org/viewvc/pdfbox/trunk/parent/pom.xml?rev=1581986r1=1581985r2=1581986view=diff == --- pdfbox/trunk/parent/pom.xml (original) +++ pdfbox/trunk/parent/pom.xml Wed Mar 26 18:23:31 2014 @@ -141,6 +141,7 @@ plugin artifactIdmaven-compiler-plugin/artifactId configuration +showDeprecationtrue/showDeprecation target1.6/target source1.6/source /configuration
svn commit: r1582785 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java
Author: tilman Date: Fri Mar 28 15:58:24 2014 New Revision: 1582785 URL: http://svn.apache.org/r1582785 Log: PDFBOX-457: ignore /Length value, not used by any other filter, and is wrong if this filter is not the first Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java?rev=1582785r1=1582784r2=1582785view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/CCITTFaxFilter.java Fri Mar 28 15:58:24 2014 @@ -53,27 +53,6 @@ final class CCITTFaxFilter extends Filte COSDictionary decodeParms = (COSDictionary) parameters.getDictionaryObject(COSName.DECODE_PARMS, COSName.DP); -// get compressed data -int length = parameters.getInt(COSName.LENGTH, -1); -byte[] compressed; -if (length != -1) -{ -compressed = new byte[length]; -long written = IOUtils.populateBuffer(encoded, compressed); -if (written != compressed.length) -{ -log.warn(Buffer for compressed data did not match the length -+ of the actual compressed data); -} -} -else -{ -// inline images don't provide the length of the stream so that -// we have to read until the end of the stream to find out the length -// the streams inline images are stored in are mostly small ones -compressed = IOUtils.toByteArray(encoded); -} - // parse dimensions int cols = decodeParms.getInt(COSName.COLUMNS, 1728); int rows = decodeParms.getInt(COSName.ROWS, 0); @@ -96,6 +75,7 @@ final class CCITTFaxFilter extends Filte TIFFFaxDecoder faxDecoder = new TIFFFaxDecoder(1, cols, rows); // TODO possible options?? long tiffOptions = 0; +byte[] compressed = IOUtils.toByteArray(encoded); byte[] decompressed = null; if (k == 0) {
svn commit: r1583195 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools: PDFReader.java PDFToImage.java
Author: tilman Date: Sun Mar 30 20:39:52 2014 New Revision: 1583195 URL: http://svn.apache.org/r1583195 Log: PDFBOX-2002: changed two deprecated calls to ImageIOUtils Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java?rev=1583195r1=1583194r2=1583195view=diff == --- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java (original) +++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java Sun Mar 30 20:39:52 2014 @@ -356,7 +356,7 @@ public class PDFReader extends JFrame imageFilename = imageFilename.substring(0, imageFilename.length() - 4); } imageFilename += _ + (currentPage + 1); -ImageIOUtil.writeImage(pageAsImage, png, imageFilename, 300); +ImageIOUtil.writeImage(pageAsImage, imageFilename, 300); } catch (IOException exception) { Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java?rev=1583195r1=1583194r2=1583195view=diff == --- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java (original) +++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java Sun Mar 30 20:39:52 2014 @@ -247,7 +247,7 @@ public class PDFToImage { BufferedImage image = renderer.renderImageWithDPI(i, dpi, imageType); String fileName = outputPrefix + (i + 1); -success = ImageIOUtil.writeImage(image, imageFormat, fileName, dpi); +success = ImageIOUtil.writeImage(image, fileName, dpi); } if (!success)
svn commit: r1583201 - in /pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox: ./ schema/ type/
Author: tilman Date: Sun Mar 30 21:10:06 2014 New Revision: 1583201 URL: http://svn.apache.org/r1583201 Log: PDFBOX-2002: replaced deprecated junit import with the current one Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DoubleSameTypeSchemaTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/XMPMetaDataTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractSchemaTester.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractXMPSchemaTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AdobePDFErrorsTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/BasicJobTicketSchemaTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/PDFAIdentificationOthersTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/XMPSchemaTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/type/AbstractStructuredTypeTester.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/type/AttributeTest.java pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/type/TestAbstractStructuredType.java Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DoubleSameTypeSchemaTest.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DoubleSameTypeSchemaTest.java?rev=1583201r1=1583200r2=1583201view=diff == --- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DoubleSameTypeSchemaTest.java (original) +++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DoubleSameTypeSchemaTest.java Sun Mar 30 21:10:06 2014 @@ -23,12 +23,10 @@ package org.apache.xmpbox; import java.util.ArrayList; import java.util.List; - -import junit.framework.Assert; - import org.apache.xmpbox.schema.DublinCoreSchema; import org.apache.xmpbox.schema.XMPSchema; import org.apache.xmpbox.type.StructuredType; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/XMPMetaDataTest.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/XMPMetaDataTest.java?rev=1583201r1=1583200r2=1583201view=diff == --- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/XMPMetaDataTest.java (original) +++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/XMPMetaDataTest.java Sun Mar 30 21:10:06 2014 @@ -22,11 +22,9 @@ package org.apache.xmpbox; import java.util.List; - -import junit.framework.Assert; - import org.apache.xmpbox.schema.XMPSchema; import org.apache.xmpbox.xml.XmpSerializationException; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractSchemaTester.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractSchemaTester.java?rev=1583201r1=1583200r2=1583201view=diff == --- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractSchemaTester.java (original) +++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractSchemaTester.java Sun Mar 30 21:10:06 2014 @@ -23,9 +23,6 @@ package org.apache.xmpbox.schema; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.List; - -import junit.framework.Assert; - import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.type.AbstractSimpleProperty; import org.apache.xmpbox.type.ArrayProperty; @@ -34,6 +31,7 @@ import org.apache.xmpbox.type.TypeMappin import org.apache.xmpbox.type.TypeTestingHelper; import org.apache.xmpbox.type.Types; import org.apache.xmpbox.xml.DomXmpParser; +import org.junit.Assert; import org.junit.Test; public abstract class AbstractSchemaTester Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractXMPSchemaTest.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractXMPSchemaTest.java?rev=1583201r1=1583200r2=1583201view=diff == --- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractXMPSchemaTest.java (original) +++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/schema/AbstractXMPSchemaTest.java Sun Mar 30 21:10:06 2014 @@ -27,9 +27,6 @@ import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Map; - -import junit.framework.Assert; - import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.type.AgentNameType; import org.apache.xmpbox.type.BooleanType; @@ -43,6 +40,7 @@ import org.apache.xmpbox.type.TypeMappin import org.apache.xmpbox.type.Types; import
svn commit: r1583204 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive: annotation/PDAnnotationPopup.java documentnavigation/destination/PDPageDestination.java documentnavi
Author: tilman Date: Sun Mar 30 21:36:49 2014 New Revision: 1583204 URL: http://svn.apache.org/r1583204 Log: PDFBOX-2002: replaced deprecated getDictionaryObject() call with the current one Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java?rev=1583204r1=1583203r2=1583204view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/PDAnnotationPopup.java Sun Mar 30 21:36:49 2014 @@ -101,8 +101,8 @@ public class PDAnnotationPopup extends P PDAnnotationMarkup am = null; try { -am = (PDAnnotationMarkup) -PDAnnotation.createAnnotation( getDictionary().getDictionaryObject( Parent, P ) ); +am = (PDAnnotationMarkup) PDAnnotation.createAnnotation( +getDictionary().getDictionaryObject(COSName.PARENT, COSName.P)); } catch (IOException ioe) { Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java?rev=1583204r1=1583203r2=1583204view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/destination/PDPageDestination.java Sun Mar 30 21:36:49 2014 @@ -22,6 +22,7 @@ import java.util.List; 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.pdmodel.PDPage; @@ -133,8 +134,9 @@ public abstract class PDPageDestination else if (page instanceof COSDictionary) { COSBase parent = page; -while (((COSDictionary) parent).getDictionaryObject(Parent, P) != null) { -parent = ((COSDictionary) parent).getDictionaryObject( Parent, P ); +while (((COSDictionary) parent).getDictionaryObject(COSName.PARENT, COSName.P) != null) +{ +parent = ((COSDictionary) parent).getDictionaryObject(COSName.PARENT, COSName.P); } // now parent is the pages node PDPageNode pages = new PDPageNode((COSDictionary) parent); Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java?rev=1583204r1=1583203r2=1583204view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/documentnavigation/outline/PDOutlineNode.java Sun Mar 30 21:36:49 2014 @@ -18,6 +18,7 @@ package org.apache.pdfbox.pdmodel.intera import org.apache.pdfbox.cos.COSBase; import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.common.COSObjectable; @@ -81,16 +82,16 @@ public class PDOutlineNode implements CO protected PDOutlineNode getParent() { PDOutlineNode retval = null; -COSDictionary parent = (COSDictionary)node.getDictionaryObject( Parent, P ); -if( parent != null ) +COSDictionary parent = (COSDictionary) node.getDictionaryObject(COSName.PARENT, COSName.P); +if (parent != null) { -if( parent.getDictionaryObject( Parent, P ) == null ) +if (parent.getDictionaryObject(COSName.PARENT, COSName.P) == null) { -retval = new PDDocumentOutline( parent ); +retval
svn commit: r1583208 - in /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox: encryption/TestPublicKeyEncryption.java pdmodel/common/TestPDNameTreeNode.java pdmodel/common/TestPDNumberTreeNode.java
Author: tilman Date: Sun Mar 30 21:47:37 2014 New Revision: 1583208 URL: http://svn.apache.org/r1583208 Log: PDFBOX-2002: replaced deprecated junit import Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNumberTreeNode.java pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java?rev=1583208r1=1583207r2=1583208view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/encryption/TestPublicKeyEncryption.java Sun Mar 30 21:47:37 2014 @@ -24,15 +24,13 @@ import java.security.KeyStore; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; - -import junit.framework.Assert; -import junit.framework.TestCase; - import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.encryption.AccessPermission; import org.apache.pdfbox.pdmodel.encryption.PublicKeyDecryptionMaterial; import org.apache.pdfbox.pdmodel.encryption.PublicKeyProtectionPolicy; import org.apache.pdfbox.pdmodel.encryption.PublicKeyRecipient; +import junit.framework.TestCase; +import org.junit.Assert; /** * Tests for public key encryption. Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java?rev=1583208r1=1583207r2=1583208view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNameTreeNode.java Sun Mar 30 21:47:37 2014 @@ -20,11 +20,9 @@ import java.io.IOException; import java.util.List; import java.util.SortedMap; import java.util.TreeMap; - -import org.apache.pdfbox.cos.COSInteger; - -import junit.framework.Assert; import junit.framework.TestCase; +import org.apache.pdfbox.cos.COSInteger; +import org.junit.Assert; /** * A test case for PDNameTreeNode. Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNumberTreeNode.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNumberTreeNode.java?rev=1583208r1=1583207r2=1583208view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNumberTreeNode.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/TestPDNumberTreeNode.java Sun Mar 30 21:47:37 2014 @@ -21,12 +21,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; - -import junit.framework.Assert; import junit.framework.TestCase; - import org.apache.pdfbox.cos.COSBase; import org.apache.pdfbox.cos.COSInteger; +import org.junit.Assert; /** * A test case for PDNumberTreeNode. Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java?rev=1583208r1=1583207r2=1583208view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java Sun Mar 30 21:47:37 2014 @@ -18,9 +18,6 @@ package org.apache.pdfbox.pdmodel.font; import java.io.IOException; import java.io.InputStream; - -import junit.framework.Assert; - import org.apache.fontbox.ttf.CMAPEncodingEntry; import org.apache.fontbox.ttf.CMAPTable; import org.apache.fontbox.ttf.NameRecord; @@ -29,6 +26,7 @@ import org.apache.fontbox.ttf.TTFParser; import org.apache.fontbox.ttf.TrueTypeFont; import org.apache.pdfbox.encoding.Encoding; import org.apache.pdfbox.encoding.WinAnsiEncoding; +import org.junit.Assert; import org.junit.Test; /**
svn commit: r1583212 - /pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/utils/TestCOSUtils.java
Author: tilman Date: Sun Mar 30 22:02:59 2014 New Revision: 1583212 URL: http://svn.apache.org/r1583212 Log: PDFBOX-2002: replaced deprecated COSInteger constructors Modified: pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/utils/TestCOSUtils.java Modified: pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/utils/TestCOSUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/utils/TestCOSUtils.java?rev=1583212r1=1583211r2=1583212view=diff == --- pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/utils/TestCOSUtils.java (original) +++ pdfbox/trunk/preflight/src/test/java/org/apache/pdfbox/preflight/utils/TestCOSUtils.java Sun Mar 30 22:02:59 2014 @@ -40,7 +40,6 @@ import org.apache.pdfbox.cos.COSString; import org.apache.pdfbox.io.RandomAccess; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.persistence.util.COSObjectKey; -import org.apache.pdfbox.preflight.utils.COSUtils; import org.junit.Test; public class TestCOSUtils @@ -51,9 +50,9 @@ public class TestCOSUtils { try { -COSObject co = new COSObject(new COSInteger(10)); +COSObject co = new COSObject(COSInteger.get(10)); co.setGenerationNumber(COSInteger.ZERO); -co.setObjectNumber(new COSInteger(10)); +co.setObjectNumber(COSInteger.get(10)); assertFalse(COSUtils.isInteger(co, new IOCOSDocument())); @@ -75,7 +74,7 @@ public class TestCOSUtils { COSObject co = new COSObject(new COSFloat(10.0f)); co.setGenerationNumber(COSInteger.ZERO); -co.setObjectNumber(new COSInteger(10)); +co.setObjectNumber(COSInteger.get(10)); assertFalse(COSUtils.isFloat(co, new IOCOSDocument())); @@ -97,7 +96,7 @@ public class TestCOSUtils { COSObject co = new COSObject(new COSString()); co.setGenerationNumber(COSInteger.ZERO); -co.setObjectNumber(new COSInteger(10)); +co.setObjectNumber(COSInteger.get(10)); assertFalse(COSUtils.isString(co, new IOCOSDocument())); @@ -119,7 +118,7 @@ public class TestCOSUtils { COSObject co = new COSObject(new COSStream(null)); co.setGenerationNumber(COSInteger.ZERO); -co.setObjectNumber(new COSInteger(10)); +co.setObjectNumber(COSInteger.get(10)); assertFalse(COSUtils.isStream(co, new IOCOSDocument())); @@ -141,7 +140,7 @@ public class TestCOSUtils { COSObject co = new COSObject(new COSDictionary()); co.setGenerationNumber(COSInteger.ZERO); -co.setObjectNumber(new COSInteger(10)); +co.setObjectNumber(COSInteger.get(10)); assertFalse(COSUtils.isDictionary(co, new IOCOSDocument())); @@ -163,7 +162,7 @@ public class TestCOSUtils { COSObject co = new COSObject(new COSArray()); co.setGenerationNumber(COSInteger.ZERO); -co.setObjectNumber(new COSInteger(10)); +co.setObjectNumber(COSInteger.get(10)); assertFalse(COSUtils.isArray(co, new IOCOSDocument()));
svn commit: r1583219 - in /pdfbox/trunk: examples/src/main/java/org/apache/pdfbox/examples/fdf/ examples/src/main/java/org/apache/pdfbox/examples/lucene/ examples/src/main/java/org/apache/pdfbox/examp
Author: tilman Date: Sun Mar 30 22:46:15 2014 New Revision: 1583219 URL: http://svn.apache.org/r1583219 Log: PDFBOX-2002: replaced deprecated calls to document.decrypt() with calls to new security layer Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/PrintFields.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractMetadata.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintBookmarks.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintDocumentMetaData.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/ShowSignature.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/ExtractTextByArea.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintImageLocations.java pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/PrintTextLocations.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFDebugger.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFSplit.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PrintPDF.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/PrintFields.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/PrintFields.java?rev=1583219r1=1583218r2=1583219view=diff == --- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/PrintFields.java (original) +++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/fdf/PrintFields.java Sun Mar 30 22:46:15 2014 @@ -24,6 +24,7 @@ import org.apache.pdfbox.pdmodel.PDDocum import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.common.COSObjectable; import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; +import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.pdmodel.interactive.form.PDField; import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; @@ -125,7 +126,8 @@ public class PrintFields { try { -pdf.decrypt(); +StandardDecryptionMaterial sdm = new StandardDecryptionMaterial(); +pdf.openProtection(sdm); } catch (InvalidPasswordException e) { Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java?rev=1583219r1=1583218r2=1583219view=diff == --- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java (original) +++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/LucenePDFDocument.java Sun Mar 30 22:46:15 2014 @@ -37,6 +37,7 @@ import org.apache.lucene.document.TextFi import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentInformation; import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException; +import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial; import org.apache.pdfbox.util.PDFTextStripper; /** @@ -441,7 +442,8 @@ public class LucenePDFDocument if (pdfDocument.isEncrypted()) { // Just try using the default password and move on -pdfDocument.decrypt(); +StandardDecryptionMaterial sdm = new StandardDecryptionMaterial(); +pdfDocument.openProtection(sdm); } } Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java?rev=1583219r1=1583218r2=1583219view=diff
svn commit: r1583220 - /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/WriteDecodedDoc.java
Author: tilman Date: Sun Mar 30 22:52:09 2014 New Revision: 1583220 URL: http://svn.apache.org/r1583220 Log: PDFBOX-2002: fixed mistake from last commit 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=1583220r1=1583219r2=1583220view=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 Sun Mar 30 22:52:09 2014 @@ -93,7 +93,7 @@ public class WriteDecodedDoc { try { -StandardDecryptionMaterial sdm = new StandardDecryptionMaterial(); +StandardDecryptionMaterial sdm = new StandardDecryptionMaterial(password); doc.openProtection(sdm); doc.setAllSecurityToBeRemoved(true); }
svn commit: r1583377 - in /pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools: PDFReader.java PDFToImage.java
Author: tilman Date: Mon Mar 31 17:27:21 2014 New Revision: 1583377 URL: http://svn.apache.org/r1583377 Log: PDFBOX-2002: add suffix Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java?rev=1583377r1=1583376r2=1583377view=diff == --- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java (original) +++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java Mon Mar 31 17:27:21 2014 @@ -357,7 +357,7 @@ public class PDFReader extends JFrame imageFilename = imageFilename.substring(0, imageFilename.length() - 4); } imageFilename += _ + (currentPage + 1); -ImageIOUtil.writeImage(pageAsImage, imageFilename, 300); +ImageIOUtil.writeImage(pageAsImage, imageFilename + .png, 300); } catch (IOException exception) { Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java?rev=1583377r1=1583376r2=1583377view=diff == --- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java (original) +++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java Mon Mar 31 17:27:21 2014 @@ -248,7 +248,7 @@ public class PDFToImage for (int i = startPage - 1; i endPage i numPages; i++) { BufferedImage image = renderer.renderImageWithDPI(i, dpi, imageType); -String fileName = outputPrefix + (i + 1); +String fileName = outputPrefix + (i + 1) + . + imageFormat; success = ImageIOUtil.writeImage(image, fileName, dpi); }
svn commit: r1584116 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
Author: tilman Date: Wed Apr 2 18:14:57 2014 New Revision: 1584116 URL: http://svn.apache.org/r1584116 Log: PDFBOX-2008: fix error in check of max generation number Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java?rev=1584116r1=1584115r2=1584116view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Wed Apr 2 18:14:57 2014 @@ -1628,7 +1628,7 @@ public abstract class BaseParser protected int readGenerationNumber() throws IOException { int retval = readInt(); -if(retval 0 || retval = GENERATION_NUMBER_THRESHOLD) { +if(retval 0 || retval GENERATION_NUMBER_THRESHOLD) { throw new IOException(Generation Number ' + retval + ' has more than 5 digits); } return retval;
svn commit: r1584117 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
Author: tilman Date: Wed Apr 2 18:15:56 2014 New Revision: 1584117 URL: http://svn.apache.org/r1584117 Log: PDFBOX-2008: fix error in check of max generation number Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java?rev=1584117r1=1584116r2=1584117view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java Wed Apr 2 18:15:56 2014 @@ -1640,7 +1640,7 @@ public abstract class BaseParser protected int readGenerationNumber() throws IOException { int retval = readInt(); -if(retval 0 || retval = GENERATION_NUMBER_THRESHOLD) { +if(retval 0 || retval GENERATION_NUMBER_THRESHOLD) { throw new IOException(Generation Number ' + retval + ' has more than 5 digits); } return retval;
svn commit: r1584123 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java
Author: tilman Date: Wed Apr 2 18:35:09 2014 New Revision: 1584123 URL: http://svn.apache.org/r1584123 Log: PDFBOX-2012: slight optimizations as suggested by Philip Helger Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java?rev=1584123r1=1584122r2=1584123view=diff == --- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java (original) +++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPEncodingEntry.java Wed Apr 2 18:35:09 2014 @@ -436,7 +436,7 @@ public class CMAPEncodingEntry for (int i = 0; i 256; i++) { subHeaderKeys[i] = data.readUnsignedShort(); -maxSubHeaderIndex = Math.max(maxSubHeaderIndex, (int) (subHeaderKeys[i] / 8)); +maxSubHeaderIndex = Math.max(maxSubHeaderIndex, subHeaderKeys[i] / 8); } // Read all SubHeaders to avoid useless seek on DataSource @@ -550,20 +550,14 @@ public class CMAPEncodingEntry /** * Returns the GlyphId linked with the given character code. - * + * * @param characterCode the given character code to be mapped * @return glyphId the corresponding glyph id for the given character code */ public int getGlyphId(int characterCode) { -if (characterCodeToGlyphId.containsKey(characterCode)) -{ -return characterCodeToGlyphId.get(characterCode); -} -else -{ -return 0; -} +Integer glyphId = characterCodeToGlyphId.get(characterCode); +return glyphId == null ? 0 : glyphId.intValue(); } /**
svn commit: r1584127 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
Author: tilman Date: Wed Apr 2 18:48:58 2014 New Revision: 1584127 URL: http://svn.apache.org/r1584127 Log: PDFBOX-2010: getDescendantFont() now public as wished by Philip Helger; added @override, reformatted Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java?rev=1584127r1=1584126r2=1584127view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java Wed Apr 2 18:48:58 2014 @@ -27,8 +27,8 @@ import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.common.PDRectangle; /** - * This is implementation of the Type0 Font. - * See a href=https://issues.apache.org/jira/browse/PDFBOX-605;PDFBOX-605/a + * This is implementation of the Type0 Font. See a + * href=https://issues.apache.org/jira/browse/PDFBOX-605;PDFBOX-605/a * for the related improvement issue. * * @author a href=mailto:b...@benlitchfield.com;Ben Litchfield/a @@ -46,29 +46,31 @@ public class PDType0Font extends PDSimpl private PDFont descendantFont; private COSDictionary descendantFontDictionary; private Font awtFont; + /** * Constructor. */ public PDType0Font() { super(); -font.setItem( COSName.SUBTYPE, COSName.TYPE0 ); +font.setItem(COSName.SUBTYPE, COSName.TYPE0); } /** * Constructor. * - * @param fontDictionary The font dictionary according to the PDF specification. + * @param fontDictionary The font dictionary according to the PDF + * specification. */ -public PDType0Font( COSDictionary fontDictionary ) +public PDType0Font(COSDictionary fontDictionary) { -super( fontDictionary ); -descendantFontDictionary = (COSDictionary)getDescendantFonts().getObject( 0 ); +super(fontDictionary); +descendantFontDictionary = (COSDictionary) getDescendantFonts().getObject(0); if (descendantFontDictionary != null) { try { -descendantFont = PDFontFactory.createFont( descendantFontDictionary ); +descendantFont = PDFontFactory.createFont(descendantFontDictionary); } catch (IOException exception) { @@ -80,16 +82,17 @@ public class PDType0Font extends PDSimpl /** * {@inheritDoc} */ +@Override public Font getawtFont() throws IOException { if (awtFont == null) { if (descendantFont != null) { -awtFont = ((PDSimpleFont)descendantFont).getawtFont(); +awtFont = ((PDSimpleFont) descendantFont).getawtFont(); if (awtFont != null) { - setIsFontSubstituted(((PDSimpleFont)descendantFont).isFontSubstituted()); +setIsFontSubstituted(((PDSimpleFont) descendantFont).isFontSubstituted()); /* * Fix Oracle JVM Crashes. * Tested with Oracle JRE 6.0_45-b06 and 7.0_21-b11 @@ -100,8 +103,8 @@ public class PDType0Font extends PDSimpl if (awtFont == null) { awtFont = FontManager.getStandardFont(); -LOG.info(Using font +awtFont.getName() -+ instead of +descendantFont.getFontDescriptor().getFontName()); +LOG.info(Using font + awtFont.getName() ++ instead of + descendantFont.getFontDescriptor().getFontName()); setIsFontSubstituted(true); } } @@ -115,9 +118,10 @@ public class PDType0Font extends PDSimpl * * @throws IOException If there is an error getting the bounding box. */ +@Override public PDRectangle getFontBoundingBox() throws IOException { -throw new RuntimeException( Not yet implemented ); +throw new RuntimeException(Not yet implemented); } /** @@ -131,9 +135,9 @@ public class PDType0Font extends PDSimpl * * @throws IOException If an error occurs while parsing. */ -public float getFontWidth( byte[] c, int offset, int length ) throws IOException +public float getFontWidth(byte[] c, int offset, int length) throws IOException { -return descendantFont.getFontWidth( c, offset, length ); +return descendantFont.getFontWidth(c, offset, length); } /** @@ -147,9 +151,10 @@ public class PDType0Font extends PDSimpl * * @throws IOException If an error occurs while
svn commit: r1584125 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java
Author: tilman Date: Wed Apr 2 18:40:59 2014 New Revision: 1584125 URL: http://svn.apache.org/r1584125 Log: PDFBOX-1975: fix for JDK5 Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java?rev=1584125r1=1584124r2=1584125view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java Wed Apr 2 18:40:59 2014 @@ -67,22 +67,22 @@ class JPEGUtil { jfifChild = (Element) jfifNodeList.item(0); } -if (jfifChild.getAttribute(majorVersion).isEmpty()) +if (jfifChild.getAttribute(majorVersion).length() == 0) { jfifChild.setAttribute(majorVersion, 1); } -if (jfifChild.getAttribute(minorVersion).isEmpty()) +if (jfifChild.getAttribute(minorVersion).length() == 0) { jfifChild.setAttribute(minorVersion, 2); } jfifChild.setAttribute(resUnits, 1); // inch jfifChild.setAttribute(Xdensity, Integer.toString(dpi)); jfifChild.setAttribute(Ydensity, Integer.toString(dpi)); -if (jfifChild.getAttribute(thumbWidth).isEmpty()) +if (jfifChild.getAttribute(thumbWidth).length() == 0) { jfifChild.setAttribute(thumbWidth, 0); } -if (jfifChild.getAttribute(thumbHeight).isEmpty()) +if (jfifChild.getAttribute(thumbHeight).length() == 0) { jfifChild.setAttribute(thumbHeight, 0); }
svn commit: r1584142 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
Author: tilman Date: Wed Apr 2 19:38:40 2014 New Revision: 1584142 URL: http://svn.apache.org/r1584142 Log: PDFBOX-1975: added an extra test for ImageIOUtil.writeImage() Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java?rev=1584142r1=1584141r2=1584142view=diff == --- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original) +++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java Wed Apr 2 19:38:40 2014 @@ -237,7 +237,8 @@ public class TestImageIOUtils extends Te BufferedImage image = renderer.renderImageWithDPI(0, dpi, imageType); String fileName = outputPrefix + 1; LOG.info(Writing: + fileName + . + imageFormat); -ImageIOUtil.writeImage(image, fileName + . + imageFormat, Math.round(dpi)); +boolean res = ImageIOUtil.writeImage(image, fileName + . + imageFormat, Math.round(dpi)); +assertTrue(ImageIOUtil.writeImage() failed for file + fileName, res); if (jpg.equals(imageFormat) || gif.equals(imageFormat)) { // jpeg is lossy, gif has 256 colors,
svn commit: r1584255 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java
Author: tilman Date: Thu Apr 3 03:42:14 2014 New Revision: 1584255 URL: http://svn.apache.org/r1584255 Log: PDFBOX-2002: delete deprecated methods Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java?rev=1584255r1=1584254r2=1584255view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/COSArrayList.java Thu Apr 3 03:42:14 2014 @@ -94,16 +94,9 @@ public class COSArrayListE implements } /** - * @deprecated use the {@link #COSArrayList(Object, COSBase, COSDictionary, COSName)} method instead - */ -public COSArrayList( E actualObject, COSBase item, COSDictionary dictionary, String dictionaryKey ) -{ -this( actualObject, item, dictionary, COSName.getPDFName(dictionaryKey) ); -} - -/** * {@inheritDoc} */ +@Override public int size() { return actual.size(); @@ -112,6 +105,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean isEmpty() { return actual.isEmpty(); @@ -120,6 +114,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean contains(Object o) { return actual.contains(o); @@ -128,6 +123,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public IteratorE iterator() { return actual.iterator(); @@ -136,6 +132,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public Object[] toArray() { return actual.toArray(); @@ -144,6 +141,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public XX[] toArray(X[] a) { return actual.toArray(a); @@ -153,6 +151,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean add(E o) { //when adding if there is a parentDict then change the item @@ -188,6 +187,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean remove(Object o) { boolean retval = true; @@ -207,6 +207,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean containsAll(Collection? c) { return actual.containsAll( c ); @@ -215,6 +216,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean addAll(Collection? extends E c) { //when adding if there is a parentDict then change the item @@ -233,6 +235,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean addAll(int index, Collection? extends E c) { //when adding if there is a parentDict then change the item @@ -476,6 +479,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean removeAll(Collection? c) { array.removeAll( toCOSObjectList( c ) ); @@ -485,6 +489,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean retainAll(Collection? c) { array.retainAll( toCOSObjectList( c ) ); @@ -494,6 +499,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public void clear() { //when adding if there is a parentDict then change the item @@ -509,6 +515,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public boolean equals(Object o) { return actual.equals( o ); @@ -517,6 +524,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public int hashCode() { return actual.hashCode(); @@ -525,6 +533,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public E get(int index) { return actual.get( index ); @@ -534,6 +543,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public E set(int index, E element) { if( element instanceof String ) @@ -565,6 +575,7 @@ public class COSArrayListE implements /** * {@inheritDoc} */ +@Override public void add(int index, E element) { //when adding
svn commit: r1584256 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
Author: tilman Date: Thu Apr 3 03:52:33 2014 New Revision: 1584256 URL: http://svn.apache.org/r1584256 Log: PDFBOX-2002: delete deprecated methods Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java?rev=1584256r1=1584255r2=1584256view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java Thu Apr 3 03:52:33 2014 @@ -274,20 +274,9 @@ public class PDFTextStripper extends PDF } /** - * @deprecated - * @see PDFTextStripper#writeText( PDDocument, Writer ) - * @param doc The document to extract the text. - * @param outputStream The stream to write the text to. - * @throws IOException If there is an error extracting the text. - */ -public void writeText( COSDocument doc, Writer outputStream ) throws IOException -{ -writeText( new PDDocument( doc ), outputStream ); -} - -/** * {@inheritDoc} */ +@Override public void resetEngine() { super.resetEngine(); @@ -900,6 +889,7 @@ public class PDFTextStripper extends PDF * * @param text The text to process. */ +@Override protected void processTextPosition( TextPosition text ) { boolean showCharacter = true; @@ -1569,6 +1559,7 @@ public class PDFTextStripper extends PDF * * @return the reversed string */ +@Override public String inspectFontEncoding(String str) { if (!sortByPosition || str == null || str.length() 2)
svn commit: r1584837 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
Author: tilman Date: Fri Apr 4 17:56:37 2014 New Revision: 1584837 URL: http://svn.apache.org/r1584837 Log: PDFBOX-2007: optimize fromBGRtoRGB() Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1584837r1=1584836r2=1584837view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Fri Apr 4 17:56:37 2014 @@ -194,20 +194,22 @@ final class DCTFilter extends Filter { WritableRaster writableRaster = raster.createCompatibleWritableRaster(); -int[] bgr = new int[3]; -int[] rgb = new int[3]; -for (int y = 0, height = raster.getHeight(); y height; y++) +int width = raster.getWidth(); +int height = raster.getHeight(); +int w3 = width * 3; +int[] tab = new int[w3]; +//BEWARE: handling the full image at a time is slower than one line at a time +for (int y = 0; y height; y++) { -for (int x = 0, width = raster.getWidth(); x width; x++) +raster.getPixels(0, y, width, 1, tab); +for (int off = 0; off w3; off += 3) { -raster.getPixel(x, y, bgr); -rgb[0] = bgr[2]; -rgb[1] = bgr[1]; -rgb[2] = bgr[0]; -writableRaster.setPixel(x, y, rgb); +int tmp = tab[off]; +tab[off] = tab[off + 2]; +tab[off + 2] = tmp; } +writableRaster.setPixels(0, y, width, 1, tab); } - return writableRaster; }
svn commit: r1585098 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java
Author: tilman Date: Sat Apr 5 15:03:31 2014 New Revision: 1585098 URL: http://svn.apache.org/r1585098 Log: PDFBOX-2002: removed two methods deprecated since 2010 and reformatted Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java?rev=1585098r1=1585097r2=1585098view=diff == --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/action/PDActionURI.java Sat Apr 5 15:03:31 2014 @@ -39,7 +39,7 @@ public class PDActionURI extends PDActio public PDActionURI() { action = new COSDictionary(); -setSubType( SUB_TYPE ); +setSubType(SUB_TYPE); } /** @@ -47,9 +47,9 @@ public class PDActionURI extends PDActio * * @param a The action dictionary. */ -public PDActionURI( COSDictionary a ) +public PDActionURI(COSDictionary a) { -super( a ); +super(a); } /** @@ -57,6 +57,7 @@ public class PDActionURI extends PDActio * * @return The cos object that matches this Java object. */ +@Override public COSBase getCOSObject() { return action; @@ -67,6 +68,7 @@ public class PDActionURI extends PDActio * * @return The cos object that matches this Java object. */ +@Override public COSDictionary getCOSDictionary() { return action; @@ -80,7 +82,7 @@ public class PDActionURI extends PDActio */ public String getS() { - return action.getNameAsString( S ); +return action.getNameAsString(S); } /** @@ -89,38 +91,41 @@ public class PDActionURI extends PDActio * * @param s The URI action. */ -public void setS( String s ) +public void setS(String s) { - action.setName( S, s ); +action.setName(S, s); } /** - * This will get the uniform resource identifier to resolve, encoded in 7-bit ASCII. + * This will get the uniform resource identifier to resolve, encoded in + * 7-bit ASCII. * * @return The URI entry of the specific URI action dictionary. */ public String getURI() { -return action.getString( URI ); +return action.getString(URI); } /** - * This will set the uniform resource identifier to resolve, encoded in 7-bit ASCII. + * This will set the uniform resource identifier to resolve, encoded in + * 7-bit ASCII. * * @param uri The uniform resource identifier. */ -public void setURI( String uri ) +public void setURI(String uri) { -action.setString( URI, uri ); +action.setString(URI, uri); } /** - * This will specify whether to track the mouse position when the URI is resolved. - * Default value: false. - * This entry applies only to actions triggered by the user's clicking an annotation; - * it is ignored for actions associated with outline items or with a document's OpenAction entry. + * This will specify whether to track the mouse position when the URI is + * resolved. Default value: false. This entry applies only to actions + * triggered by the user's clicking an annotation; it is ignored for actions + * associated with outline items or with a document's OpenAction entry. * - * @return A flag specifying whether to track the mouse position when the URI is resolved. + * @return A flag specifying whether to track the mouse position when the + * URI is resolved. */ public boolean shouldTrackMousePosition() { @@ -128,46 +133,13 @@ public class PDActionURI extends PDActio } /** - * This will specify whether to track the mouse position when the URI is resolved. + * This will specify whether to track the mouse position when the URI is + * resolved. * * @param value The flag value. */ -public void setTrackMousePosition( boolean value ) +public void setTrackMousePosition(boolean value) { this.action.setBoolean(IsMap, value); } - -// TODO this must go into PDURIDictionary -/** - * This will get the base URI to be used in resolving relative URI references. - * URI actions within the document may specify URIs in partial form, to be interpreted - * relative to this base address. If no base URI is specified, such partial URIs - * will be interpreted relative to the location of the document itself. - * The use of this entry is parallel to that of the body element lt
svn commit: r1585111 - in /pdfbox/trunk: examples/pom.xml examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java parent/pom.xml pdfbox/pom.xml preflight-app/pom.xml preflight/pom.
Author: tilman Date: Sat Apr 5 15:43:13 2014 New Revision: 1585111 URL: http://svn.apache.org/r1585111 Log: PDFBOX-1836: update to latest versions Modified: pdfbox/trunk/examples/pom.xml pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java pdfbox/trunk/parent/pom.xml pdfbox/trunk/pdfbox/pom.xml pdfbox/trunk/preflight-app/pom.xml pdfbox/trunk/preflight/pom.xml pdfbox/trunk/xmpbox/pom.xml Modified: pdfbox/trunk/examples/pom.xml URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/pom.xml?rev=1585111r1=1585110r2=1585111view=diff == --- pdfbox/trunk/examples/pom.xml (original) +++ pdfbox/trunk/examples/pom.xml Sat Apr 5 15:43:13 2014 @@ -38,7 +38,7 @@ inceptionYear2002/inceptionYear properties -lucene.version4.6.0/lucene.version +lucene.version4.7.1/lucene.version /properties dependencies @@ -75,7 +75,7 @@ dependency groupIdorg.apache.wink/groupId artifactIdwink-component-test-support/artifactId - version1.3.0/version + version1.4/version scopetest/scope /dependency /dependencies Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java?rev=1585111r1=1585110r2=1585111view=diff == --- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java (original) +++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/lucene/IndexPDFFiles.java Sat Apr 5 15:43:13 2014 @@ -102,8 +102,8 @@ public class IndexPDFFiles System.out.println(Indexing to directory ' + indexPath + '...); Directory dir = FSDirectory.open(new File(indexPath)); -Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_43); -IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_43, analyzer); +Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46); +IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46, analyzer); if (create) { Modified: pdfbox/trunk/parent/pom.xml URL: http://svn.apache.org/viewvc/pdfbox/trunk/parent/pom.xml?rev=1585111r1=1585110r2=1585111view=diff == --- pdfbox/trunk/parent/pom.xml (original) +++ pdfbox/trunk/parent/pom.xml Sat Apr 5 15:43:13 2014 @@ -23,7 +23,7 @@ parent groupIdorg.apache/groupId artifactIdapache/artifactId -version13/version +version14/version relativePath / /parent @@ -80,7 +80,12 @@ dependency groupIdcom.ibm.icu/groupId artifactIdicu4j/artifactId -version52.1/version +version53.1/version +/dependency +dependency +groupIdlog4j/groupId +artifactIdlog4j/artifactId +version1.2.17/version /dependency !-- For legal reasons (incompatible license), these two dependencies @@ -95,7 +100,7 @@ dependency groupIdnet.java.dev.jai-imageio/groupId artifactIdjai-imageio-core-standalone/artifactId -version1.2-pre-dr-b04-2011-07-04/version +version1.2-pre-dr-b04-2013-04-23/version scopetest/scope /dependency /dependencies @@ -180,7 +185,7 @@ plugin groupIdorg.apache.felix/groupId artifactIdmaven-bundle-plugin/artifactId -version2.3.7/version +version2.4.0/version /plugin !--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-- plugin Modified: pdfbox/trunk/pdfbox/pom.xml URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/pom.xml?rev=1585111r1=1585110r2=1585111view=diff == --- pdfbox/trunk/pdfbox/pom.xml (original) +++ pdfbox/trunk/pdfbox/pom.xml Sat Apr 5 15:43:13 2014 @@ -105,6 +105,14 @@ /resources plugins plugin +artifactIdmaven-compiler-plugin/artifactId +configuration +showDeprecationtrue/showDeprecation +target1.6/target +source1.6/source +/configuration +/plugin +plugin artifactIdmaven-surefire-plugin/artifactId configuration argLine-Xmx128m/argLine
svn commit: r1585354 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java
Author: tilman Date: Sun Apr 6 22:00:05 2014 New Revision: 1585354 URL: http://svn.apache.org/r1585354 Log: PDFBOX-1147: Code table in LZW filter must be local to the method because there is only one filter instance Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java?rev=1585354r1=1585353r2=1585354view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Sun Apr 6 22:00:05 2014 @@ -51,10 +51,8 @@ public class LZWFilter implements Filter */ public static final long EOD = 257; -/** - * The LZW code table. - */ -private ArrayListbyte[] codeTable = null; +//BEWARE: codeTable must be local to each method, because there is only +// one instance of each filter /** * {@inheritDoc} @@ -62,7 +60,7 @@ public class LZWFilter implements Filter public void decode(InputStream compressedData, OutputStream result, COSDictionary options, int filterIndex) throws IOException { -codeTable = null; +ArrayListbyte[] codeTable = null; int chunk = 9; MemoryCacheImageInputStream in = new MemoryCacheImageInputStream(compressedData); long nextCommand = 0; @@ -75,7 +73,7 @@ public class LZWFilter implements Filter if (nextCommand == CLEAR_TABLE) { chunk = 9; -initCodeTable(); +codeTable = createCodeTable(); prevCommand = -1; } else @@ -124,7 +122,7 @@ public class LZWFilter implements Filter public void encode(InputStream rawData, OutputStream result, COSDictionary options, int filterIndex) throws IOException { -initCodeTable(); +ArrayListbyte[] codeTable = createCodeTable(); int chunk = 9; byte[] inputPattern = null; @@ -164,7 +162,7 @@ public class LZWFilter implements Filter // code table is full out.writeBits(CLEAR_TABLE, chunk); chunk = 9; -initCodeTable(); +codeTable = createCodeTable(); } inputPattern = new byte[] @@ -195,7 +193,6 @@ public class LZWFilter implements Filter out.writeBits(EOD, chunk); out.writeBits(0, 7); // pad with 0 out.flush(); // must do or file will be empty :-( -codeTable.clear(); } /** @@ -241,9 +238,9 @@ public class LZWFilter implements Filter * Init the code table with 1 byte entries and the EOD and CLEAR_TABLE * markers. */ -private void initCodeTable() +private ArrayListbyte[] createCodeTable() { -codeTable = new ArrayListbyte[](4096); +ArrayListbyte[] codeTable = new ArrayListbyte[](4096); for (int i = 0; i 256; ++i) { codeTable.add(new byte[] @@ -253,6 +250,7 @@ public class LZWFilter implements Filter } codeTable.add(null); // 256 EOD codeTable.add(null); // 257 CLEAR_TABLE +return codeTable; } /**
svn commit: r1585502 - /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java
Author: tilman Date: Mon Apr 7 15:20:05 2014 New Revision: 1585502 URL: http://svn.apache.org/r1585502 Log: PDFBOX-2018: set correct stroke default values as per specification Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java?rev=1585502r1=1585501r2=1585502view=diff == --- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java (original) +++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java Mon Apr 7 15:20:05 2014 @@ -40,6 +40,7 @@ public class SetLineWidth extends org.ap * @param arguments List * @throws IOException If an error occurs while processing the font. */ +@Override public void process(PDFOperator operator, ListCOSBase arguments) throws IOException { super.process( operator, arguments ); @@ -48,7 +49,7 @@ public class SetLineWidth extends org.ap BasicStroke stroke = (BasicStroke)drawer.getStroke(); if (stroke == null) { -drawer.setStroke( new BasicStroke( lineWidth ) ); +drawer.setStroke( new BasicStroke( lineWidth, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER ) ); } else {