Problemas en la previsualización de documentos PDF en Alfresco

Primer problema:

En ocasiones los ficheros PDF no pueden ser visualizados por el Share de Alfresco. Esto puede ser debido a que si el PDF tiene activas las restricciones de impresión y/o copia, la librería SWFTools y en concreto la utilidad pdf2swf no es capaz de transformar el fichero.

Para estar seguros de que es este el problema, podemos llamar directamente a la utilidad con el fichero PDF y comprobar el resultado:

pdf2swf prueba.pdf -o prueba.swf

Si el mensaje que devuelve es “FATAL   PDF disallows copying” entonces estamos ante este problema.

La forma de solucionarlo es recompilar SWFTools y de esta forma evitamos el aviso y podremos ver los documentos.

Las siguientes instrucciones son para la compilación bajo Linux:

Bajamos el paquete de código fuente de las SWFTools (p.e. la versión 0.9.2 está probada en la versión 3.4.8 de Alfresco funcionando perfectamente), lo descomprimimos y entramos en el directorio creado.

En lib/pdf/pdf.cc comentamos las dos líneas siguientes:

if(!pi->config_print && pi->nocopy) {msg(” PDF disallows copying”);exit(0);}
if(pi->config_print && pi->noprint) {msg(” PDF disallows printing”);exit(0);}}

Configuramos de forma estática para que podamos llevarlo a otras distribuciones de Linux (yo la he probado en Ubuntu 11.10):

CC=/usr/bin/gcc-4.6 CXX=/usr/bin/g++-4.6 LDFLAGS=”-static” ./configure

Seguramente tengamos que instalar los paquetes para desarrollo como es el g++ y el gcc.

Luego:

make

Y por último:

make install 

O bien, simplemente sustituimos la utilidad pdf2swf que es la que se utiliza. Ya podremos ver los PDF bloqueados normalmente.

Segundo problema:

Otro problema que encontramos es que en la versión 3.4.x y 4.x los PDF se ven borrosos en la previsualización, esto es debido a los modificadores establecidos para realizar la conversión a SWF que pone Alfresco.

Para solucionarla tendremos que modificar el fichero webapps/alfresco/WEB-INF/classes/alfresco/subsystems/thirdparty/default/swf-transform.properties que generalmente tiene la siguiente línea:

swf.encoder.params=-s zoom=72 -s ppmsubpixels=1 -s poly2bitmap=1 -s bitmapfonts=1

Por esta otra (por ejemplo):

swf.encoder.params=-s zoom=100 -s ppmsubpixels=1 -s poly2bitmap=1 -s bitmapfonts=1

De esta forma se verán correctamente, eso si, el tiempo de conversión será mayor.

ACTUALIZACIÓN (12/07/2012): Aunque para compilar SWFTools se puede usar la información de los enlaces que doy al final, para Ubuntu 11 (y probado en la 12) tanto para amd64 como i386 se pueden seguir la siguiente secuencia de comandos de forma rápida:

sudo apt-get install build-essential checkinstall
sudo chown $USER /usr/local/src
sudo chmod u+rwx /usr/local/src
sudo apt-get install libgif-dev xpdf libfreetype6 libfreetype6-dev libjpeg62 libjpeg8 libjpeg8-dev
sudo wget http://www.swftools.org/swftools-0.9.1.tar.gz
cd lib/pdf
sudo wget http://gd.tuwien.ac.at/publishing/xpdf/xpdf-3.02.tar.gz
./configure
make


sudo checkinstall

Fuentes:
http://monkiki.wordpress.com/2010/04/19/compilar-pdf2swf-con-soporte-para-pdf-protegidos/
http://loftux.com/2012/01/08/replace-alfresco-standard-flash-viewer-with-pdf-js/
http://www.vservu.com/_blog/MegaZine3_-_tips,_tricks_and_hints/post/pdf2swf-switches/
http://www.swftools.org/
https://designbye.wordpress.com/2010/02/23/installing-swftools-and-pdf2swf-on-ubuntu-linux/
http://ubuntuforums.org/showthread.php?t=1821521

6 replies on “Problemas en la previsualización de documentos PDF en Alfresco”

  1. Muy bueno Fer!, bueno es saber sobre todo el primer caso (nunca me ha pasado). Por cierto, con el uso de PDF.js ¿sabes si se solucionan este tipo de problemas?, al parecer la solución que propone Loftux (artículo relacionado del post) es mucho más eficiente que la que trae Alfresco por defecto (y esto es un problema grave si somos realistas).
    Saludos y gracias por tus lecciones maestro!

  2. Hola Fernando, como siempre un post muy muy útil y muy cercano a problemas reales 😉

    Solo un par de comentarios.

    Por que modificas el comando pdf2swf con la opción de zoom a 100? si no se cambia funciona igual no? Yo opino que es mejor no cambiarlo o cambiarlo fuera de WEB-INF (hacerlo en extension) para evitar problemas al actualizar.

    El segundo comentario es sobre eso también, si se quiere cambiar el comando en la versión enterprise se puede hacer mediante JMX con jconsole y así no hay que reiniciar el servidor, solo el subsistema “Third party”, sería un cambio consistente y más rápido de hacer.

    Lo dicho, gracias y enhorabuena por esta maravilla de blog!

  3. Mikel dice:

    Interesante Fegor!
    Supongo que se puede montar el subsystem third party en el extension y así conservar los cambios en upgrades no?

  4. fegor dice:

    Tengo pendiente investigar a fondo la solución de Loftux y por tanto un “post” futuro 🙂

  5. fegor dice:

    Hola Toni. Gracias por tu comentario.

    No, no funciona igual, podrás ver mejor los PDFs, es más, a un valor de 150 se ven bastante nítidos y con 300 se ven mejor todavía cuando haces zoom a un 100%, es si, a costa de una bajada de rendimiento apreciable.

    Si, bueno, doy por sentado que se puede copiar la parte de subsystems/thirdparty a la parte extension y modificar ahí directamente con lo que no se pierden los cambios. Igualmente mediante la consola JMX siempre que no sea un proyecto “llave en mano”. 😉

  6. fegor dice:

    Claro Mikel, doy por supuesto que ya se entiende como va el tema de subsystems en Alfresco 3.x y 4.x 😀

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *