extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/pdf/PdfToZipCombiner.java

Code
Comments
Other
Rev Date Author Line
3788 17 Mar 16 nicklas 1 package net.sf.basedb.reggie.pdf;
3788 17 Mar 16 nicklas 2
3788 17 Mar 16 nicklas 3 import java.io.IOException;
3788 17 Mar 16 nicklas 4 import java.io.InputStream;
3788 17 Mar 16 nicklas 5 import java.io.OutputStream;
3788 17 Mar 16 nicklas 6
3788 17 Mar 16 nicklas 7 import net.lingala.zip4j.exception.ZipException;
3788 17 Mar 16 nicklas 8 import net.lingala.zip4j.io.ZipOutputStream;
3788 17 Mar 16 nicklas 9 import net.lingala.zip4j.model.ZipParameters;
3788 17 Mar 16 nicklas 10 import net.lingala.zip4j.util.Zip4jConstants;
3788 17 Mar 16 nicklas 11 import net.sf.basedb.util.FileUtil;
3788 17 Mar 16 nicklas 12
3788 17 Mar 16 nicklas 13 /**
3788 17 Mar 16 nicklas 14   Combine PDF files info a ZIP archive. Entryption
3788 17 Mar 16 nicklas 15   is supported.
3788 17 Mar 16 nicklas 16   @since 4.3
3788 17 Mar 16 nicklas 17 */
3788 17 Mar 16 nicklas 18 public class PdfToZipCombiner 
3788 17 Mar 16 nicklas 19   extends PdfCombiner
3788 17 Mar 16 nicklas 20 {
3788 17 Mar 16 nicklas 21
3788 17 Mar 16 nicklas 22   private ZipOutputStream zip;
3788 17 Mar 16 nicklas 23   private String password;
3788 17 Mar 16 nicklas 24   
3788 17 Mar 16 nicklas 25   /**
3788 17 Mar 16 nicklas 26     Create a combiner that writes the ZIP file to the
3788 17 Mar 16 nicklas 27     given output stream. If a password is given the
3788 17 Mar 16 nicklas 28     entries are encrypted. Default encryption method
3788 17 Mar 16 nicklas 29     is 256-bit AES.
3788 17 Mar 16 nicklas 30   */
3788 17 Mar 16 nicklas 31   public PdfToZipCombiner(OutputStream out, String password) 
3788 17 Mar 16 nicklas 32   {
3788 17 Mar 16 nicklas 33     super("application/zip", ".zip");
3788 17 Mar 16 nicklas 34     this.zip = new ZipOutputStream(out);
3788 17 Mar 16 nicklas 35     this.password = password;
3788 17 Mar 16 nicklas 36   }
3788 17 Mar 16 nicklas 37   
3788 17 Mar 16 nicklas 38   @Override
3788 17 Mar 16 nicklas 39   public boolean supportsEncryptBeforeCombine() 
3788 17 Mar 16 nicklas 40   {
3788 17 Mar 16 nicklas 41     return true;
3788 17 Mar 16 nicklas 42   }
3788 17 Mar 16 nicklas 43
3788 17 Mar 16 nicklas 44   @Override
3788 17 Mar 16 nicklas 45   public void close() 
3788 17 Mar 16 nicklas 46     throws IOException
3788 17 Mar 16 nicklas 47   {
3788 17 Mar 16 nicklas 48     try
3788 17 Mar 16 nicklas 49     {
3788 17 Mar 16 nicklas 50       zip.flush();
3788 17 Mar 16 nicklas 51       zip.finish();
3788 17 Mar 16 nicklas 52     }
3788 17 Mar 16 nicklas 53     catch (ZipException ex)
3788 17 Mar 16 nicklas 54     {
3788 17 Mar 16 nicklas 55       throw new IOException(ex);
3788 17 Mar 16 nicklas 56     }
3788 17 Mar 16 nicklas 57     finally
3788 17 Mar 16 nicklas 58     {
3788 17 Mar 16 nicklas 59       FileUtil.close(zip);
3788 17 Mar 16 nicklas 60       zip = null;
3788 17 Mar 16 nicklas 61     }
3788 17 Mar 16 nicklas 62   }
3788 17 Mar 16 nicklas 63
3788 17 Mar 16 nicklas 64   @Override
3788 17 Mar 16 nicklas 65   public boolean addFile(InputStream pdf, String pdfName) 
3788 17 Mar 16 nicklas 66     throws IOException
3788 17 Mar 16 nicklas 67   {
3788 17 Mar 16 nicklas 68     try
3788 17 Mar 16 nicklas 69     {
3788 17 Mar 16 nicklas 70       ZipParameters zipParameters = new ZipParameters();
3788 17 Mar 16 nicklas 71       zipParameters.setSourceExternalStream(true);
3788 17 Mar 16 nicklas 72       zipParameters.setFileNameInZip(pdfName);
3788 17 Mar 16 nicklas 73       zipParameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
3788 17 Mar 16 nicklas 74       zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
3788 17 Mar 16 nicklas 75       if (password != null)
3788 17 Mar 16 nicklas 76       {
3788 17 Mar 16 nicklas 77         zipParameters.setEncryptFiles(true);
3788 17 Mar 16 nicklas 78         zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
3788 17 Mar 16 nicklas 79         zipParameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
3788 17 Mar 16 nicklas 80         zipParameters.setPassword(password);
3788 17 Mar 16 nicklas 81       }
3788 17 Mar 16 nicklas 82       zip.putNextEntry(null, zipParameters);
3788 17 Mar 16 nicklas 83       
3788 17 Mar 16 nicklas 84       FileUtil.copy(pdf, zip);
3788 17 Mar 16 nicklas 85       zip.flush();
3788 17 Mar 16 nicklas 86       zip.closeEntry();
3788 17 Mar 16 nicklas 87     }
3788 17 Mar 16 nicklas 88     catch (ZipException ex)
3788 17 Mar 16 nicklas 89     {
3788 17 Mar 16 nicklas 90       throw new IOException(ex);
3788 17 Mar 16 nicklas 91     }
3788 17 Mar 16 nicklas 92     return true;
3788 17 Mar 16 nicklas 93   }
3788 17 Mar 16 nicklas 94   
3788 17 Mar 16 nicklas 95 }
3788 17 Mar 16 nicklas 96
3788 17 Mar 16 nicklas 97