Невозможно конвертировать PDF в текстовый формат - PullRequest
0 голосов
/ 13 апреля 2019

Я получаю эту ошибку при разборе PDF-файла с помощью pypdf2. Я прилагаю PDF вместе с ошибкой.

Я приложил PDF-файл для анализа, пожалуйста, нажмите для просмотра

Может кто-нибудь помочь?

import PyPDF2


def convert(data):

   pdfName = data
   read_pdf = PyPDF2.PdfFileReader(pdfName)
   page = read_pdf.getPage(0)
   page_content = page.extractText()
   print(page_content)
   return (page_content)

Ошибка:

PyPDF2.utils.PdfReadError: Expected object ID (8 0) does not match actual (7 0); xref table not zero-indexed.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Если можно использовать онлайн OCR, вы можете использовать бесплатный OCR API до для создания PDF с возможностью поиска (Sandwich PDF).

Python-код для использования API:

import requests
    def ocr_space_file(filename, overlay=False, api_key='helloworld', language='eng'):
        """ OCR.space API request with local file.
            Python3.5 - not tested on 2.7
        :param filename: Your file path & name.
        :param overlay: Is OCR.space overlay required in your response.
                        Defaults to False.
        :param api_key: OCR.space API key.
                        Defaults to 'helloworld'.
        :param language: Language code to be used in OCR.
                        List of available language codes can be found on https://ocr.space/OCRAPI
                        Defaults to 'en'.
        :return: Result in JSON format.
        """

        payload = {'isOverlayRequired': overlay,
                   'apikey': api_key,
                   'language': language,
                   }
        with open(filename, 'rb') as f:
            r = requests.post('https://api.ocr.space/parse/image',
                              files={filename: f},
                              data=payload,
                              )
        return r.content.decode()


    def ocr_space_url(url, overlay=False, api_key='helloworld', language='eng'):
        """ OCR.space API request with remote file.
            Python3.5 - not tested on 2.7
        :param url: Image url.
        :param overlay: Is OCR.space overlay required in your response.
                        Defaults to False.
        :param api_key: OCR.space API key.
                        Defaults to 'helloworld'.
        :param language: Language code to be used in OCR.
                        List of available language codes can be found on https://ocr.space/OCRAPI
                        Defaults to 'en'.
        :return: Result in JSON format.
        """

        payload = {'url': url,
                   'isOverlayRequired': overlay,
                   'apikey': api_key,
                   'language': language,
                   }
        r = requests.post('https://api.ocr.space/parse/image',
                          data=payload,
                          )
        return r.content.decode()


    # Use examples:
    test_file = ocr_space_file(filename='example_image.png', language='pol')
    test_url = ocr_space_url(url='http://i.imgur.com/31L5y.jpg')
0 голосов
/ 13 апреля 2019

Существует несколько инструментов OCR с открытым исходным кодом, таких как tesseract или openCV .

Если вы хотите использовать, например, Тессеракт есть библиотека оболочки Python pytesseract .

Большинство инструментов OCR работают с изображениями, поэтому сначала нужно преобразовать PDF-файл в формат файла изображения, например PNG или JPG. После этого вы можете загрузить свое изображение и обработать его с помощью pytesseract.

Вот пример кода, как вы можете использовать pytesseract. Предположим, вы уже преобразовали свой PDF в изображение с именем pdfName.png:

from PIL import Image 
import pytesseract

def ocr_core(filename):  
    """
    This function will handle the core OCR processing of images.
    """
    text = pytesseract.image_to_string(Image.open(filename))  # We'll use Pillow's Image class to open the image and pytesseract to detect the string in the image
    return text

print(ocr_core('pdfName.png'))  
...