Advertisement
Guest User

Untitled

a guest
Dec 19th, 2019
309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.99 KB | None | 0 0
  1.     public static void resizePdf() throws DocumentException, IOException {
  2.  
  3.         String src = "input.pdf";
  4.         String dest = "output.pdf";
  5.  
  6.         PdfReader reader = new PdfReader(src);
  7.         int n = reader.getXrefSize();
  8.         PdfObject object;
  9.         PRStream stream;
  10.         // Look for image and manipulate image stream
  11.         for (int i = 0; i < n; i++) {
  12.             object = reader.getPdfObject(i);
  13.             if (object == null || !object.isStream())
  14.                 continue;
  15.             stream = (PRStream) object;
  16.             if (!PdfName.IMAGE.equals(stream.getAsName(PdfName.SUBTYPE)))
  17.                 continue;
  18.             if (!PdfName.DCTDECODE.equals(stream.getAsName(PdfName.FILTER)))
  19.                 continue;
  20.  
  21.             PdfImageObject image = new PdfImageObject(stream);
  22.             BufferedImage bi = image.getBufferedImage();
  23.            
  24.             double factor = .5;
  25.  
  26.             if (bi == null)
  27.                 continue;
  28.             int width = (int) (bi.getWidth() * factor);
  29.             int height = (int) (bi.getHeight() * factor);
  30.             if (width <= 0 || height <= 0)
  31.                 continue;
  32.             BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  33.             AffineTransform at = AffineTransform.getScaleInstance(factor, factor);
  34.             Graphics2D g = img.createGraphics();
  35.             g.drawRenderedImage(bi, at);
  36.  
  37.             System.out.println(image.getFileType());
  38.             ByteArrayOutputStream imgBytes = new ByteArrayOutputStream();
  39.             ImageIO.write(img, image.getFileType(), imgBytes);
  40.             stream.clear();
  41.             stream.setData(imgBytes.toByteArray(), false, PRStream.NO_COMPRESSION);
  42.             stream.put(PdfName.TYPE, PdfName.XOBJECT);
  43.             stream.put(PdfName.SUBTYPE, PdfName.IMAGE);
  44.             stream.put(PdfName.FILTER, PdfName.DCTDECODE);
  45.             stream.put(PdfName.WIDTH, new PdfNumber(width));
  46.             stream.put(PdfName.HEIGHT, new PdfNumber(height));
  47.             stream.put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
  48.             stream.put(PdfName.COLORSPACE, PdfName.DEVICERGB);
  49.         }
  50.         reader.removeUnusedObjects();
  51.         // Save altered PDF
  52.         PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
  53.         stamper.setFullCompression();
  54.         stamper.close();
  55.         reader.close();
  56.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement