Package org.pdfsam.guiclient.commons.business.loaders.callable

Source Code of org.pdfsam.guiclient.commons.business.loaders.callable.AddPdfDocument

/*
* Created on 29-Nov-2009
* Copyright (C) 2009 by Andrea Vacondio.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
*  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.pdfsam.guiclient.commons.business.loaders.callable;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.pdfsam.guiclient.commons.panels.JPdfSelectionPanel;
import org.pdfsam.guiclient.configuration.Configuration;
import org.pdfsam.guiclient.dto.PdfSelectionTableItem;
import org.pdfsam.guiclient.utils.EncryptionUtility;
import org.pdfsam.guiclient.utils.filters.PdfFilter;
import org.pdfsam.i18n.GettextResource;

import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.RandomAccessFileOrArray;
/**
* Callable to add a pdf document to the selection panel
* @author Andrea Vacondio
*
*/
public class AddPdfDocument implements Callable<Boolean> {

  private static final Logger LOG = Logger.getLogger(AddPdfDocument.class.getPackage().getName());
 
  /*used to find the document data*/
  private static String TITLE = PdfName.decodeName(PdfName.TITLE.toString());
  private static String PRODUCER = PdfName.decodeName(PdfName.PRODUCER.toString());
  private static String AUTHOR = PdfName.decodeName(PdfName.AUTHOR.toString());
  private static String SUBJECT = PdfName.decodeName(PdfName.SUBJECT.toString());
  private static String CREATOR = PdfName.decodeName(PdfName.CREATOR.toString());
  private static String MODDATE = PdfName.decodeName(PdfName.MODDATE.toString());
  private static String CREATIONDATE = PdfName.decodeName(PdfName.CREATIONDATE.toString());
  private static String KEYWORDS = PdfName.decodeName(PdfName.KEYWORDS.toString());
 
  String wipText;
  File inputFile;
  String password;
  String pageSelection;
  JPdfSelectionPanel panel;
 
  public AddPdfDocument(File inputFile, JPdfSelectionPanel panel){
    this(inputFile, panel, null, null);
  }
 
  public AddPdfDocument(File inputFile, JPdfSelectionPanel panel, String password, String pageSelection){
    this.inputFile = inputFile;
    this.pageSelection = pageSelection;
    this.password = password;
    this.panel = panel;
  }
 
  public Boolean call() {
    Boolean retVal = Boolean.FALSE;
    try{
       if (inputFile != null){
          if(new PdfFilter(false).accept(inputFile)){
              wipText = GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Please wait while reading")+" "+inputFile.getName()+" ...";
                    panel.addWipText(wipText);                     
                    panel.addTableRow(getPdfSelectionTableItem(inputFile, password, pageSelection));
                    panel.removeWipText(wipText);
                    retVal = Boolean.TRUE;
          }else{
            LOG.warn(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Selected file is not a pdf document.")+" "+inputFile.getName());
          }
            }
        }catch(Throwable e){
          LOG.error(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Error: "),e);
       
        return retVal;
   }
   
    /**
     *
     * @param fileToAdd file to add
     * @param password password to open the file
     * @return the item to add to the table
     */
    PdfSelectionTableItem getPdfSelectionTableItem(File fileToAdd, String password, String pageSelection){
      PdfSelectionTableItem tableItem = null;
      PdfReader pdfReader = null;
        if (fileToAdd != null){
          tableItem = new PdfSelectionTableItem();
          tableItem.setInputFile(fileToAdd);
          tableItem.setPassword(password);
          tableItem.setPageSelection(pageSelection);
            try{
                //fix 04/11/08 for memory usage
               pdfReader = new PdfReader(new RandomAccessFileOrArray(fileToAdd.getAbsolutePath()), (password != null)?password.getBytes():null);                 
                 tableItem.setEncrypted(pdfReader.isEncrypted());
                 tableItem.setFullPermission(pdfReader.isOpenedWithFullPermissions());
                 if(tableItem.isEncrypted()){
                   tableItem.setPermissions(getPermissionsVerbose(pdfReader.getPermissions()));
                   int cMode = pdfReader.getCryptoMode();
                   switch (cMode){
                   case PdfWriter.STANDARD_ENCRYPTION_40:
                     tableItem.setEncryptionAlgorithm(EncryptionUtility.RC4_40);
                     break;
                   case PdfWriter.STANDARD_ENCRYPTION_128:
                     tableItem.setEncryptionAlgorithm(EncryptionUtility.RC4_128);
                     break;
                   case PdfWriter.ENCRYPTION_AES_128:
                     tableItem.setEncryptionAlgorithm(EncryptionUtility.AES_128);
                     break;
                   default:
                     break;                         
                   }
                 }
                 tableItem.setPagesNumber(Integer.toString(pdfReader.getNumberOfPages()));
                 tableItem.setFileSize(fileToAdd.length());
                 tableItem.setPdfVersion(pdfReader.getPdfVersion());
                 tableItem.setSyntaxErrors(pdfReader.isRebuilt());
                 initTableItemDocumentData(pdfReader, tableItem);
            }
            catch (Exception e){
              tableItem.setLoadedWithErrors(true);
              LOG.error(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Error loading ")+fileToAdd.getAbsolutePath()+" :", e);
            }
            finally{
              if(pdfReader != null){
                pdfReader.close();
          pdfReader = null;
              }
            }              
        }
        return tableItem;   
    }
    /**
     * It gives a human readable version of the document permissions
     * @param permissions
     * @return
     */
    private String getPermissionsVerbose(int permissions) {
      StringBuffer buf = new StringBuffer();
      if ((PdfWriter.ALLOW_PRINTING & permissions) == PdfWriter.ALLOW_PRINTING) buf.append(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Print"));
        if ((PdfWriter.ALLOW_MODIFY_CONTENTS & permissions) == PdfWriter.ALLOW_MODIFY_CONTENTS) buf.append(", "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Modify"));
        if ((PdfWriter.ALLOW_COPY & permissions) == PdfWriter.ALLOW_COPY) buf.append(", "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Copy or extract"));
        if ((PdfWriter.ALLOW_MODIFY_ANNOTATIONS & permissions) == PdfWriter.ALLOW_MODIFY_ANNOTATIONS) buf.append(", "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Add or modify text annotations"));
        if ((PdfWriter.ALLOW_FILL_IN & permissions) == PdfWriter.ALLOW_FILL_IN) buf.append(", "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Fill form fields"));
        if ((PdfWriter.ALLOW_SCREENREADERS & permissions) == PdfWriter.ALLOW_SCREENREADERS) buf.append(", "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Extract for use by accessibility dev."));
        if ((PdfWriter.ALLOW_ASSEMBLY & permissions) == PdfWriter.ALLOW_ASSEMBLY) buf.append(", "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Manipulate pages and add bookmarks"));
        if ((PdfWriter.ALLOW_DEGRADED_PRINTING & permissions) == PdfWriter.ALLOW_DEGRADED_PRINTING) buf.append(", "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Low quality print"));
        return buf.toString();
    }
    /**
     * initialization of the document data
     * @param reader
     * @param tableItem
     */
    @SuppressWarnings("unchecked")
  private void initTableItemDocumentData(PdfReader reader, PdfSelectionTableItem tableItem){
      if(reader!=null && tableItem != null){
        HashMap<String, String> info = reader.getInfo();
        if(info!=null && info.size()>0){
          for (Map.Entry<String, String> entry: info.entrySet()) {               
            if(entry != null){
              String key = entry.getKey();
              String value = StringUtils.trimToEmpty(entry.getValue());
              if(key.equals(TITLE)){
                tableItem.getDocumentMetaData().setTitle(value);
              }else if(key.equals(PRODUCER)){
                tableItem.getDocumentMetaData().setProducer(value);
              }else if(key.equals(AUTHOR)){
                tableItem.getDocumentMetaData().setAuthor(value);
              }else if(key.equals(SUBJECT)){
                tableItem.getDocumentMetaData().setSubject(value);
              }else if(key.equals(CREATOR)){
                tableItem.getDocumentMetaData().setCreator(value);
              }else if(key.equals(MODDATE)){
                tableItem.getDocumentMetaData().setModificationDate(value);
              }else if(key.equals(CREATIONDATE)){
                tableItem.getDocumentMetaData().setCreationDate(value);
              }else if(key.equals(KEYWORDS)){
                tableItem.getDocumentMetaData().setKeywords(value);
              }
            }
          }
        }
      }
    }

}
TOP

Related Classes of org.pdfsam.guiclient.commons.business.loaders.callable.AddPdfDocument

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.