Python pdfminer TypeError: a bytes-like object is required, not 'str'

Viewed 11

I am extracting text from a pdf file using pdfminer, and below is my code:

def parse(fname):
    fp = open(fname, 'rb')
    parser = PDFParser(fp)
    doc = PDFDocument(parser)
    parser.set_document(doc)
    rsrcmgr = PDFResourceManager()
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    
    parsed = []
    
    for page in PDFPage.create_pages(doc):
        print(page)
        interpreter.process_page(page)
        layout = device.get_result()
        page = []
        pagebuffer = []
        flag = False
        
        for x in layout:
            if(isinstance(x, LTTextBox)):
                pagebuffer += [x.get_text()]
                
                if(x.get_text()[-1] == "\n"):
                    flag = False
                    page += pagebuffer
                    pagebuffer = []
                    
        parsed += [page]

    fp.close()
    return parsed 

This code works fine with one of my pdf files, I can successfully extract text, but while I tried to extract the other file, the error came:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
c:\HL\PDF parsing\pdfparsing pdfminer.ipynb Cell 6 in <cell line: 2>()
      1 file_path = "X:\Matters\BV\DD&A\8 - Pdf to Excel\Goldman Sachs - October 31, 2021.pdf"
----> 2 parse(file_path)

c:\HL\PDF parsing\pdfparsing pdfminer.ipynb Cell 6 in parse(fname)
     13 for page in PDFPage.create_pages(doc):
     14     print(page)
---> 15     interpreter.process_page(page)
     16     layout = device.get_result()
     17     page = []

File c:\Users\Hlin\Anaconda3\lib\site-packages\pdfminer\pdfinterp.py:841, in PDFPageInterpreter.process_page(self, page)
    839     ctm = (1, 0, 0, 1, -x0, -y0)
    840 self.device.begin_page(page, ctm)
--> 841 self.render_contents(page.resources, page.contents, ctm=ctm)
    842 self.device.end_page(page)
    843 return

File c:\Users\Hlin\Anaconda3\lib\site-packages\pdfminer\pdfinterp.py:852, in PDFPageInterpreter.render_contents(self, resources, streams, ctm)
    849 if self.debug:
    850     logging.info('render_contents: resources=%r, streams=%r, ctm=%r' %
    851              (resources, streams, ctm))
--> 852 self.init_resources(resources)
...
--> 672     CMapParser(self.unicode_map, BytesIO(strm.get_data())).run()
    673 elif self.cidcoding in ('Adobe-Identity', 'Adobe-UCS'):
    674     if ttf:

TypeError: a bytes-like object is required, not 'str'

Is there any idea what can I do for this situation?

Thanks a lot!

0 Answers
Related