PyPDF2 записывает поврежденный файл - PullRequest
0 голосов
/ 08 июля 2020

Возникли проблемы с PyPDF2 - особенно при разделении и перезаписи файлов!

Я открываю файл на моем сервере ubuntu , разделяю его на отдельные страницы (максимум 3) и запись в файловую систему (затем запись в S3). Ошибка не выдается при записи файла, но я не могу открыть его при загрузке с S3 и, как вы увидите ниже, не может открыться на сервере.

Есть идеи?

  inputpdf = PdfFileReader(open(fi, 'rb'))

  print('breaking file into %s pages' % inputpdf.numPages) # 17 pages

       for i in range(min(3,inputpdf.numPages)):
            output = PdfFileWriter()
            output.addPage(inputpdf.getPage(i))
            new_fi = fi[:-4]+'_page_%s.pdf' % i # fi = ./deals/temp_files/test_experian.pdf
            with open(new_fi, 'wb') as outputStream:
                 output.write(outputStream) # successfully writes all files
                 pdf_check = open(new_fi, 'rb')
                 print('opened PDF')
                 read_pdf = PdfFileReader(pdf_check) # "error throw -> EOF market not found"
                 print('loaded PDF')
                 page_content = read_pdf.getPage(0).extractText()
                 print(page_content.encode('utf-8'))

1 Ответ

0 голосов
/ 10 июля 2020

Причина ошибки: попытка прочитать файл в режиме записи Решение:

 for i in range(min(3,inputpdf.numPages)):
     output = PdfFileWriter()
     output.addPage(inputpdf.getPage(i))
     new_fi = fi[:-4]+'_page_%s.pdf' % i
     with open(new_fi, 'wb') as outputStream:
         output.write(outputStream)
     pdf_check = open(new_fi, 'rb')
     print('opened PDF')
     read_pdf = PdfFileReader(pdf_check)
     print('loaded PDF')
     page_content = read_pdf.getPage(0).extractText()
     print(page_content.encode('utf-8'))

Используя

with open(new_fi, 'wb') as outputStream

, вы создаете указатель файла в режиме записи. По умолчанию файл закрывается только в конце этого блока. Следовательно, при попытке чтения read_pdf выдает ошибку, поскольку файл не был закрыт перед его повторным открытием для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...