No funciona extractor de metadatos en versión 3.4

cancel
Showing results for 
Search instead for 
Did you mean: 
cybermakoki
Member II

No funciona extractor de metadatos en versión 3.4

Hola,

Bueno, por vigésimo quinta vez ya… he vuelto a tener problemas con Alfresco migrando de versión…

Hemos actualizado de la versión 3.1.1 a la versión 3.4 (haciendo los saltos de versiones correspondientes).

En la versión 3.1.1 tenia 2 extractores de metadatos definidos, uno para excel y otro para pdf, los dos funcionando perfectamente.

Os pongo aqui la configuración y el extractor:

   <bean id="extracter.pdf" class="extractor.PDFCustomExtractor" parent="baseMetadataExtracter" >
        <property name="inheritDefaultMapping">
            <value>true</value>
        </property>
      <property name="mappingProperties">
            <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
               <property name="location">
                  <value>classpath:alfresco/extension/custom-pdf-extractor-mappings.properties</value>
               </property>
            </bean>
        </property>
    </bean>
   
   <bean id="extracter.off" class="extractor.MyOfficeMetadataExtractor" parent="baseMetadataExtracter" >
  <property name="inheritDefaultMapping">
    <value>true</value>
  </property>
         <property name="mappingProperties">
            <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
               <property name="location">
                  <value>classpath:alfresco/extension/custom-office-extractor-mappings.properties</value>
               </property>
            </bean>
        </property>
    </bean>


y el código:



public class PDFCustomExtractor extends AbstractMappingMetadataExtracter
{
  private static final String KEY_AUTHOR = "author";
  private static final String KEY_TITLE = "title";
  private static final String KEY_SUBJECT = "subject";
  private static final String KEY_CREATED = "created";
  private static final String KEY_KEYWORDS = "keywords";
  public static String[] SUPPORTED_MIMETYPES = { MimetypeMap.MIMETYPE_PDF };
  private static Log log = LogFactory.getLog(PDFCustomExtractor.class);
 
  public PDFCustomExtractor()
  {
     
    super(new HashSet<String>(Arrays.asList(SUPPORTED_MIMETYPES)));
   
  }

  public Map<String, Serializable> extractRaw(ContentReader reader)
    throws Throwable
  {
    Map<String, Serializable> rawProperties = newRawMap();

    PDDocument pdf = null;
    InputStream is = null;
    try
    {
      is = reader.getContentInputStream();

      pdf = PDDocument.load(is);
      if (pdf.isEncrypted()) {
        //break label337;
      }
      PDDocumentInformation docInfo = pdf.getDocumentInformation();

      putRawValue("author", docInfo.getAuthor(), rawProperties);
      putRawValue("title", docInfo.getTitle(), rawProperties);
      putRawValue("subject", docInfo.getSubject(), rawProperties);

      String keywords = docInfo.getKeywords();
      try
      {
        keywords = keywords.trim();
        while (keywords.charAt(0) == '"') {
          keywords = keywords.substring(1);
        }
        while (keywords.charAt(keywords.length() - 1) == '"') {
          keywords = keywords.substring(0, keywords.length() - 1);
        }
        keywords = keywords.trim();

        StringTokenizer stcomma = new StringTokenizer(keywords, ";");
        while (stcomma.hasMoreTokens()) {
          String token = stcomma.nextToken();
          StringTokenizer sttoken = new StringTokenizer(token, "=");

          putRawValue(sttoken.nextToken(), sttoken.nextToken(), rawProperties);
        }
      }
      catch (Exception x) {
         log.info("\n\nExtracter: " + x.toString() + ".\n");
      }

      if (keywords != null) {
         log.info("\n\nKeywords es:" + keywords + ".\n");
        putRawValue("keywords", keywords, rawProperties);
      }
      else {
        log.info("\n\nKeywords es null.\n");
      }

      try
      {
        Calendar created = docInfo.getCreationDate();
        label337: if (created != null)
        {
          putRawValue("created", created.getTime(), rawProperties);
        }

      }
      catch (IOException localIOException)
      {
      }

    }
    finally
    {
      if (is != null)
        try {
          is.close(); } catch (IOException localIOException1) {
        }
      if (pdf != null) {
        try {
          pdf.close(); } catch (Throwable e) { e.printStackTrace(); }

      }
    }

    log.info("\n\nPropiedades de vuelta:" + rawProperties.toString() + "\n");

    return rawProperties;
  }
}

Lo que no entiendo es porque el de Excel funciona, y el de PDF no, cuando en la versión 3.1.1 ha estado funcionando siempre bien…

Yo me desespero ya con esto, de verdad, podria escribir un libro con todos los problemas que he tenido con Alfresco…
1 Reply
cybermakoki
Member II

Re: No funciona extractor de metadatos en versión 3.4

Bueno, para el que se encuentre con este problema al migrar a la versión 3.4…

Los extractores de Alfresco han cambiado, ahora usan Tika:

http://wiki.alfresco.com/wiki/Content_Transformation_and_Metadata_Extraction_with_Apache_Tika

y he tenido que cambiar el código del extractor para que funcione…



public class PDFCustomExtractor  extends TikaPoweredMetadataExtracter
{
    protected static Log logger = LogFactory.getLog(PDFCustomExtractor.class);

    public static ArrayList<String> SUPPORTED_MIMETYPES = buildSupportedMimetypes(
             new String[] { MimetypeMap.MIMETYPE_PDF },
             new PDFParser()
    );

    public PDFCustomExtractor()
    {
        super(SUPPORTED_MIMETYPES);
    }
   
    @Override
    protected Parser getParser() {
       return new PDFParser();
    }
   
    @Override
    public Map<String, Serializable> extractRaw(ContentReader reader) throws Throwable
    {
          Map<String, Serializable> rawProperties = newRawMap();
      
          PDDocument pdf = null;
          InputStream is = null;
          try
          {
            is = reader.getContentInputStream();
      
            pdf = PDDocument.load(is);
            if (pdf.isEncrypted()) {
              //break label337;
            }
            PDDocumentInformation docInfo = pdf.getDocumentInformation();
      
            putRawValue("author", docInfo.getAuthor(), rawProperties);
            putRawValue("title", docInfo.getTitle(), rawProperties);
            putRawValue("subject", docInfo.getSubject(), rawProperties);
      
            String keywords = docInfo.getKeywords();
            try
            {
              keywords = keywords.trim();
              while (keywords.charAt(0) == '"') {
                keywords = keywords.substring(1);
              }
              while (keywords.charAt(keywords.length() - 1) == '"') {
                keywords = keywords.substring(0, keywords.length() - 1);
              }
              keywords = keywords.trim();
      
              StringTokenizer stcomma = new StringTokenizer(keywords, ";");
              while (stcomma.hasMoreTokens()) {
                String token = stcomma.nextToken();
                StringTokenizer sttoken = new StringTokenizer(token, "=");
      
                putRawValue(sttoken.nextToken(), sttoken.nextToken(), rawProperties);
              }
            }
            catch (Exception x) {
               logger.info("\n\nExtracter: " + x.toString() + ".\n");
            }
      
            if (keywords != null) {
               logger.info("\n\nKeywords es:" + keywords + ".\n");
              putRawValue("keywords", keywords, rawProperties);
            }
            else {
              logger.info("\n\nKeywords es null.\n");
            }
      
            try
            {
              Calendar created = docInfo.getCreationDate();
              label337: if (created != null)
              {
                putRawValue("created", created.getTime(), rawProperties);
              }
      
            }
            catch (IOException localIOException)
            {
            }
      
          }
          finally
          {
            if (is != null)
              try {
                is.close(); } catch (IOException localIOException1) {
              }
            if (pdf != null) {
              try {
                pdf.close(); } catch (Throwable e) { e.printStackTrace(); }
      
            }
          }
      
          logger.info("\n\nPropiedades de vuelta:" + rawProperties.toString() + "\n");
      
          return rawProperties;
        }
}

en fin, todo el dia perdido con esto….