Extraer tablas de un pdf

Estoy tratando de obtener los datos de las tablas en estePDF. He probado pdfminer y pypdf con un poco de suerte, pero realmente no puedo obtener los datos de las tablas.

Así es como se ve una de las tablas:

Como puede ver, algunas columnas están marcadas con una 'x'. Estoy tratando de esta tabla en una lista de objetos.

Este es el código hasta ahora, estoy usando pdfminer ahora.

# pdfminer test
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice, TagExtractor
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter, PDFPageAggregator
from pdfminer.cmapdb import CMapDB
from pdfminer.layout import LAParams, LTTextBox, LTTextLine, LTFigure, LTImage
from pdfminer.image import ImageWriter
from cStringIO import StringIO
import sys
import os


def pdfToText(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = file(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ''
    maxpages = 0
    caching = True
    pagenos = set()

    records = []
    i = 1
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,
                                  caching=caching, check_extractable=True):
        # process page
        interpreter.process_page(page)

        # only select lines from the line containing 'Tool' to the line containing "1 The 'All'"
        lines = retstr.getvalue().splitlines()

        idx = containsSubString(lines, 'Tool')
        lines = lines[idx+1:]
        idx = containsSubString(lines, "1 The 'All'")
        lines = lines[:idx]

        for line in lines:
            records.append(line)
        i += 1

    fp.close()
    device.close()
    retstr.close()

    return records


def containsSubString(list, substring):
    # find a substring in a list item
    for i, s in enumerate(list):
        if substring in s:
            return i
    return -1


# process pdf
fn = '../test1.pdf'
ft = 'test.txt'

text = pdfToText(fn)
outFile = open(ft, 'w')
for i in range(0, len(text)):
    outFile.write(text[i])
outFile.close()

Eso produce un archivo de texto y obtiene todo el texto, pero las x no conservan el espacio. El resultado se ve así:

Las x solo están espaciadas en el documento de texto

En este momento, solo estoy produciendo salida de texto, pero mi objetivo es producir un documento html con los datos de las tablas. He estado buscando ejemplos de OCR, y la mayoría de ellos parecen confusos o incompletos. Estoy abierto a usar C # o cualquier otro lenguaje que pueda producir los resultados que estoy buscando.

EDITAR: Habrá múltiples archivos PDF como este de los que necesito obtener los datos de la tabla. Los encabezados serán los mismos para todos los archivos PDF (hasta donde yo sé).

Respuestas a la pregunta(2)

Su respuesta a la pregunta