Presta atención ya que en esta noticia vas a hallar el hallazgo que buscas.Esta reseña fue analizado por nuestros expertos para asegurar la calidad y exactitud de nuestro contenido.
Solución:
Sin usar PyPdf2, use el paquete de biblioteca Pdfminer que tiene la misma funcionalidad, como se muestra a continuación. Obtuve el código de esto y, como quería, lo edité, este código me da un archivo de texto que tiene espacios en blanco entre las palabras. Trabajo con anaconda y python 3.6. para instalar PdfMiner para python 3.6 puede usar este enlace.
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
class PdfConverter:
def __init__(self, file_path):
self.file_path = file_path
# convert pdf file to a string which has space among words
def convert_pdf_to_txt(self):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8' # 'utf16','utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = open(self.file_path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching, check_extractable=True):
interpreter.process_page(page)
fp.close()
device.close()
str = retstr.getvalue()
retstr.close()
return str
# convert pdf file text to string and save as a text_pdf.txt file
def save_convert_pdf_to_txt(self):
content = self.convert_pdf_to_txt()
txt_pdf = open('text_pdf.txt', 'wb')
txt_pdf.write(content.encode('utf-8'))
txt_pdf.close()
if __name__ == '__main__':
pdfConverter = PdfConverter(file_path='sample.pdf')
print(pdfConverter.convert_pdf_to_txt())
Su archivo PDF no tiene caracteres de espacio imprimibles, simplemente coloca las palabras donde deben ir. Tendrás que hacer un trabajo adicional para descubrir los espacios, tal vez asumiendo que las secuencias de varios caracteres son palabras y colocando espacios entre ellas.
Si puede seleccionar texto en el lector de PDF y hacer que los espacios aparezcan correctamente, al menos sabrá que hay suficiente información para reconstruir el texto.
“fi” es una ligadura tipográfica, que se muestra como un solo carácter. Es posible que esto también suceda con “fl”, “ffi” y “ffl”. Puedes usar string reemplazo para sustituir “fi” por la ligadura fi.
Como alternativa a PyPDF2, sugiero pdftotext
:
#!/usr/bin/env python
"""Use pdftotext to extract text from PDFs."""
import pdftotext
with open("foobar.pdf") as f:
pdf = pdftotext.PDF(f)
# Iterate over all the pages
for page in pdf:
print(page)
Recuerda que puedes dar visibilidad a este enunciado si te fue de ayuda.