Python pyPdf выпуск загрузки pdf

Я с трудом читаю pdf из интернета в объект python PdfFileReader.

Мой код работает для первого URL, но не для второго, и я не знаю, как это исправить.

Я вижу, что в первом примере url ссылается на файл.pdf, а во втором url pdf возвращается как "данные приложения" в теле html.

Поэтому я думаю, что это может быть проблемой. Кто-нибудь знает, как это исправить, чтобы код также работал для второго URL?

from pyPdf import PdfFileWriter, PdfFileReader
from io import BytesIO
import requests

def test(url,filename):
  response=requests.get(url)
  pdf_file = BytesIO(response.content)
  existing_pdf = PdfFileReader(pdf_file)

  page = existing_pdf.getPage(0)

  output = PdfFileWriter()
  output.addPage(page)

  outputStream = file(filename, "wb")
  output.write(outputStream)
  outputStream.close()


test('https://s21.q4cdn.com/374334112/files/doc_downloads/test.pdf','works.pdf')
test('https://eservices.minfin.fgov.be/mym-api-rest/finform/pdf/2057','crashes.pdf')

Это трассировка стека у меня со вторым вызовом тестовой функции:

D:\scripts>test.py
Traceback (most recent call last):
  File "D:\scripts\test.py", line 21, in <module>
    test('https://eservices.minfin.fgov.be/mym-api-rest/finform/pdf/2057','crashes.pdf')
  File "D:\scripts\test.py", line 10, in test
    page = existing_pdf.getPage(0)
  File "C:\Python27\lib\site-packages\pyPdf\pdf.py", line 450, in getPage
    self._flatten()
  File "C:\Python27\lib\site-packages\pyPdf\pdf.py", line 596, in _flatten
    catalog = self.trailer["/Root"].getObject()
  File "C:\Python27\lib\site-packages\pyPdf\generic.py", line 480, in __getitem__
    return dict.__getitem__(self, key).getObject()
  File "C:\Python27\lib\site-packages\pyPdf\generic.py", line 165, in getObject
    return self.pdf.getObject(self).getObject()
  File "C:\Python27\lib\site-packages\pyPdf\pdf.py", line 655, in getObject
    raise Exception, "file has not been decrypted"
Exception: file has not been decrypted

1 ответ

Я нашел решение. Я импортировал PyPDF2 вместо pyPdf, так что, вероятно, это была ошибка.

Другие вопросы по тегам