forked from nainiayoub/pdf-text-data-extractor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.py
88 lines (77 loc) · 2.35 KB
/
functions.py
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
import streamlit as st
from zipfile import ZipFile
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
import base64
@st.cache
def convert_pdf_to_txt_pages(path):
texts = []
rsrcmgr = PDFResourceManager()
retstr = StringIO()
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
# fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
size = 0
c = 0
file_pages = PDFPage.get_pages(path)
nbPages = len(list(file_pages))
for page in PDFPage.get_pages(path):
interpreter.process_page(page)
t = retstr.getvalue()
if c == 0:
texts.append(t)
else:
texts.append(t[size:])
c = c+1
size = len(t)
# text = retstr.getvalue()
# fp.close()
device.close()
retstr.close()
return texts, nbPages
@st.cache
def convert_pdf_to_txt_file(path):
texts = []
rsrcmgr = PDFResourceManager()
retstr = StringIO()
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
# fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
file_pages = PDFPage.get_pages(path)
nbPages = len(list(file_pages))
for page in PDFPage.get_pages(path):
interpreter.process_page(page)
t = retstr.getvalue()
# text = retstr.getvalue()
# fp.close()
device.close()
retstr.close()
return t, nbPages
@st.cache
def save_pages(pages):
files = []
for page in range(len(pages)):
filename = "page_"+str(page)+".txt"
with open("./file_pages/"+filename, 'w', encoding="utf-8") as file:
file.write(pages[page])
files.append(file.name)
# create zipfile object
zipPath = './file_pages/pdf_to_txt.zip'
zipObj = ZipFile(zipPath, 'w')
for f in files:
zipObj.write(f)
zipObj.close()
return zipPath
def displayPDF(file):
# Opening file from file path
# with open(file, "rb") as f:
base64_pdf = base64.b64encode(file.read()).decode('utf-8')
# Embedding PDF in HTML
pdf_display = F'<iframe src="data:application/pdf;base64,{base64_pdf}" width="700" height="1000" type="application/pdf"></iframe>'
# Displaying File
st.markdown(pdf_display, unsafe_allow_html=True)