このPDFの表からデータを取得しようとしています。少し運が良かったのでpdfminerとpypdfを試しましたが、実際にはテーブルからデータを取得できません。
テーブルの 1 つが次のようになります。
ご覧のとおり、一部の列は「x」でマークされています。このテーブルをオブジェクトのリストにしようとしています。
これはこれまでのコードです。現在pdfminerを使用しています。
# 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()
これによりテキスト ファイルが生成され、すべてのテキストが取得されますが、x の間隔は保持されません。出力は次のようになります。
x は、テキスト ドキュメント内のシングル スペースです。
現在、私はテキスト出力を生成しているだけですが、私の目標は、テーブルからのデータを使用して html ドキュメントを生成することです。私は OCR の例を探してきましたが、それらのほとんどはわかりにくいか不完全なようです。私は、探している結果を生成する可能性のある C# またはその他の言語を使用することにオープンです。
編集:テーブルデータを取得する必要がある、このような複数のpdfがあります。ヘッダーはすべてのpdfで同じになります(私が知る限り)。