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) |
Partager