Refine search
private void writeToBuffer(PDImageXObject pdImage, String suffix, OutputStream out) throws IOException { BufferedImage image = pdImage.getImage(); if (image != null) { if ("jpg".equals(suffix)) { String colorSpaceName = pdImage.getColorSpace().getName(); PDDeviceRGB.INSTANCE.getName().equals(colorSpaceName)) { InputStream data = pdImage.getStream().createInputStream(JPEG); org.apache.pdfbox.io.IOUtils.copy(data, out); org.apache.pdfbox.io.IOUtils.closeQuietly(data); InputStream data = pdImage.createInputStream(JP2); org.apache.pdfbox.io.IOUtils.copy(data, out); org.apache.pdfbox.io.IOUtils.closeQuietly(data); } else if ("jb2".equals(suffix)) { InputStream data = pdImage.createInputStream(JB2); org.apache.pdfbox.io.IOUtils.copy(data, out); org.apache.pdfbox.io.IOUtils.closeQuietly(data);
/** * Draw an image at the x,y coordinates, with the default size of the image. * * @param image The image to draw. * @param x The x-coordinate to draw the image. * @param y The y-coordinate to draw the image. * * @throws IOException If there is an error writing to the stream. */ public void drawImage(PDImageXObject image, float x, float y) throws IOException { drawImage(image, x, y, image.getWidth(), image.getHeight()); }
/** * Returns the Soft Mask Image XObject associated with this image, or null if there is none. * @return the SMask Image XObject, or null. * @throws java.io.IOException */ public PDImageXObject getSoftMask() throws IOException { COSStream cosStream = (COSStream) getCOSObject().getDictionaryObject(COSName.SMASK); if (cosStream != null) { // always DeviceGray return new PDImageXObject(new PDStream(cosStream), null); } return null; }
private boolean hasMasks(PDImage pdImage) throws IOException { if (pdImage instanceof PDImageXObject) { PDImageXObject ximg = (PDImageXObject) pdImage; return ximg.getMask() != null || ximg.getSoftMask() != null; } return false; }
@Override public int getBitsPerComponent() { if (isStencil()) { return 1; } else { return getCOSObject().getInt(COSName.BITS_PER_COMPONENT, COSName.BPC); } }
xobject.setInterpolate(true); } else { InputStream inputStream = xobject.getStream().getCOSObject().createRawInputStream(); PDImageXObject cloneImage = new PDImageXObject(_writer, inputStream, COSName.FLATE_DECODE, xobject.getWidth(), xobject.getHeight(), xobject.getBitsPerComponent(), xobject.getColorSpace()); cloneImage.setInterpolate(false); if (xobject.getSoftMask() != null) cloneImage.getCOSObject().setItem(COSName.SMASK, xobject.getSoftMask()); inputStream.close(); xobject = cloneImage;
@Override public InputStream createInputStream() throws IOException { return getStream().createInputStream(); }
/** * Provide the image for stream. The stream must be image XObject. * * @param resources PDResources for the XObject. * @return A BufferedImage. */ public BufferedImage getImage(PDResources resources) { try { PDImageXObject imageXObject; if (isThumb) { imageXObject = PDImageXObject.createThumbnail(stream); } else { imageXObject = new PDImageXObject(new PDStream(stream), resources); } return imageXObject.getImage(); } catch (IOException e) { e.printStackTrace(); } return null; }
BufferedImage image = SampledImageReader.getRGBImage(this, region, subsampling, getColorKeyMask()); PDImageXObject softMask = getSoftMask(); if (softMask != null) float[] matte = extractMatte(softMask); image = applyMask(image, softMask.getOpaqueImage(), true, matte); PDImageXObject mask = getMask(); if (mask != null && mask.isStencil()) image = applyMask(image, mask.getOpaqueImage(), false, null);
private static PDImageXObject prepareImageXObject(PDDocument document, byte[] byteArray, int width, int height, PDColorSpace initColorSpace) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); Filter filter = FilterFactory.INSTANCE.getFilter(COSName.CCITTFAX_DECODE); COSDictionary dict = new COSDictionary(); dict.setInt(COSName.COLUMNS, width); dict.setInt(COSName.ROWS, height); filter.encode(new ByteArrayInputStream(byteArray), baos, dict, 0); ByteArrayInputStream encodedByteStream = new ByteArrayInputStream(baos.toByteArray()); PDImageXObject image = new PDImageXObject(document, encodedByteStream, COSName.CCITTFAX_DECODE, width, height, 1, initColorSpace); dict.setInt(COSName.K, -1); image.getCOSObject().setItem(COSName.DECODE_PARMS, dict); return image; }
public XObjImageValidator(PreflightContext context, PDImageXObject xobj) { super(context, xobj.getCOSObject()); this.xImage = xobj; }
.createOutputStream(COSName.FLATE_DECODE)) pdProfile.getPDStream().getCOSObject().setInt(COSName.N, srcCspace.getNumComponents()); pdProfile.getPDStream().getCOSObject().setItem(COSName.ALTERNATE, srcCspace.getType() == ColorSpace.TYPE_CMYK ? COSName.DEVICECMYK : PDImageXObject imageXObject = new PDImageXObject(document, new ByteArrayInputStream(stream.toByteArray()), COSName.FLATE_DECODE, w, h, bitsPerComponent, pdColorSpace); decodeParms.setItem(COSName.COLUMNS, COSInteger.get(w)); decodeParms.setItem(COSName.COLORS, COSInteger.get(srcCspace.getNumComponents())); imageXObject.getCOSObject().setItem(COSName.DECODE_PARMS, decodeParms); imageXObject.getCOSObject().setItem(COSName.SMASK, pdMask);
/** * Creates a thumbnail Image XObject from the given COSBase and name. * @param cosStream the COS stream * @return an XObject * @throws IOException if there is an error creating the XObject. */ public static PDImageXObject createThumbnail(COSStream cosStream) throws IOException { // thumbnails are special, any non-null subtype is treated as being "Image" PDStream pdStream = new PDStream(cosStream); return new PDImageXObject(pdStream, null); }
PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath, doc); contentStream.drawImage(pdImage, 20, 20, pdImage.getWidth() * scale, pdImage.getHeight() * scale);
public String getSuffix() List<COSName> filters = getStream().getFilters();
private Rectangle2D calculateImagePosition(PDImageXObject pdfImage) throws IOException { Matrix ctm = getGraphicsState().getCurrentTransformationMatrix(); Rectangle2D imageBounds = pdfImage.getImage().getRaster().getBounds(); AffineTransform imageTransform = new AffineTransform(ctm.createAffineTransform()); imageTransform.scale(1.0 / pdfImage.getWidth(), -1.0 / pdfImage.getHeight()); imageTransform.translate(0, -pdfImage.getHeight()); AffineTransform pageTransform = createCurrentPageTransformation(); pageTransform.concatenate(imageTransform); return pageTransform.createTransformedShape(imageBounds).getBounds2D(); }
if (pdImageXObject != null) if (pdImageXObject.getColorSpace() == PDDeviceRGB.INSTANCE && pdImageXObject.getBitsPerComponent() < 16 && image.getWidth() * image.getHeight() <= 50 * 50) if (pdImageXObjectClassic.getCOSObject().getLength() < pdImageXObject.getCOSObject().getLength()) pdImageXObject.getCOSObject().close(); return pdImageXObjectClassic; pdImageXObjectClassic.getCOSObject().close();
@Override public boolean isEmpty() { return getStream().getCOSObject().getLength() == 0; }
@Override public void put(COSObject indirect, PDXObject xobject) throws IOException { final int length = xobject.getStream().getLength(); if (length > environment.getMaxImageSize()) { LOG.trace("Not caching image with Size: {}", length); return; } if (xobject instanceof PDImageXObject) { PDImageXObject imageObj = (PDImageXObject) xobject; if (imageObj.getWidth() * imageObj.getHeight() > environment.getMaxImageSize()) { return; } } this.xobjects.put(indirect, new SoftReference<>(xobject)); } }
private float[] extractMatte(PDImageXObject softMask) throws IOException { COSBase base = softMask.getCOSObject().getItem(COSName.MATTE); float[] matte = null; if (base instanceof COSArray) { // PDFBOX-4267: process /Matte // see PDF specification 1.7, 11.6.5.3 Soft-Mask Images matte = ((COSArray) base).toFloatArray(); // convert to RGB matte = getColorSpace().toRGB(matte); } return matte; }