-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
60 lines (46 loc) · 1.92 KB
/
Copy pathmain.py
File metadata and controls
60 lines (46 loc) · 1.92 KB
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
"""
Testing PDF Plumber and other methods on insurance claim forms
https://pypi.org/project/pdfplumber/
https://trepo.tuni.fi/bitstream/handle/123456789/21520/Nurminen.pdf?sequence=3
https://github.com/jsvine/pdfplumber
"""
import pdfplumber
from pdfplumber.utils.pdfinternals import resolve_and_decode, resolve
#pdf = pdfplumber.open("data/mib_claim_form_v0618_v2a.pdf")
pdf = pdfplumber.open("data/BPAAS12529.pdf")
def parse_field_helper(form_data, field, prefix=None):
""" appends any PDF AcroForm field/value pairs in `field` to provided `form_data` list
if `field` has child fields, those will be parsed recursively.
"""
resolved_field = field.resolve()
field_name = '.'.join(filter(lambda x: x, [prefix, resolve_and_decode(resolved_field.get("T"))]))
if "Kids" in resolved_field:
for kid_field in resolved_field["Kids"]:
parse_field_helper(form_data, kid_field, prefix=field_name)
if "T" in resolved_field or "TU" in resolved_field:
# "T" is a field-name, but it's sometimes absent.
# "TU" is the "alternate field name" and is often more human-readable
# your PDF may have one, the other, or both.
alternate_field_name = resolve_and_decode(resolved_field.get("TU")) if resolved_field.get("TU") else None
field_value = resolve_and_decode(resolved_field["V"]) if 'V' in resolved_field else None
form_data.append([field_name, alternate_field_name, field_value])
form_data = []
fields = resolve(resolve(pdf.doc.catalog["AcroForm"])["Fields"])
for field in fields:
parse_field_helper(form_data, field)
print(form_data)
"""
import pdfplumber
pdf_path = "data/mib_claim_form_v0618_v2a.pdf"
with pdfplumber.open(pdf_path) as pdf:
page = pdf.pages[0]
print(page.chars[0])
tablefinder = page.debug_tablefinder()
cells = tablefinder.cells
print("Cells")
print(cells)
image = page.to_image()
print(image)
table = page.extract_table()
print(table)
"""