【问题标题】:Converting data from PDF to XML with PDFminer?使用 PDFminer 将数据从 PDF 转换为 XML?
【发布时间】:2020-09-29 18:49:07
【问题描述】:

我使用下面的代码将 PDF 数据转换为 XML 数据并将转换写入 XML 文件。它是众所周知的(它使用 PDFminer 模块)并且非常适用于 PDF 到文本和 HTML 的转换,但是当我进行 PDF 到 XML 的转换时我遇到了问题。我是个新手,如果你能提供一些帮助会非常好:)

语音代码:

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter, XMLConverter, HTMLConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import BytesIO

def convert_pdf(path, format='text', codec='utf-8', password=''):
    rsrcmgr = PDFResourceManager()
    retstr = BytesIO()
    laparams = LAParams()
    if format == 'text':
        device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    elif format == 'html':
        device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    elif format == 'xml':
        device = XMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    else:
        raise ValueError('provide format, either text, html or xml!')
    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    maxpages = 0
    caching = True
    pagenos=set()
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
        interpreter.process_page(page)

    text = retstr.getvalue().decode()
    fp.close()
    device.close()
    retstr.close()
    return text


path_pdf = ...
path_xml = ...
open(path_xml, "w").close()
text_output = convert_pdf(path_pdf)
open(path_xml, "a", encoding="utf-8").write(text_output)

这是我得到的错误:

提前谢谢你!

【问题讨论】:

    标签: python data-conversion pypdf2 pdfminer pdf-conversion


    【解决方案1】:

    如果您使用的是python2.7,则以下工作

    from io import BytesIO
    from pdfminer.layout import LAParams
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.pdfpage import PDFPage
    
    
    def get_xml_py2(file_path):
        in_fp = BytesIO()
        with open(file_path, 'rb') as x:
            in_fp.write(x.read())
    
        laparams = LAParams(all_texts=True)
        rsrcmgr = PDFResourceManager()
        for page in PDFPage.get_pages(in_fp):
            outfp = BytesIO()
            device = XMLConverter(rsrcmgr, outfp, laparams=laparams)
            interpreter = PDFPageInterpreter(rsrcmgr, device)
            interpreter.process_page(page)
            yield outfp.getvalue()
            device.close()
            outfp.close()
    
        in_fp.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多