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 : 1479
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 : 1420
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