繁体   English   中英

如何使用 Python 将 PDF 转换为干净的 HTML

[英]How to convert PDF to clean HTML using Python

我想让用户上传 PDF,将该 PDF 转换为 HTML 代码并将此代码插入<div>以显示 PDF 文档。 我正在使用 PDFMiner 来分析上传的 PDF。 当我将其转换为 HTML 时,HTML 是混乱的,并且文档被错误地显示为HTML Mess 我已经尝试过 XML,但它仍然无法使用,因为文本显示时没有空格。 我该如何改进? 谢谢你。


def main():

 contentRaw =  convert_pdf(file.filename, 'html')
 contentR = json.dumps(contentRaw)
 contentOut = (contentRaw)
 return render_template('app.html', title=" App", filename=file.filename, content=Markup(contentOut), instructions=instructions)



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

PDF 是一种非常广泛的格式,它不仅仅是一种标记语言(HTML 是)。

编写一个保留文档外观的 PDF 到 HTML 转换器是一个相当复杂的故事:您的软件必须理解所有命令、对象、维护图形状态等。做符合标准的 PDF 阅读器和查看器所做的所有事情。 毕竟将文档内容转换为 HTML。

您可以从PDF 1.7 规范开始。

我建议你看看pdfreader并编写一个自定义的 PDFViewer 或以某种方式处理它可以提取的文本 + pdf 命令。

为什么不尝试使用现有的 PDF 到 HTML 转换器? 使用现有库的示例:

import pdftables_api

c = pdftables_api.Client('my-api-key')
c.html('input.pdf', 'output.html')

如果您有兴趣尝试一些其他 Python 包,那么我建议Aspose.Words Cloud SDK for Python 它尊重 PDF 到 HTML 转换中的格式。

# For complete examples and data files, please go to https://github.com/aspose-words-cloud/aspose-words-cloud-python
# Import module
import asposewordscloud
import asposewordscloud.models.requests
from shutil import copyfile

# Please get your Client ID and Secret from https://dashboard.aspose.cloud.
client_id='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx'
client_secret='xxxxxxxxxxxxxxxxxxxxxxxxxxx'

words_api = asposewordscloud.WordsApi(client_id,client_secret)
words_api.api_client.configuration.host='https://api.aspose.cloud'

filename = 'C:/Temp/02_pages.pdf'
dest_name = 'C:/Temp/02_pages.html'
#Convert RTF to text
request = asposewordscloud.models.requests.ConvertDocumentRequest(document=open(filename, 'rb'), format='html')
result = words_api.convert_document(request)
copyfile(result, dest_name)


PS:我是 Aspose 的开发人员布道者

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM