Exemple #1
0
def main(argv):
    for arg in argv[1:]:
        fd = open(arg)
        parser = PDFParser(fd)
        document = PDFDocument(parser)
        if not document.is_extractable:
            print "Document not extractable."
            return 1

        params = LAParams(char_margin=1)
        resMan = PDFResourceManager(caching=True)
        device = PDFPageAggregator(resMan, laparams=params)
        interpreter = PDFPageInterpreter(resMan, device)
        parser = x86ManParser("html", params)

        i = 1
        for page in PDFPage.get_pages(fd,
                                      set(),
                                      caching=True,
                                      check_extractable=True):
            print "Processing page %i" % i
            interpreter.process_page(page)
            page = device.get_result()
            parser.process_page(page)
            i += 1
        parser.flush()
        fd.close()

        print "Conversion result: %i/%i" % (parser.success,
                                            parser.success + parser.fail)

        with open("opcodes.json", "wb") as fd:
            fd.write(parser.output_opcodes_json())
Exemple #2
0
def main(argv):
	for arg in argv[1:]:
		fd = open(arg)
		parser = PDFParser(fd)
		document = PDFDocument(parser)
		if not document.is_extractable:
			print "Document not extractable."
			return 1
	
		params = LAParams(char_margin=1)
		resMan = PDFResourceManager(caching=True)
		device = PDFPageAggregator(resMan, laparams=params)
		interpreter = PDFPageInterpreter(resMan, device)
		parser = x86ManParser("html", params)
	
		i = 1
		for page in PDFPage.get_pages(fd, set(), caching=True, check_extractable=True):
			print "Processing page %i" % i
			interpreter.process_page(page)
			page = device.get_result()
			parser.process_page(page)
			i += 1
		parser.flush()
		fd.close()
	
		print "Conversion result: %i/%i" % (parser.success, parser.success + parser.fail)
Exemple #3
0
def main(argv):
	for arg in argv[1:]:
		fd = open(arg, 'rb')
		parser = PDFParser(fd)
		document = PDFDocument(parser)
		if not document.is_extractable:
			print("Document not extractable.")
			return 1
	
		params = LAParams(char_margin=1)
		resMan = PDFResourceManager(caching=True)
		device = PDFPageAggregator(resMan, laparams=params)
		interpreter = PDFPageInterpreter(resMan, device)
		parser = x86ManParser("html", params)
	
		i = 1
		for page in PDFPage.get_pages(fd, set(), caching=True, check_extractable=True):
			print("Processing page %i" % i)
			interpreter.process_page(page)
			page = device.get_result()
			parser.process_page(page)
			i += 1
		parser.flush()
		fd.close()

		# RG: We get the parse in just one file: html/AAA.html
		# Looks like the original repo does not create all the separate pages for all the
		# instructions nor the index.html
		# Dus gewoon een grote parse in een file met als filename de eerste instructie.
		# En later heeft ie de losse pagina's daar dan weer uit gehaald door te zoeken op <h3>
		# en de closing tags toe te voegen.
		# En zo ook een index.html gemaakt en zelf een style.css erbij.		
		# NOTE_: we are getting 3 sorts of Description: <p>, <table> and <svg>
		# Op zijn website is het alleen <p> dus hij heeft zeker nog nabewerkingen gedaan.
		# Ook toevoegen van <pre> en <h2> etc.
		# Dit is dus alleen een grove parse om de tekst en tabellen eruit te krijgen.
		# Gezien de issues (e.g. problemen met footnotes in MOV) is het waarschijnlijk beter om
		# te gaan werken met de html die pdf2txt maakt. Is wel niet zo clean maar geeft minder
		# problemen.
		# Kijkend naar de resultaten van alle pdf2html conversies ziet het er naar uit dat het toch 
		# niet zo makkelijk programmatisch gaat. zneak/felix heeft zijn best gedaan en genereert cleane 
		# html maar er zitten toch nog veel fouten in (zie issues). pdf2txt maakt een nette layout maar 
		# in de tabellen gaat het vaak mis en moet je nog veel nabewerken. Het is te vergelijken met 
		# pdf2music: soms lukt het maar meestal ziet het er niet goed uit en kun je beter alles handmatig 
		# doen. Veel werk maar geeft het beste resultaat.
		# pdf2txt gebruikt trouwens spans voor tabellen. Lelijk.
		# DONE: checked out pdftohtml from Xpdf. This produces the best looking pages. But also no real
		# tables. It uses a png file as background for the tables and then lays everything out with
		# absolutely positioned divs. For exact positioning that seems the way to go. But also slight
		# mistakes in the table layout. Faster (C++, Qt) and better than pdfminer.six.
		# But no real tables is faking it...
		# NOTE_: at autoclose we are getting mismatch: th strong when parsing the full vol2a.pdf
		# Something goes wrong.
		# Figures are extracted as svg but often look warped (e.g. Figure 3-18 and 3-19 at HADDPS)
		# PDF parsing is like unscrambling scrambled eggs...
		# DONE: checked out pdf2htmlEX. It creates perfectly looking html 5 pages. It can be done!
		# It is fast and puts everything in one html page.
		# TODO_: check out https://github.com/fmalina/unilex-transcript which promisses to create
		# clean (semantic) html from pdf2htmlEX output.

		# NOTE_: Conversion result geeft altijd 0/0 omdat we niet in de code komen waar success en fail worden
		# geincrementeerd. Het zijn dus loze variabelen.
		print("Conversion result: %i/%i" % (parser.success, parser.success + parser.fail))