IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

[PDFminer] conversion d'un pdf en html


Sujet :

Bibliothèques tierces Python

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut [PDFminer] conversion d'un pdf en html
    Bonjour,
    Dans le cadre de mon stage je dois parser du pdf pour le transformer en html.
    M'étant un peu perdue sur le forum en cherchant une réponse je me permets d'ouvrir ce topic.
    Ne pouvant pas installer le module pdf2text sur les pc du labo j'ai trouvé deux programmes possibles pour contourner l'obstacle mais je n'arrive pas à trouver les erreurs pour que cela fonctionne.
    le premier dont j'ai corrigé pas mal d'erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    #from Interfaces.IReader import IReader
    #import pdfminer
    from pdfminer.pdfparser import PDFParser, PDFDocument
    #from pdfminer.pdfdocument import PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter#, process_pdf
    #process_page est une fonction, peut-on l'importer sur la même ligne des classes
    # from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, process_page
    # from pdfminer.pdfinterp.PDFPageInterpreter import process_page
    from pdfminer.pdfdevice import PDFDevice, TagExtractor
    #from pdfminer.pdfpage import PDFPage
    from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
    from pdfminer.cmapdb import CMapDB
    from pdfminer.layout import LAParams
    import getopt
    import unicodedata, codecs
    from io import StringIO
     
    class PdfReader(object):
    	"""
            classe pour transformer les pdf en html à partir de pdfminer
     
            """
    	def __init___(self):
    		pass
     
    	def readText(self,path,outType='texte',opts={}):
    		"""
                    fonction de lecture du pdf et de transformation
                    $1: fichier d'entrée
                    $2: le type de sortie
                    $3 les options définies plus loin
                    """
    		#fichier de sortie = le fichier d'entrée - 3 derniers caractère + le type de sortie
    		"""
                    définir le fichier de sortie
                    1. découper la chaine de caractère
                    2. faire un retour arrière de 3 caractères
                    3.placer dans outFile
                    """
    		myfile=path.split('\n')[:3]
    		decoupOpen=[]
    		for car in myfile:
    			decoupOpen.append(car)
    		myOut=outType.split('\n')
    		decoupOut=[]
    		for term in myOut:
    			decoupOut.append(term)
    		newlist=decoupOpen+decoupOut
    		outFile = ''.join(newlist)
    		#outFile = path[:-3]+outType
    		#détermination du chemin d'accès au fichier de sortie
    		#ce qu'il y a avant le / accolé avant le nom du fichier de sortie
    		outdir = '/'.join(path.split('/')[:-1])
    		#debug option ?
    		debug = 0
    		#input option
    		password = ''
    		pagenos= set()
    		maxpages=0
    		#output option
    		#?outFile = None
    		#?outType = None
    		outdir = None
    		#layoutmode = 'normal'
    		codec = 'utf-8'
    		pageno = 1
    		scale = 1
    		showpageno = True
    		laparams = LAParams()
    		opts=[]
    		for (k,v) in opts:
    			#délimitation des arg pour choisir les options
    			#reprend le principe des lignes de commandes
    			# k = type d'option (outdir, outFile...)
    			# v = option choisie
    			if k == '-d': debug += 1
    			elif k == '-p': pagenos.update(int(x)-1 for x in v.split('.')) #on séparer v quand il y a un '.'
    			elif k == '-m': maxpages =int(v)#on détermine le nombre max de pages avec v transformer en chiffres
    			elif k == '-P': password = v #déterminantion d'un mot de passe
    			elif k == '-o': outFile = v #détermination du fichier de sortie
    			elif k == '-n': laparams = None
    			elif k == '-A': laparams.all_texts = True
    			elif k == '-V': laparams.detect_vertical = True
    			elif k == '-M': laparams.char_margin = float(v)
    			elif k == '-L': laparams.line_margin = float(v)
    			elif k == '-W': laparams.word_margin = float(v)
    			elif k == '-F': laparams.box_flow =float(v)
    			elif k == '-Y': layoutmode = v
    			elif k == '-O': outdir = v
    			elif k == '-t': outType = v
    			elif k == '-c': codec = v
    			elif k == '-s': scale = v
     
    		print (laparams)
     
    		#PDFDocument.debug = debug
    		#PDFParser.debug debug
    		CMapDB.debug = debug
    		PDFResourceManager.debug = debug
    		PDFPageInterpreter.debug = debug
    		PDFDevice.debug = debug
     
    		rsrcmgr = PDFResourceManager()
    		"""
                    ResourceManager facilitates reuse of shared resources
                    such as fonts and images 
                    """
    		#outType = 'text'
    		#traitemet du fichier de sortie par chaines de caractères
    		outFile = StringIO()
    		#lancement de la convertion en html
    		#device = HTMLConverter(rsrcmgr,outFile,codec=codec,laparams=laparams)
    		device = HTMLConverter(rsrcmgr,outFile,laparams=laparams)
     
    		filePath=open(path,'rb')
     
    		#PDFPageInterpreter.process_page(rsrcmgr,device,outFile, pagenos,maxpages=maxpages,password=password,check_extractable=True)
    		#PDFPageInterpreter.process_p(self,page=pagenos)
    		#process_pdf(rsrcmgr,device,outFile, pagenos,maxpages=maxpages,password=password,check_extractable=True)
    		interpreter.process_page(rsrcmgr,device,outFile, pagenos,maxpages=maxpages,password=password,check_extractable=True)
    		filePath.close()
    		device.close()		
    		print (outFile.getvalue())
    		outFile.close()
     
    		return
    #appel class		
    reader = PdfReader()
    #choix des option avec la fonction map
     
    #opt = map(None,['-W','-L','-t'], [0.5,0.4,'html'])
    opt = map(None,['-t'], ['html'])
    #reader.readText("07849985.html","07849985.pdf",opt)
    reader.readText("07849985.pdf","07849985.html",opt)

    Nom : erreurtracebock.png
Affichages : 1472
Taille : 105,9 Ko

    voici le deuxième code récupérer dans la doc pdf miner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    #! /usr/bin/env python3
    # -*- coding: utf-8 -*-
    import sys
    import os
    import re
    from pdfminer.pdfparser import PDFParser, PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.pdfdevice import PDFDevice
    from pdfminer.layout import LAParams
    from pdfminer.converter import PDFPageAggregator
     
     
     
    # Open a PDF file.
    fp = open('07849985.pdf', 'rb')
    # Create a PDF parser object associated with the file object.
    parser = PDFParser(fp)
    # Create a PDF document object that stores the document structure.
    doc = PDFDocument()
    # Connect the parser and document objects.
    parser.set_document(doc)
    doc.set_parser(parser)
    # Supply the password for initialization.
    # (If no password is set, give an empty string.)
    doc.initialize("")
    # Check if the document allows text extraction. If not, abort.
    if not doc.is_extractable:
    	raise PDFTextExtractionNotAllowed
    # Create a PDF resource manager object that stores shared resources.
    rsrcmgr = PDFResourceManager()
    # Create a PDF device object.
    device = PDFDevice(rsrcmgr)
    # Create a PDF interpreter object.
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    # Process each page contained in the document.
    for page in doc.get_pages():
    	interpreter.process_page(page)
     
        # Set parameters for analysis.
    laparams = LAParams()
    # Create a PDF page aggregator object.
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    for page in doc.get_pages():
    	interpreter.process_page(page)
    	# receive the LTPage object for the page.
    	layout = device.get_result()
    Nom : Capture du 2017-03-23 10-23-31.png
Affichages : 1413
Taille : 80,3 Ko

    Merci d'avance pour vos réponses.
    Pour le moment je peux faire la conversion via mon pc perso pour avancer sur le reste du programme mais ce n'est pas le but

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    J'ai pu avancer sur la première possibilité de programme mais j'ai des erreurs.
    a priori cela viendrai de la fonction process_page. J'ai fait plusieurs tests si quelqu'un a une idée???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    #! /usr/bin/env python3
    # -*- coding: utf-8 -*-
    import sys
    import os
    import re
    #os.chdir("/Users/v17verde/pdfminer3k-1.3.1/pdfminer")
    #sys.path.append("/Users/Verdenet/AppData/Local/Programs/Python/Python-36-32/Lib/site-packages/pdfminer.six-20151013-py3.6egg/pdfminer")#PCperso
    sys.path.append("homes/v17verde/pdfminer3k-1.3.1/pdfminer")
     
    #from Interfaces.IReader import IReader
    #import pdfminer
    from pdfminer.pdfparser import PDFParser, PDFDocument
    #from pdfminer.pdfdocument import PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter#, process_pdf
    #process_page est une fonction, peut-on l'importer sur la même ligne des classes
    # from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, process_page
    # from pdfminer.pdfinterp.PDFPageInterpreter import process_page
    from pdfminer.pdfdevice import PDFDevice, TagExtractor
    #from pdfminer.pdfpage import PDFPage
    from pdfminer.converter import PDFPageAggregator, XMLConverter, HTMLConverter, TextConverter
    from pdfminer.cmapdb import CMapDB
    from pdfminer.layout import LAParams
    import getopt
    import unicodedata, codecs
    from io import StringIO
     
    class PdfReader(object):
    	"""
            classe pour transformer les pdf en html à partir de pdfminer
     
            """
    	def __init___(self):
    		pass
     
    	def readText(self,path,outType='texte',opts={}):
    		"""
                    fonction de lecture du pdf et de transformation
                    $1: fichier d'entrée
                    $2: le type de sortie
                    $3 les options définies plus loin
                    """
    		#fichier de sortie = le fichier d'entrée - 3 derniers caractère + le type de sortie
    		"""
                    définir le fichier de sortie
                    1. découper la chaine de caractère
                    2. faire un retour arrière de 3 caractères
                    3.placer dans outFile
                    """
    		myfile=path.split('\n')[:3]
    		decoupOpen=[]
    		for car in myfile:
    			decoupOpen.append(car)
    		myOut=outType.split('\n')
    		decoupOut=[]
    		for term in myOut:
    			decoupOut.append(term)
    		newlist=decoupOpen+decoupOut
    		outFile = ''.join(newlist)
    		#outFile = path[:-3]+outType
    		#détermination du chemin d'accès au fichier de sortie
    		#ce qu'il y a avant le / accolé avant le nom du fichier de sortie
    		outdir = '/'.join(path.split('/')[:-1])
    		#debug option ?
    		debug = 0
    		#input option
    		password = ''
    		pagenos= set()
    		maxpages=0
    		#output option
    		#?outFile = None
    		#?outType = None
    		outdir = None
    		#layoutmode = 'normal'
    		codec = 'utf-8'
    		pageno = 1
    		scale = 1
    		showpageno = True
    		laparams = LAParams()
    		opts=[ ]
    		for (k,v) in opts:
    			#délimitation des arg pour choisir les options
    			#reprend le principe des lignes de commandes
    			# k = type d'option (outdir, outFile...)
    			# v = option choisie
    			if k == '-d': debug += 1
    			elif k == '-p': pagenos.update(int(x)-1 for x in v.split('.')) #on séparer v quand il y a un '.'
    			elif k == '-m': maxpages =int(v)#on détermine le nombre max de pages avec v transformer en chiffres
    			elif k == '-P': password = v #déterminantion d'un mot de passe
    			elif k == '-o': outFile = v #détermination du fichier de sortie
    			elif k == '-n': laparams = None
    			elif k == '-A': laparams.all_texts = True
    			elif k == '-V': laparams.detect_vertical = True
    			elif k == '-M': laparams.char_margin = float(v)
    			elif k == '-L': laparams.line_margin = float(v)
    			elif k == '-W': laparams.word_margin = float(v)
    			elif k == '-F': laparams.box_flow =float(v)
    			elif k == '-Y': layoutmode = v
    			elif k == '-O': outdir = v
    			elif k == '-t': outType = v
    			elif k == '-c': codec = v
    			elif k == '-s': scale = v
     
    		print (laparams)
     
    		#PDFDocument.debug = debug
    		#PDFParser.debug debug
    		CMapDB.debug = debug
    		PDFResourceManager.debug = debug
    		PDFPageInterpreter.debug = debug
    		PDFDevice.debug = debug
     
    		rsrcmgr = PDFResourceManager()
    		"""
                    ResourceManager facilitates reuse of shared resources
                    such as fonts and images 
                    """
    		#outType = 'text'
    		#traitemet du fichier de sortie par chaines de caractères
    		outFile = StringIO()
    		#lancement de la convertion en html
    		#device = HTMLConverter(rsrcmgr,outFile,codec=codec,laparams=laparams)
    		device = HTMLConverter(rsrcmgr,outFile,laparams=laparams)
     
    		filePath=open(path,'rb')
     
    		#PDFPageInterpreter.process_page(self,page=pagenos)
    		#process_pdf(rsrcmgr,device,outFile, pagenos,maxpages=maxpages,password=password,check_extractable=True)
    		#PDFPageInterpreter.process_page(rsrcmgr,device,outFile, pagenos,maxpages=maxpages,password=password,check_extractable=True)
    		filePath.close()
    		PDFPageInterpreter.process_page(device,outFile)
    		device.close()		
    		print (outFile.getvalue())
    		outFile.close()
     
    		return
    #appel class		
    reader = PdfReader()
    #choix des option avec la fonction map
     
    #opt = map(None,['-W','-L','-t'], [0.5,0.4,'html'])
    opt = map(None,['-t'], ['html'])
    #reader.readText("07849985.html","07849985.pdf",opt)
    reader.readText("07849985.pdf","07849985.html",opt)
    les messages d'erreur
    Nom : error_processpage1.png
Affichages : 1437
Taille : 224,1 Ko
    Nom : error_processpage2.png
Affichages : 1419
Taille : 230,6 Ko
    Nom : laparam2arg.png
Affichages : 1466
Taille : 370,8 Ko

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Bonjour,
    je reviens par ici avec une progression de mon code. Mais j'ai à nouveau des erreurs.
    Voici
    le code modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    #! /usr/bin/env python3
    # -*- coding: utf-8 -*-
    import sys
    import os
    import re
    #os.chdir("homes/v17verde/pdfminer3k-1.3.1/pdfminer")
    #sys.path.append("/Users/Verdenet/AppData/Local/Programs/Python/Python-36-32/Lib/site-packages/pdfminer.six-20151013-py3.6egg/pdfminer")#PCperso
    #sys.path.append("/Users/Verdenet/AppData/Local/Programs/Python/Python-36-32/Lib/site-packages/pdfminer.six-20151013-py3.6egg/pdfminer")#PCperso
    # sys.path.insert(0,"homes/v17verde/pdfminer3k-1.3.1/pdfminer")
    sys.path.insert(0,"/Users/Verdenet/AppData/Local/Programs/Python/Python-36-32/Lib/site-packages/pdfminer.six-20151013-py3.6egg/pdfminer")
     
    #from Interfaces.IReader import IReader
    #import pdfminer
    from pdfminer.pdfparser import PDFParser#, PDFDocument
    from pdfminer.pdfdocument import PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter#, process_page
    #process_page est une fonction, peut-on l'importer sur la même ligne des classes
    # from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, process_page
    # from pdfminer.pdfinterp.PDFPageInterpreter import process_page
    from pdfminer.pdfdevice import PDFDevice, TagExtractor
    #from pdfminer.pdfpage import PDFPage
    from pdfminer.converter import PDFPageAggregator, XMLConverter, HTMLConverter, TextConverter
    from pdfminer.cmapdb import CMapDB
    from pdfminer.layout import LAParams
    import getopt
    import six
    from io import StringIO
     
    class PdfReader(object):
    	"""
            classe pour transformer les pdf en html à partir de pdfminer
     
            """
    	def __init___(self):
    		pass
     
    	def readText(self,path,outType='texte',opts={}):
    		"""
                    fonction de lecture du pdf et de transformation
                    $1: fichier d'entrée
                    $2: le type de sortie
                    $3 les options définies plus loin
                    """
    		#fichier de sortie = le fichier d'entrée - 3 derniers caractère + le type de sortie
    		"""
                    définir le fichier de sortie
                    1. découper la chaine de caractère
                    2. faire un retour arrière de 3 caractères
                    3.placer dans outFile
                    """
    		myfile=path.split('\n')[:3]
    		decoupOpen=[]
    		for car in myfile:
    			decoupOpen.append(car)
    		myOut=outType.split('\n')
    		decoupOut=[]
    		for term in myOut:
    			decoupOut.append(term)
    		newlist=decoupOpen+decoupOut
    		mynewFile = ''.join(newlist)
    		outFile = str(mynewFile)
    		#outFile = path[:-3]+outType
    		#détermination du chemin d'accès au fichier de sortie
    		#ce qu'il y a avant le / accolé avant le nom du fichier de sortie
    		outDoc = '/'.join(path.split('/')[:-1])
    		outdir = str(outDoc)
    		#debug option ?
    		debug = 0
    		#input option
    		password = ''
    		pagenos= set()
    		maxpages=0
    		#output option
    		#?outFile = None
    		#?outType = None
    		outdir = None
    		#layoutmode = 'normal'
    		codec = 'utf-8'
    		pageno = 1
    		scale = 1
    		showpageno = True
    		laparams = LAParams()
    		opts=[ ]
    		for (k,v) in opts:
    			#délimitation des arg pour choisir les options
    			#reprend le principe des lignes de commandes
    			# k = type d'option (outdir, outFile...)
    			# v = option choisie
    			if k == '-d': debug += 1
    			elif k == '-p': pagenos.update(int(x)-1 for x in v.split('.')) #on séparer v quand il y a un '.'
    			elif k == '-m': maxpages =int(v)#on détermine le nombre max de pages avec v transformer en chiffres
    			elif k == '-P': password = v #déterminantion d'un mot de passe
    			elif k == '-o': outFile = v #détermination du fichier de sortie
    			elif k == '-n': laparams = None
    			elif k == '-A': laparams.all_texts = True
    			elif k == '-V': laparams.detect_vertical = True
    			elif k == '-M': laparams.char_margin = float(v)
    			elif k == '-L': laparams.line_margin = float(v)
    			elif k == '-W': laparams.word_margin = float(v)
    			elif k == '-F': laparams.box_flow =float(v)
    			elif k == '-Y': layoutmode = v
    			elif k == '-O': outdir = v
    			elif k == '-t': outType = v
    			elif k == '-c': codec = v
    			elif k == '-s': scale = v
     
    		print (laparams)
     
    		#PDFDocument.debug = debug
    		#PDFParser.debug debug
    		CMapDB.debug = debug
    		PDFResourceManager.debug = debug
    		PDFPageInterpreter.debug = debug
    		PDFDevice.debug = debug
     
    		rsrcmgr = PDFResourceManager()
    		"""
                    ResourceManager facilitates reuse of shared resources
                    such as fonts and images 
                    """
    		#outType = 'text'
    		#traitemet du fichier de sortie par chaines de caractères
    		outFile = StringIO()
    		#lancement de la convertion en html
    		device = HTMLConverter(rsrcmgr,outFile.getvalue(),codec=codec,laparams=laparams)
    		# device = HTMLConverter(rsrcmgr,outFile,laparams=laparams)
     
    		filePath=open(path,'rb')
     
    		#PDFPageInterpreter.process_page(self,page=pagenos)
    		#process_pdf(rsrcmgr,device,outFile, pagenos,maxpages=maxpages,password=password,check_extractable=True)
    		#PDFPageInterpreter.process_page(rsrcmgr,device,outFile, pagenos,maxpages=maxpages,password=password,check_extractable=True)
    		filePath.close()
    		PDFPageInterpreter.process_page(device,outFile)
    		#PDFPageInterpreter.process_page(outFile)
    		#device.close()		
    		print (outFile.getvalue())
    		outFile.close()
     
    		return
    #appel class		
    reader = PdfReader()
    #choix des option avec la fonction map
     
    #opt = map(None,['-W','-L','-t'], [0.5,0.4,'html'])
    opt = map(None,['-t'], ['html'])
    #reader.readText("07849985.html","07849985.pdf",opt)
    reader.readText("07849985.pdf","07849985.html",opt)
    le message d'erreur
    Nom : encodagepdf2html.JPG
Affichages : 1382
Taille : 88,3 Ko

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Enlève le getvalue(), il te sert après pour récupérer le contenu de stringIO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		device = HTMLConverter(rsrcmgr, outFile ,codec=codec, laparams=laparams)

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Enlève le getvalue(), il te sert après pour récupérer le contenu de stringIO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		device = HTMLConverter(rsrcmgr, outFile ,codec=codec, laparams=laparams)
    Hello merci pour ta réponse le problème c'est que j'ai un autre souci quand je l'enlève
    Voici
    Nom : erreutebytstr.JPG
Affichages : 1342
Taille : 108,5 Ko

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Peut-être que le fichier d'entrée est lu en mode binaire (avec l'argument 'rb').

    Mais je ne vois nulle part dans ton code où est ouvert le fichier d'entrée.

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Peut-être que le fichier d'entrée est lu en mode binaire (avec l'argument 'rb').

    Mais je ne vois nulle part dans ton code où est ouvert le fichier d'entrée.

    en fait il est posé après.
    J'ai essaye de le mettre en premier mais sans succès
    voici le code que j'ai récupérer sur un site:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #! /usr/bin/env python3
    # -*- coding: utf-8 -*-
    import sys
    import io
    import getopt
     
    from pdfminer.pdfinterp import PDFResourceManager, process_pdf
    from pdfminer.pdfdevice import TagExtractor
    from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
    from pdfminer.layout import LAParams
    from pdfminer.utils import set_debug_logging
     
    def main(argv):
        def usage():
            print(('usage: %s [-d] [-p pagenos] [-m maxpages] [-P password] [-o output] [-C] '
                   '[-n] [-A] [-V] [-M char_margin] [-L line_margin] [-W word_margin] [-F boxes_flow] '
                   '[-Y layout_mode] [-O output_dir] [-t text|html|xml|tag] [-c codec] [-s scale] file ...' % argv[0]))
            return 100
        try:
            (opts, args) = getopt.getopt(argv[1:], 'dp:m:P:o:CnAVM:L:W:F:Y:O:t:c:s:')
        except getopt.GetoptError:
            return usage()
        if not args: return usage()
        debug = False
        # input option
        password = ''
        pagenos = set()
        maxpages = 0
        # output option
        outfile = None
        outtype = None
        outdir = None
        layoutmode = 'normal'
        codec = 'utf-8'
        pageno = 1
        scale = 1
        caching = True
        showpageno = True
        laparams = LAParams()
        for (k, v) in opts:
            if k == '-d': debug = True
            elif k == '-p': pagenos.update( int(x)-1 for x in v.split(',') )
            elif k == '-m': maxpages = int(v)
            elif k == '-P': password = v
            elif k == '-o': outfile = v
            elif k == '-C': caching = False
            elif k == '-n': laparams = None
            elif k == '-A': laparams.all_texts = True
            elif k == '-V': laparams.detect_vertical = True
            elif k == '-M': laparams.char_margin = float(v)
            elif k == '-L': laparams.line_margin = float(v)
            elif k == '-W': laparams.word_margin = float(v)
            elif k == '-F': laparams.boxes_flow = float(v)
            elif k == '-Y': layoutmode = v
            elif k == '-O': outdir = v
            elif k == '-t': outtype = v
            elif k == '-c': codec = v
            elif k == '-s': scale = float(v)
     
        if debug:
            set_debug_logging()
        rsrcmgr = PDFResourceManager(caching=caching)
        if not outtype:
            outtype = 'text'
            if outfile:
                if outfile.endswith('.htm') or outfile.endswith('.html'):
                    outtype = 'html'
                elif outfile.endswith('.xml'):
                    outtype = 'xml'
                elif outfile.endswith('.tag'):
                    outtype = 'tag'
        if outfile:
            outfp = io.open(outfile, 'wt', encoding=codec, errors='ignore')
            close_outfp = True
        else:
            outfp = sys.stdout
            close_outfp = False
        if outtype == 'text':
            device = TextConverter(rsrcmgr, outfp, laparams=laparams)
        elif outtype == 'xml':
            device = XMLConverter(rsrcmgr, outfp, laparams=laparams, outdir=outdir)
        elif outtype == 'html':
            device = HTMLConverter(rsrcmgr, outfp, scale=scale, layoutmode=layoutmode,
                laparams=laparams, outdir=outdir, debug=debug)
        elif outtype == 'tag':
            device = TagExtractor(rsrcmgr, outfp)
        else:
            return usage()
        for fname in args:
            fp = io.open(fname, 'rb')
            process_pdf(rsrcmgr, device, fp, pagenos, maxpages=maxpages, password=password,
                        caching=caching, check_extractable=True)
            fp.close()
        device.close()
        if close_outfp:
            outfp.close()
     
    if __name__ == '__main__':
        sys.exit(main(sys.argv))
     
     
    #opt = map(None,['-W','-L','-t'], [0.5,0.4,'html'])
    opts = map(None,['-o', '-t'], ["07849985.html", 'html'])
    #reader.readText("07849985.html","07849985.pdf",opt)
    #reader = main("07849985.pdf","07849985.html",opt)
     
    reader = main(opts, "07849985.pdf")
    et ma nouvelle erreur:
    Nom : erreur got str.png
Affichages : 1379
Taille : 84,0 Ko

    et celle-ci si je tape python3 dans l'invite de commande
    Nom : avpython3.png
Affichages : 1574
Taille : 338,6 Ko

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 697
    Par défaut
    Citation Envoyé par voyageusedesmots Voir le message
    voici le code que j'ai récupérer sur un site:
    Ces erreurs suggèrent que ces codes ont été écrits pour Python2 (et une version peut être ancienne de PDFMiner)...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Bonsoir,
    Effectivement j'ai plusieurs versions de pdfminer.
    Ayant commencé avec python3 j'ai un peu du mal à me mettre au 2.7 (je vais devoir l'installer sur on pc) et selon le pc que j'utilise (le mien (et linux ou window) ou celui du labo) je n'ai pas la même version de pdfminer.
    Y a t-i moyen de l'adapter pour que cela fonctionne? Au labo je ne peux malheureusement pas utiliser l'invite de commandes Cequi serait plus simple puisque pour convertir massivement mes pdf vers du html je pourrais faire un script bash

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 697
    Par défaut
    Citation Envoyé par voyageusedesmots Voir le message
    Y a t-i moyen de l'adapter pour que cela fonctionne?
    Plutôt que d'adapter, çà serait déjà mieux d'utiliser la même version partout... Et si vous ne pouvez rien installer sur le PC du labo. vous savez quelles versions vous pouvez/devez utiliser.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Plutôt que d'adapter, çà serait déjà mieux d'utiliser la même version partout... Et si vous ne pouvez rien installer sur le PC du labo. vous savez quelles versions vous pouvez/devez utiliser.

    - W
    le labo a la version 2.7 de python. la version de pdfminer qui est partiellement installée est celle-ci pdfminer3k-0.0.0-py2.7 et j'ai également ce module de pdfminer sur la machine: pdfminer3k-1.3.1 que je peux utiliser avec la cd export PYTHONPATH... (manip obligatoire pour pouvoir utiliser pdfminer de toute façon)
    sous mon windows personnel j'ai celle avec le module six.
    Ce qui m'embête c'est que je n'arrive pas à trouver quelle version de pdfminer est utilisée sur le script récupéré. Avez-vous une astuce? Comme ça effectivement je récupère la bonne version du module et ce sera plus simple.

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 697
    Par défaut
    Citation Envoyé par voyageusedesmots Voir le message
    Avez-vous une astuce? Comme ça effectivement je récupère la bonne version du module et ce sera plus simple.
    Il faut lire les discussions du site où vous avez récupéré çà. Ils mentionnent des dates/versions de PDFMiner que vous pourriez peut être exploiter... mais je ne fais pas dans l'archéologie, désolé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Conversion PDF en HTML
    Par kiki29 dans le forum Contribuez
    Réponses: 0
    Dernier message: 09/03/2017, 14h40
  2. [Débutant] Conversion doc/docx/pdf to HTML
    Par eldiable2005 dans le forum C#
    Réponses: 4
    Dernier message: 24/05/2012, 13h43
  3. [PDFLib] Conversion PDF vers HTML
    Par soccersoft dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 14/07/2007, 13h05
  4. [string->HTML] Conversion d'une chaine en HTML
    Par salome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 24/07/2005, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo