Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void resizePdf() throws DocumentException, IOException {
- String src = "input.pdf";
- String dest = "output.pdf";
- PdfReader reader = new PdfReader(src);
- int n = reader.getXrefSize();
- PdfObject object;
- PRStream stream;
- // Look for image and manipulate image stream
- for (int i = 0; i < n; i++) {
- object = reader.getPdfObject(i);
- if (object == null || !object.isStream())
- continue;
- stream = (PRStream) object;
- if (!PdfName.IMAGE.equals(stream.getAsName(PdfName.SUBTYPE)))
- continue;
- if (!PdfName.DCTDECODE.equals(stream.getAsName(PdfName.FILTER)))
- continue;
- PdfImageObject image = new PdfImageObject(stream);
- BufferedImage bi = image.getBufferedImage();
- double factor = .5;
- if (bi == null)
- continue;
- int width = (int) (bi.getWidth() * factor);
- int height = (int) (bi.getHeight() * factor);
- if (width <= 0 || height <= 0)
- continue;
- BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
- AffineTransform at = AffineTransform.getScaleInstance(factor, factor);
- Graphics2D g = img.createGraphics();
- g.drawRenderedImage(bi, at);
- System.out.println(image.getFileType());
- ByteArrayOutputStream imgBytes = new ByteArrayOutputStream();
- ImageIO.write(img, image.getFileType(), imgBytes);
- stream.clear();
- stream.setData(imgBytes.toByteArray(), false, PRStream.NO_COMPRESSION);
- stream.put(PdfName.TYPE, PdfName.XOBJECT);
- stream.put(PdfName.SUBTYPE, PdfName.IMAGE);
- stream.put(PdfName.FILTER, PdfName.DCTDECODE);
- stream.put(PdfName.WIDTH, new PdfNumber(width));
- stream.put(PdfName.HEIGHT, new PdfNumber(height));
- stream.put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
- stream.put(PdfName.COLORSPACE, PdfName.DEVICERGB);
- }
- reader.removeUnusedObjects();
- // Save altered PDF
- PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
- stamper.setFullCompression();
- stamper.close();
- reader.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement