extensions/net.sf.basedb.thumbnails/trunk/src/net/sf/basedb/thumbnails/impl/PdfImageLoader.java

Code
Comments
Other
Rev Date Author Line
3417 24 Jun 15 nicklas 1 package net.sf.basedb.thumbnails.impl;
3417 24 Jun 15 nicklas 2
3417 24 Jun 15 nicklas 3 import java.awt.image.BufferedImage;
3417 24 Jun 15 nicklas 4 import java.io.IOException;
3417 24 Jun 15 nicklas 5 import java.io.InputStream;
3417 24 Jun 15 nicklas 6 import java.util.List;
3417 24 Jun 15 nicklas 7
3417 24 Jun 15 nicklas 8 import org.apache.pdfbox.pdmodel.PDDocument;
3417 24 Jun 15 nicklas 9 import org.apache.pdfbox.pdmodel.PDPage;
6043 11 Nov 20 nicklas 10 import org.imgscalr.Scalr;
6043 11 Nov 20 nicklas 11 import org.imgscalr.Scalr.Rotation;
3417 24 Jun 15 nicklas 12
6053 13 Nov 20 nicklas 13 import net.sf.basedb.thumbnails.Crop;
3417 24 Jun 15 nicklas 14 import net.sf.basedb.thumbnails.ImageLoader;
5351 10 Apr 19 nicklas 15 import net.sf.basedb.thumbnails.ThumbnailSize;
5351 10 Apr 19 nicklas 16 import net.sf.basedb.thumbnails.Thumbnails;
3417 24 Jun 15 nicklas 17 import net.sf.basedb.util.FileUtil;
3417 24 Jun 15 nicklas 18
3417 24 Jun 15 nicklas 19 /**
3417 24 Jun 15 nicklas 20   Image loader implementation that expects a PDF file and
5351 10 Apr 19 nicklas 21   convertes the first page to an image. Thumbnails are scaled 
5351 10 Apr 19 nicklas 22   and returned as JPG images.
3417 24 Jun 15 nicklas 23
3417 24 Jun 15 nicklas 24   @author nicklas
3417 24 Jun 15 nicklas 25   @since 1.0
3417 24 Jun 15 nicklas 26 */
3417 24 Jun 15 nicklas 27 public class PdfImageLoader 
3417 24 Jun 15 nicklas 28   implements ImageLoader
3417 24 Jun 15 nicklas 29 {
5351 10 Apr 19 nicklas 30   
5351 10 Apr 19 nicklas 31   private BufferedImage image;
3417 24 Jun 15 nicklas 32
3417 24 Jun 15 nicklas 33   public PdfImageLoader() 
3417 24 Jun 15 nicklas 34   {}
5351 10 Apr 19 nicklas 35
5351 10 Apr 19 nicklas 36   @Override
5351 10 Apr 19 nicklas 37   public String getThumbMimeType()
5351 10 Apr 19 nicklas 38   {
5351 10 Apr 19 nicklas 39     return "image/jpg";
5351 10 Apr 19 nicklas 40   }
3417 24 Jun 15 nicklas 41   
5351 10 Apr 19 nicklas 42   @Override
5351 10 Apr 19 nicklas 43   public String getThumbExtension()
5351 10 Apr 19 nicklas 44   {
5351 10 Apr 19 nicklas 45     return "jpg";
5351 10 Apr 19 nicklas 46   }
5351 10 Apr 19 nicklas 47
5351 10 Apr 19 nicklas 48   
3417 24 Jun 15 nicklas 49   @SuppressWarnings("unchecked")
3417 24 Jun 15 nicklas 50   @Override
6046 11 Nov 20 nicklas 51   public void loadImage(InputStream in, int imageIndex)
3417 24 Jun 15 nicklas 52     throws IOException 
3417 24 Jun 15 nicklas 53   {
3417 24 Jun 15 nicklas 54     PDDocument pdf = null;
3417 24 Jun 15 nicklas 55     try
3417 24 Jun 15 nicklas 56     {
3417 24 Jun 15 nicklas 57       pdf = PDDocument.load(in);
3417 24 Jun 15 nicklas 58       List<PDPage> pages = (List<PDPage>)pdf.getDocumentCatalog().getAllPages();
6046 11 Nov 20 nicklas 59       if (imageIndex < 0)
6046 11 Nov 20 nicklas 60       {
6046 11 Nov 20 nicklas 61         imageIndex = 0;
6046 11 Nov 20 nicklas 62       }
6046 11 Nov 20 nicklas 63       else if (imageIndex >= pages.size())
6046 11 Nov 20 nicklas 64       {
6046 11 Nov 20 nicklas 65         imageIndex = pages.size() - 1;
6046 11 Nov 20 nicklas 66       }
6046 11 Nov 20 nicklas 67       image = pages.get(imageIndex).convertToImage(BufferedImage.TYPE_INT_RGB, 300);
3417 24 Jun 15 nicklas 68     }
3417 24 Jun 15 nicklas 69     finally
3417 24 Jun 15 nicklas 70     {
3417 24 Jun 15 nicklas 71       FileUtil.close(pdf);
3417 24 Jun 15 nicklas 72     }
3417 24 Jun 15 nicklas 73   }
5351 10 Apr 19 nicklas 74   
5351 10 Apr 19 nicklas 75   @Override
6053 13 Nov 20 nicklas 76   public byte[] getThumbImage(ThumbnailSize size, Rotation rotation, Crop crop) 
5351 10 Apr 19 nicklas 77     throws IOException
5351 10 Apr 19 nicklas 78   {
6053 13 Nov 20 nicklas 79     BufferedImage tmp = crop == null ? image : crop.crop(image); 
6053 13 Nov 20 nicklas 80     BufferedImage thumb = Thumbnails.scaleImage(tmp, size);
6043 11 Nov 20 nicklas 81     if (rotation != null) thumb = Scalr.rotate(thumb, rotation);
5351 10 Apr 19 nicklas 82     byte[] jpg = Thumbnails.toJpg(thumb, size.MEMORY);
5351 10 Apr 19 nicklas 83     return jpg;
5351 10 Apr 19 nicklas 84   }
3417 24 Jun 15 nicklas 85 }