Logo

Recherche Full-Texte ss windows ds Documents Xls, Ppt, et Pdf

Last modified: 03/22/2006 10:25 PM
Mise en place de la recherche full-texte, sous Windows, dans fichiers attachés au format : Xls, Ppt, et Pdf.

VERSIONS PRESENTES


* Zope : unreleased version, python 2.3.4, win32
* Python : Version 2.3.4 (#53, May 25 2004, 21:17:02)
* CPS : 3.2.4-1
* Windows : XP
* Word / Excel / PowerPoint : 2000
* Acrobat Reader : 6.0

1°) Principe

Le principe utilisé est issu de diverses consultations (parfois très tardives) sur les forums, et grâce à l'aide de certains internautes dont Hervé PATRICK, et surtout de HeudUser JesaisPo, que je remercie chaleureusement, et sans qui je n'aurais jamais eu l'idée d'aller "gratter" dans les scripts.
Le principe retenu est-il bon ? Incomplet ? Je ne sais pas, quoiqu'il en soit il fonctionne.

Il faut dans un premier temps, récupérer les outils externes necessaires et les installer (Plugs-in et Binairies), puis adapter les scripts Python afin qu'ils prennent en compte à la fois l'environnement Windows et les outils externes.

La démarche est la même pour les xls, ppt, et pdf. Seuls les documents au format word, sont traités differemment (voire l'autre doc à ce sujet).
 

2°) Plugs-in et Binairies nécessaires


Pour traiter les Xls/Ppt il faut récupérer le plug-in : Xlhtml
Pour traiter les Pdf (en Html), il faut récupérer le plug-in : PdftoHtml
Pour traiter les Pdf (en Txt), il faut récupérer le plug-in : XPdf

XlHtml

Pour en savoir plus sur ce Plug-in, connectez-vous à http://chicago.sourceforge.net/xlhtml/


Pour l'installer, sélectionner la Binary pour Windows à

http://chicago.sourceforge.net/xlhtml/binarys.html

Le f
ichier d’installation à récupérer est xlHtml-Win32-040.zip. Installer-le sur votre machine. (L'emplacement importe peu).

PdfToHtml

Pour en savoir plus sur ce Plug-in, connectez-vous à http://pdftohtml.sourceforge.net/
Pour l'installer (window binary) lconnectez-vous à http://sourceforge.net/projects/pdftohtml/

Le fichier d'installation à télécharger est : pdftohtml-0.36-win32.zip. Installer-le sur votre machine. (L'emplacement importe peu).
Lisez le fichier Readme.


XPdf

XPdf est un visualiseur de fichiers PDF en Txt.

Pour en savoir plus, connectez-vous à http://www.foolabs.com

Pour l'installer connectez-vous à http://www.foolabs.com/xpdf/download.html

Le fichier d'installation à récupérer est : xpdf-3.00pl3-win32.Zip

Repérez les Binairies installées

Une fois ces installations effectuées, repérez les binairies et notez leurs adresses :

  • Pour Xpdf : recherchez XPdf .exe
  • Pour Xlhtml : recherchez Xlhtml.exe (Xls en Html) et Ppthtml.exe (Ppt en Html)
  • Pour PdfToHtml : recherchez PdttoHtml.exe


A titre d'exemple voici les adresses obtenues sur mon poste une fois l'installation effectuée :

  • Pour Xpdf: "C:\CPS3.2.4-1_Pluggins\Xpdf\xpdf-3.00pl3-win32"
  • Pour Xlhtml : "C:\CPS3.2.4-1_Pluggins \xlhtml \xlHtml-Win32-040"
  • Pour PdftoHtml : "C:\CPS3.2.4-1_Pluggins\pdftohtml\pdftohtml-0.36-win32\pdftohtml-0.36"


Et maintenant, modifions les scripts !



3°) Modification des scripts


Modifier les scripts, c'est les adapter à Windows (ce qui n'est pas fait une fois CPS installé), et leur donner l'adresse des binaries récupérees et installées.

Les scripts que j'ai modifié sont les suivants :

  • ppt_to_html.py (binary ppttohtml.exe)
  • xls_to_html.py (binary xlhtml.exe)
  • pdf_to_html.py (binary pdftohtml.exe)
  • pdf_to_text.py (binary pdftotext.exe)

Ils se trouvent pour ce qui me concerne, dans le répertoire :
"C:\CPS3.2.4-1\Data\Products\PortalTransforms"


Première modification

Elle consiste à rechercher dans ces 4 scripts, le mot-clé binaryName et remplacer le texte qui suit, par les nouvelles adresses des binaries (adresses que vous venez de noter précédemment)

Attention ! les "/" deviennent des "\\"

Ainsi voici pour ce qui me concerne les modifications effectuées dans les 4 scripts :


  • ppt_to_html.py

    #Modify by MPN 2005-5-31
    #binaryName = "ppthtml"
    binaryName = "C:\\CPS3.2.4-1_Pluggins\\xlhtml\\xlHtml-Win32-040\\ppthtml.exe"


  • xls_to_html.py

    #Modify by MPN 2005-5-31
    #binaryName = "xlhtml"
    binaryName = "C:\\CPS3.2.4-1_Pluggins\\xlhtml\\xlHtml-Win32-040\\xlhtml.exe"


  • pdf_to_html.py

    #Modify by MPN 2005-5-31
    #binaryName = "pdftohtml"
    binaryName = "C:\\CPS3.2.4-1_Pluggins\\pdftohtml\\pdftohtml-0.36-win32\\pdftohtml-0.36pdftohtml\\pdftohtml.exe"
  

  • pdf_to_text.py

    #Modify by MPN 2005-5-31
    #binaryName = "pdftotext"
    binaryName = "C:\\CPS3.2.4-1_Pluggins\\Xpdf\\xpdf-3.00pl3-win32\\pdftotext.exe"


Deuxième modification


Elle consiste à rechercher le message suivant : "FIXME: windows users..." et à adapter le script qui suit à Windows.
Personnellement je me suis fais aidé par une personne familière de Python qui se reconnaitra (merci à CGD). Mais vous pouvez récupérer ses bouts de code tels quels, ils fonctionnent :

Attention ! les "/" deviennent des "\\"

Note : le PPt_to_html.py et le Xls_to_html.py ont été modifiés le 10/6/2005, suite aux remarques d'un internaute (qui se reconnaitra également).


  • ppt_to_html.py

    def invokeCommand(self, tmpdir, fullname):
        # FIXME: windows users...
        # FIXME: character encoding
        #basename = sansext(fullname)
        #cmd = 'cd "%s" && %s %s "%s" 1> "%s.html" 2>error_log' % (
        #    tmpdir, self.binary, self.binaryArgs, fullname, basename)
        #os.system(cmd)
        #try:
        #    htmlfile = open("%s/%s.html" % (tmpdir, basename), 'r')
        #    html = htmlfile.read()
        #    htmlfile.close()
        #    # Remove filename inserted by ppthtml
        #    html = re.sub("<TITLE>(.*?)</TITLE>", "", html)
        # XXX: qualify this except !
        #except:
        #    try:
        #        return open("%s/error_log" % tmpdir, 'r').read()
        #    except:
        #        return ''
        #return html
        # --------------------
        # Modify by CGD/MPN 2005-5-31
        # Modify by CGD 2005-6-10
        basename = sansext(fullname)
        cmd = '%s %s %s > %s\\%s.html' % (self.binary, self.binaryArgs, fullname,         tmpdir, basename)
        os.system(cmd)
        try:
            htmlfile = open("%s\\%s.html" % (tmpdir, basename))
            html = htmlfile.read()
            htmlfile.close()
            # Remove filename inserted by ppthtml
            html = re.sub("<TITLE>(.*?)</TITLE>", "", html)
        # XXX: qualify this except !
        except:
            try:
                return open("%s\\error_log" % tmpdir, 'r').read()
            except:
                return ''
        return html
        # --------------------



  • xls_to_html.py

     def invokeCommand(self, tmpdir, fullname):
 
       # FIXME: windows users...
        #basename = sansext(fullname)
        #cmd = 'cd "%s" && %s %s "%s" 1> "%s.html" 2>error_log' % (
        #    tmpdir, self.binary, self.binaryArgs, fullname, basename)
        #system(cmd)
        #try:
        #    htmlfile = open("%s/%s.html" % (tmpdir, basename), 'r')
        #    html = htmlfile.read()
        #    htmlfile.close()
        #except:
        #    try:
        #        return open("%s/error_log" % tmpdir, 'r').read()
        #    except:
        #        return ''
        #return html
        # --------------------
         # Modify by MPN/CGD 2005-5-31
        # Modify by CGD 2005-6-10
        basename = sansext(fullname)
        cmd = '%s %s %s > %s\\%s.html' % (self.binary, self.binaryArgs, fullname,    tmpdir, basename)
        system(cmd)
        try:
            htmlfile = open("%s\\%s.html" % (tmpdir, basename))
            html = htmlfile.read()
            htmlfile.close()
        except:
            try:
                return open("%s\\error_log" % tmpdir, 'r').read()
            except:
                return ''
        return html
        # --------------------

  • pdf_to_html.py

    def invokeCommand(self, tmpdir, fullname):
        # FIXME: windows users...
    # Adapatation à Windows by CGD/MPN 2005-5-31
        #cmd = 'cd "%s" && %s %s "%s" 2>error_log 1>/dev/null' % (
        #    tmpdir, self.binary, self.binaryArgs, fullname)
        #system(cmd)
        #try:
        #    htmlfile = open("%s/%s.html" % (tmpdir, sansext(fullname)), 'r')
        #    html = htmlfile.read()
        #    htmlfile.close()
        #except:
        #    try:
        #        return open("%s/error_log" % tmpdir, 'r').read()
        #    except:
        #        return ''
        #return html
        cmd = '%s %s %s' % (self.binary, self.binaryArgs, fullname)
        system(cmd)
        try:
            htmlfile = "%s\\%s.html" % (tmpdir, sansext(fullname))
            html = open(htmlfile).read()
            htmlfile.close()
        except:
            try:
                return open("%s\\error_log" % tmpdir, 'r').read()
            except:
                return ''
        return html


  • pdf_to_text.py

    def invokeCommand(self, tmpdir, fullname):
        # FIXME: windows users...
        # Adapatation à Windows by
CGD/MPN 2005-5-31
        #textfile = "%s/%s.txt" % (tmpdir, sansext(fullname))
        #cmd = 'cd "%s" && %s "%s" "%s" 2>error_log 1>/dev/null' % (
        #    tmpdir, self.binary, fullname, textfile)
        #system(cmd)
        #try:
        #    text = open(textfile).read()
        #except:
        #    try:
        #        return open("%s/error_log" % tmpdir, 'r').read()
        #    except:
        #        return ''
        #return text
        textfile = "%s\\%s.txt" % (tmpdir, sansext(fullname))
        cmd = '%s %s %s' % (self.binary, fullname, textfile)
        system(cmd)
        try:
            text = open(textfile).read()
        except:
            try:
                return open("%s\\error_log" % tmpdir, 'r').read()
            except:
                return ''
        return text


Procédons maintenant à l'installation définitive via la ZMI.


preview2.PNG

4°) Mise en Place définitive


Destruction du "Portal_Transforms" existant


Utiliser la ZMI (cochez-le puis delete)

Regénération du nouveau "Portal_Transforms"


Utiliser la ZMI.
Clickez sur "Portal_transforms_installer" et sur l'onglet "Test".
Contrôler le "Portal_Transforms" : il devrait cette fois porter les lignes suivantes  :

"pdf_to_html"
"xls_to_html"
"ppt_to_html"
"ppt_to_text"

Cas des documents créés

Si vous avez créé votre document dans "Portal_Types", vérifiez bien que :
  • la pièce jointe déclarée dans "Portal_Schemas" porte bien la coche "Indexed by searchable Text"
  • la pièce jointe dans "Portal_layout" porte bien dans le champ "Allowed file suffixes" les formats souhaités :  ".Pdf .Xls .Ppt .Txt"


Tests (contrôle du Preview)


Créer ou utiliser un document avec possibilité de joindre un fichier attaché.
Indiquer l'adresse de votre document au format souhaité, et chargez-le.
Enregistrer le document.
Contrôler que votre document porte bien le "Preview" (Prévisualisation) comme dans l'image ci-dessus.
Ci c'est le cas votre recherche va fonctionner : vérifiez par l'option "Recherche" que vous trouvez bien un mot contenu dans votre document (que vous aurez préalablement recherché "of course").

Bon courage.

N'hésitez pas à me laisser vos commentaires et retours d'expérience.

This site is powered by CPS, which includes CPSSkins. CPS and its design are Copyright © 2002-2006 Nuxeo SAS.
CPSSkins is Copyright © 2003-2006 Jean-Marc Orliaguet.
powered_by_nuxeo.png