lunes, 28 de junio de 2010

How-To: Thumbnails (vista previa) para archivos CHM en Ubuntu

Este excelente How-To que he traducido para ustedes funciona a la perfección tal y como está aquí. Nos ayuda a resolver este indeseable aspecto de los iconos de los archivos .chm, al tiempo que nos ayuda a identificarlos pues, coloca como thumbnail la imagen de la portada del libro. Espero que sirva de ayuda...

Para alguien por ahí con los archivos chm, escribí un guión que tendrá soporte en miniatura de archivos chm a gnome. Con este script usted consigue los thumbnails de los archivos chm en el gestor de archivos Nautilus. La secuencia de comandos utiliza la mayor imagen de la página principal del chm para generar la imagen, por lo general esta será una imagen de la portada.

Primero tendrás que instalar las dependencias de este script:

      sudo apt-get install python-beautifulsoup python-chm imagemagick


Este es el script:


#!/usr/bin/env python

import sys, os
from chm import chm
from BeautifulSoup import BeautifulSoup

class ChmThumbNailer(object):
    def __init__(self):
        self.chm = chm.CHMFile()

    def thumbnail(self, ifile, ofile, sz):

        if self.chm.LoadCHM(ifile) == 0:
            return 1

        bestname    = None
        bestsize    = 0
        base        = self.chm.home.rpartition('/')[0] + '/'
        size, data  = self.getfile(self.chm.home)

        if size > 0:
            if self.chm.home.endswith(('jpg','gif','bmp')):
                self.write(ofile, sz, data)
            else:
                soup = BeautifulSoup(data)
                imgs = soup.findAll('img')
                for img in imgs:
                    name = base + img.get("src","")
                    size, data = self.getfile(name)
                    if size > bestsize:
                        bestsize = size
                        bestname = name
                if bestname != None:
                    size, data = self.getfile(bestname)
                    if size > 0:
                        self.write(ofile, sz, data)
        self.chm.CloseCHM()

    def write(self, ofile, sz, data):
        fd = os.popen('convert - -resize %sx%s "%s"' % (sz, sz, ofile), "w")
        fd.write(data)
        fd.close()

    def getfile(self,name):
        (ret, ui) = self.chm.ResolveObject(name)
        if ret == 1:
            return (0, '')
        return self.chm.RetrieveObject(ui)

if len(sys.argv) > 3:
    chm = ChmThumbNailer()
    chm.thumbnail(sys.argv[1], sys.argv[2], sys.argv[3])



Nombra el script de la siguiente manera: chm-thumbnailer.py, guárdalo en algún lugar (por ejemplo, en un directorio bin en su directorio personal) y hacerlo ejecutable:

     chmod a+x chm-thumbnailer.py

Entonces tendrás que dejar que gnome sepa sobre este script: 
(Nota: El código siguiente supone que ha guardado la secuencia de comandos como: /home/minombre/bin/chm-thumbnailer.py, pero se deberá cambiar con la ubicación real del script).

gconftool --type=string --set "/desktop/gnome/thumbnailers/application@x-chm/command"  "/home/myname/bin/chm-thumbnailer.py %i %o %s"

gconftool --type=bool --set "/desktop/gnome/thumbnailers/application@x-chm/enable"  "true"

Eso es todo. Ahora sólo tiene que utilizar Nautilus para navegar hasta una carpeta con los archivos chm en ella y de miniaturas se generarán.


No hay comentarios:

Publicar un comentario