Alfresco como sistema de conversión a PDF

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

Alfresco como sistema de conversión a PDF

Hola

Estoy intentando usar Alfresco con OpenOffice en Modo Servidor para conseguir que todo (o lo que se pueda Smiley Very Happy) que me llegue a un espacio (que está mapeado como un Alias de Correo) se convierta a PDF automáticamente.

He conseguido hacerlo con la mayoría de formatos de imagen (con el último ImageMagick), texto plano, documentos odt y con documentos de MS Office 2003 o anterior. El problema es que ni con XML ni con los documentos de Office 2007 me está funcionando.

El código de la regla del espacio es el siguiente:

var newdoc = null;
// Carpeta donde muevo los PDF resultado de la conversión
var convertedFolder = space.childByNamePath("Converted")
var mimetype = document.mimetype;
switch(String(mimetype).toLowerCase())
{
  case "image/bmp":
  case "image/gif":
  case "image/jpg":
  case "image/jpeg":
  case "image/tif":
  case "image/tiff":
  case "image/png":
    newdoc = document.transformImage("image/pdf",convertedFolder);
  break;
  case "text/plain": // OK
  case "text/xml": // No va
  case "application/msword": // OK
  case "application/vnd.ms-excel":
  case "application/vnd.excel":  // OK
  case "application/vnd.powerpoint": //OK
  case "application/vnd.openxmlformats-officedocument.wordprocessingml.document": // No va
    newdoc = document.transformDocument("application/pdf",convertedFolder);
  break;
  // Los pdf los dejo tal cual
  case "application/pdf":
  case "image/pdf":
    newdoc = document;
  break;
}
if(newdoc != null)
{
  logger.log("Conversión ok");
  document.remove();
} else { logger.log("Error convirtiendo a PDF " + document.name + " con mimetype " + document.mimetype); }

¿Alguien ha intentado hacer algo parecido? Y lo más importante… ¿ha tenido éxito? Smiley Very Happy

Espero vuestros comentarios
17 Replies
pjcaracuel_2349
Active Member II

Re: Alfresco como sistema de conversión a PDF

Buenas,

Creo que no es exactamente tu caso, pero creo que te puede ayudar o almenos dar una idea del problema.

http://forums.alfresco.com/en/viewtopic.php?f=3&t=16210&p=54231#p54231

Saludos
ricard
Member II

Re: Alfresco como sistema de conversión a PDF

Pues justamente acabo de hacerlo funcionar con docx… y va por ahí la cosa

Lo que he hecho es lo siguiente:

En el archivo openoffice-document-formats.xml he añadido

<document-format><name>Microsoft Word 2007</name>
<family>Text</family>
<mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type>
<file-extension>docx</file-extension>
<export-filters>
<entry><family>Text</family><string>MS Word 2007</string></entry>
</export-filters>
</document-format>

Y ahora la conversión va bien.

Había olvidado mencionar que estoy usando Alfresco 2.2SP3 y OOFfice 3.0.
Imagino que cuando se hicieron estos ficheros para Alfresco 2.2 todavía no estaba muy claro el soporte de OOffice para los docx, xslx y pptx y por ello no se incluyeron.

Por otro lado, si alguien intenta hacer algo parecido, comentar lo siguiente:

- Para que funcione bien la conversión de TIFF multipágina a PDF hay que usar el último imconvert de ImageMagick
- Para que funcione el transformImage a PDF hay que añadir en el mimetype-map.xml

<mimetype mimetype="image/pdf" display="Adobe PDF Document">
    <extension>pdf</extension>
</mimetype>

Creo que está bastante bien este sistema para unificar por ejemplo toda la documentación que llega desde los E-mails.
pjcaracuel_2349
Active Member II

Re: Alfresco como sistema de conversión a PDF

Perfecto y gracias por la aportacion adicional.

Al final no iba muy desencaminado yo.  :wink:

Saludos
ricard
Member II

Re: Alfresco como sistema de conversión a PDF

Bueno os dejo el código final (se me ha ido la cabeza con tanto mimetype):

var newdoc = null;
var convertedFolder = space.childByNamePath("Converted")
var convertedErrors = space.childByNamePath("Errores")
var mimetype = document.mimetype;

if(mimetype == "application/pdf" || mimetype == "image/pdf")
{
  newdoc = document;
} else {
  if(mimetype.substr(0, 5) == "image")
  {
    newdoc = document.transformImage("image/pdf",convertedFolder);
  } else {
    newdoc = document.transformDocument("application/pdf",convertedFolder);
  }
}

if(newdoc != null)
{
  document.remove();
}

Lo que falta sería poder hacer algo del tipo try/catch ya que si falla el transform salta una Excepción, pero si son formatos soportados la conversión os debería funcionar.

Saludos y qué menos que aportar alguna cosilla con todo lo que he usado el foro Smiley Very Happy
giorgio
Member II

Re: Alfresco como sistema de conversión a PDF

Buenas, queria preguntaros estos códigos donde se deben de poner para que funcionen, he probado a hacerlo en un nuevo contenido dentro scripts.
pjcaracuel_2349
Active Member II

Re: Alfresco como sistema de conversión a PDF

Hola giorgio, la respuesta es simple.

Para poder ejecutar un script, puedes crear un script con extension js con el codigo que desees ejecutar. El del post por ejemplo.

Luego este contenido los subes a CompanyHome/Data Dictionary/Scripts

Entonces ya podras asociar a una regla el uso de ese script
http://wiki.alfresco.com/wiki/Client_Manage_Content_Rules

Saludos
giorgio
Member II

Re: Alfresco como sistema de conversión a PDF

MMMM, vale lo siento, ha sido culpa mia porque llevaba prisa y no me he explicado bien, lo siento.
Los pasos que me comentas los he hecho como dices, pero el problema esque parece que no me ejecute nada, y otras veces me tira una excepción, con los codigos que hay en este hilo del foro.
Pero me parece que estoy deduciendo que va a ser problema de los codigos, que me fallan por lo que sea, aunque los he pegado tal cual, no se que me puede faltar?

Saludos
pjcaracuel_2349
Active Member II

Re: Alfresco como sistema de conversión a PDF

Perfecto, puedes poner el contenido de alfresco.log?

Saludos
giorgio
Member II

Re: Alfresco como sistema de conversión a PDF

Ahora por pantalla me tira esto

  Por favor corrija los errores siguientes y haga clic en Aceptar.
Ocurrió un error del sistema durante la operación: Unknown Exception in Transaction
y esto me ocurre con el primer codigo se encuentra en este post.

en el log pone:
02:13:31,367 ERROR [org.alfresco.web.ui.common.Utils] Ocurrió un error del sistema durante la operación: Unknown Exception in Transaction.
org.alfresco.error.AlfrescoRuntimeException: Unknown Exception in Transaction.
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:292)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:155)
   at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.java:124)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
   at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
   at javax.faces.component.UICommand.broadcast(UICommand.java:109)
   at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
   at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
   at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
   at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
   at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
   at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:81)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
   at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
   at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
   at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
   at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
   at java.lang.Thread.run(Thread.java:619)
Caused by: javax.transaction.RollbackException: Transaction didn't commit: Failed to execute script 'workspace://SpacesStore/c87221c6-1e85-11de-a441-dbfad9ca92ec': Failed to execute script 'workspace://SpacesStore/c87221c6-1e85-11de-a441-dbfad9ca92ec': The choice of Java constructor transformImage matching JavaScript argument types (string,null) is ambiguous; candidate constructors are:
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,java.lang.String)
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,org.alfresco.repo.jscript.ScriptNode) (AlfrescoScript#14)
   at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:430)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:239)
   … 32 more
Caused by: org.alfresco.service.cmr.repository.ScriptException: Failed to execute script 'workspace://SpacesStore/c87221c6-1e85-11de-a441-dbfad9ca92ec': Failed to execute script 'workspace://SpacesStore/c87221c6-1e85-11de-a441-dbfad9ca92ec': The choice of Java constructor transformImage matching JavaScript argument types (string,null) is ambiguous; candidate constructors are:
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,java.lang.String)
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,org.alfresco.repo.jscript.ScriptNode) (AlfrescoScript#14)
   at org.alfresco.repo.processor.ScriptServiceImpl.executeScript(ScriptServiceImpl.java:171)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
   at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:40)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:238)
   at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:69)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210)
   at $Proxy48.executeScript(Unknown Source)
   at org.alfresco.repo.action.executer.ScriptActionExecuter.executeImpl(ScriptActionExecuter.java:157)
   at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:120)
   at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:537)
   at org.alfresco.repo.action.executer.CompositeActionExecuter.executeImpl(CompositeActionExecuter.java:72)
   at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:120)
   at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:537)
   at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:472)
   at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:399)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
   at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:40)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.alfresco.repo.audit.AuditComponentImpl.auditImpl(AuditComponentImpl.java:256)
   at org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:191)
   at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:69)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210)
   at $Proxy19.executeAction(Unknown Source)
   at org.alfresco.repo.rule.RuleServiceImpl.executeRule(RuleServiceImpl.java:918)
   at org.alfresco.repo.rule.RuleServiceImpl.executePendingRule(RuleServiceImpl.java:886)
   at org.alfresco.repo.rule.RuleServiceImpl.executePendingRulesImpl(RuleServiceImpl.java:857)
   at org.alfresco.repo.rule.RuleServiceImpl.executePendingRules(RuleServiceImpl.java:830)
   at org.alfresco.repo.rule.RuleTransactionListener.beforeCommit(RuleTransactionListener.java:69)
   at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:626)
   at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:48)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:821)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:637)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:624)
   at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:307)
   at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:420)
   … 33 more
Caused by: org.alfresco.service.cmr.repository.ScriptException: Failed to execute script 'workspace://SpacesStore/c87221c6-1e85-11de-a441-dbfad9ca92ec': The choice of Java constructor transformImage matching JavaScript argument types (string,null) is ambiguous; candidate constructors are:
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,java.lang.String)
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,org.alfresco.repo.jscript.ScriptNode) (AlfrescoScript#14)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:146)
   at org.alfresco.repo.processor.ScriptServiceImpl.executeScript(ScriptServiceImpl.java:167)
   … 90 more
Caused by: org.alfresco.error.AlfrescoRuntimeException: The choice of Java constructor transformImage matching JavaScript argument types (string,null) is ambiguous; candidate constructors are:
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,java.lang.String)
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,org.alfresco.repo.jscript.ScriptNode) (AlfrescoScript#14)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:518)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.execute(RhinoScriptProcessor.java:142)
   … 91 more
Caused by: org.mozilla.javascript.EvaluatorException: The choice of Java constructor transformImage matching JavaScript argument types (string,null) is ambiguous; candidate constructors are:
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,java.lang.String)
    class org.alfresco.repo.jscript.ScriptNode transformImage(java.lang.String,org.alfresco.repo.jscript.ScriptNode) (AlfrescoScript#14)
   at org.mozilla.javascript.DefaultErrorReporter.runtimeError(DefaultErrorReporter.java:95)
   at org.mozilla.javascript.Context.reportRuntimeError(Context.java:978)
   at org.mozilla.javascript.Context.reportRuntimeError(Context.java:1034)
   at org.mozilla.javascript.Context.reportRuntimeError3(Context.java:1012)
   at org.mozilla.javascript.NativeJavaMethod.findFunction(NativeJavaMethod.java:382)
   at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:153)
   at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:74)
   at org.mozilla.javascript.gen.c8._c0(AlfrescoScript:14)
   at org.mozilla.javascript.gen.c8.call(AlfrescoScript)
   at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:337)
   at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:2755)
   at org.mozilla.javascript.gen.c8.call(AlfrescoScript)
   at org.mozilla.javascript.gen.c8.exec(AlfrescoScript)
   at org.mozilla.javascript.Context.evaluateString(Context.java:1144)
   at org.alfresco.repo.jscript.RhinoScriptProcessor.executeScriptImpl(RhinoScriptProcessor.java:510)
   … 92 more