# -*- coding: iso-8859-1 -*- ''' '/* * PdfTablesToXmlCsvHtml.py * Convertir un fichier pdf de donnés en xml, html et csv. * Ne fonctionne efficacement qu'avec des pdf qui ont des tables de données correctes. * Le programme de correction ne devrait pas servir avec des bonnes tables de données. */ ''' import sys sys.path.append( "modules" ) import pdfplumber from _by_CharSupConsoleWrite import by_CharSupConsoleWrite # // Ecrire les caractères non ansi dans la console. from _by_dirbase import by_dirbase # // Renvoie le dossier par défaut avec ou sans << \ >> à la fin. from _by_ferase import by_ferase # // Détruire un fichier. from _by_getfile import by_getfile # // Sélectionner un fichier à ouvrir. from _by_msgbox import by_msgbox # // Boîte de dialogue avec options et valeur de retour. from _by_msgbox import MB_ICONERROR # // Une icône de signe d'arrêt rouge apparaît dans la boîte de message. from _by_msgbox import MB_ICONEXCLAMATION # // Une icône de point d'exclamation jaune apparaît dans la boîte de message. from _by_msgbox import MB_ICONQUESTION # // Une icône bleue de point d'interrogation apparaît dans la boîte de message. from _by_msgbox import MB_YESNO # // La boîte de message contient deux boutons-poussoirs : Oui et Non. from _by_msgbox import MB_NO # // Non. from _by_ShellExecute import by_ShellExecute # // Effectue une opération sur un fichier spécifié. from _by_StringPdfToAnsi import by_StringPdfToAnsi # // Remplacer des caractères venant d'un fichier pdf qui créent une erreur. from _by_StringToCsv import by_StringToCsv # // Transformation d'une chaîne pour fichier.csv. from _by_StringToHtml import by_StringToHtml # // Transformation d'une chaîne pour fichier.html. from _by_writeLine import by_writeLine # // Ecriture d'une ligne dans un fichier texte. #. // Paramètres. table_settings = { "vertical_strategy": "text", "horizontal_strategy": "text" } cFileXml = "_Result.xml" cFileCsv = "_Result.csv" cFileHtm = "_Result.html" cFileLog = "_Result.log" #. // Transformer les tables d'un fichier pdf de données en csv, html et xml. def PdfTablesToXmlCsvHtml(): by_ferase( "_Result1.log" ) #. // Fichier de'évènements de by_writeLog1(). by_ferase( cFileXml ) by_ferase( cFileCsv ) by_ferase( cFileHtm ) by_ferase( cFileLog ) cCharset = "iso-8859-1" cFilePdf = by_getfile( "Fichiers PDF\0*.pdf", "Sélectionnez un fichier pdf" ) if len( cFilePdf ) == 0: by_msgbox( "Pas de fichier sélectionné", "Erreur", MB_ICONERROR ) return 1 #. endif cCorrect = "Oui" if by_msgbox( "Correction des caractères supérieurs", "Correction", MB_YESNO + MB_ICONQUESTION ) == MB_NO: cCorrect = "Non" #. endif nError = 0 oDoc = pdfplumber.open( cFilePdf ) oPages = oDoc.pages oFileXml = open( cFileXml, "w" ) oFileCsv = open( cFileCsv, "w" ) oFileHtm = open( cFileHtm, "w" ) oFileLog = open( cFileLog, "w" ) by_writeLine( oFileLog, "Conversion d'un fichier pdf en xlm et csv.\n" ) by_writeLine( oFileLog, "Fichier source : " + cFilePdf ) by_writeLine( oFileLog, "Fichier xlm : " + by_dirbase() + cFileXml ) by_writeLine( oFileLog, "Fichier csv : " + by_dirbase() + cFileCsv ) by_writeLine( oFileLog, "Nombre page(s) : " + str( len( oPages ) ) + "\n" ) by_writeLine( oFileXml, '' ) by_writeLine( oFileXml, '' ) by_writeLine( oFileHtm, '' ) by_writeLine( oFileHtm, '' ) by_writeLine( oFileHtm, ' ' ) #. //by_writeLine( oFileHtm, ' ' ) by_writeLine( oFileHtm, ' ' ) by_writeLine( oFileHtm, ' ' ) by_writeLine( oFileHtm, ' ' ) by_writeLine( oFileHtm, ' ' ) by_writeLine( oFileHtm, ' ' ) by_writeLine( oFileHtm, ' ' ) print( "Nombre de pages : " + str( len( oPages ) ) ) i = 0 while True: oPage = oPages[ i ] print() by_writeLine( oFileLog, "Page numéro : " + str( oPage.page_number ) ) print( "Page numéro : " + str( oPage.page_number ) ) oTable = oPage.extract_table( table_settings ) if type( oTable ) is list: j = 0 while True: a = oTable[ j ] if len( a ) > 0: by_writeLine( oFileXml, ' ' ) by_writeLine( oFileHtm, ' ' ) #. endif k = 0 while True: cTag0 = "Column" + str( k + 1 ) cTag1 = " <" + cTag0 + ">" cTag2 = "" cString = a[ k ] if cCorrect == "Oui": cString = by_StringPdfToAnsi( cString ) by_CharSupConsoleWrite( cString ) #. endif try: by_writeLine( oFileXml, cTag1 + cString + cTag2 ) oFileCsv.write( by_StringToCsv( cString ) ) by_writeLine( oFileHtm, ' ' ) j = j + 1 if j == len( oTable ): break #. endif #. enddo else: print( "Pas de table dans cette page. ********" ) #. endif i = i + 1 if i == len( oPages ): break #. endif #. enddo oDoc.close() by_writeLine( oFileXml, '' ) by_writeLine( oFileHtm, '
' + by_StringToHtml( cString ) + '' ) except Exception: nError = nError + 1 by_writeLine( oFileXml, cTag1 + "***Error" + cTag2 ) oFileCsv.write( "***Error" ) by_writeLine( oFileHtm, ' ' + '***Error' + '' ) #. endtry oFileCsv.write( ";" ) k = k + 1 if k == len( a ): oFileCsv.write( "\n" ) break #. endif #. enddo by_writeLine( oFileXml, ' ' ) by_writeLine( oFileHtm, '
' ) by_writeLine( oFileHtm, ' ' ) by_writeLine( oFileHtm, '' ) oFileXml.close() oFileCsv.close() oFileHtm.close() oFileLog.close() if nError > 0: by_msgbox( "Erreur(s) trouvée(s) : " + str( nError ), "Erreur", MB_ICONEXCLAMATION ) else: by_msgbox( "Tansformations réalisées avec succès" ) #. endif by_ShellExecute( cFileXml ) return 0 PdfTablesToXmlCsvHtml() ''' Dernière modification : 2022-02-03 '''