Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. 2 функции, которые я использую через python (2-я нуждается в tesseract). Я предпочитаю тессеракт вместо pdfminer, но они фактически делают то же самое. Не уверен, что не так с вашим кодом, но я считаю, что это альтернативные эквиваленты.
from PIL import Image
import pytesseract
import cv2
import os
import subprocess
from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage
#converts pdf, returns its text content as a string
def convert(fname, pages=None):
if not pages:
pagenums = set()
else:
pagenums = set(pages)
output = StringIO()
manager = PDFResourceManager()
converter = TextConverter(manager, output, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
infile = open(fname, 'rb')
for page in PDFPage.get_pages(infile, pagenums):
interpreter.process_page(page)
infile.close()
converter.close()
text = output.getvalue()
output.close
return text
def to_txt(pdf_path, output_dir, name=None):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
if name == None:
parts = pdf_path.split('\\')
fname = parts[-1][:-4] + '.txt'
fname = fname.replace(" ", "_")
end = output_dir + fname
else:
if name[-4:] != '.txt':
name += '.txt'
end = output_dir + name
cmd = ['pdftotext', pdf_path,
end]
subprocess.call(cmd)
print('Converted')