如何从PDF生成带有表标记的HTML?

2024-06-14 22:53:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些PDF文件,我想转换成HTML。有些工具支持这一点,但表只是绝对定位的<span>标记。它们不产生<table>标记

我怎样才能得到桌子标签

这是一个example PDF file。我希望得到这样的东西:

<h1>Test document</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed pulvinar nisi quis mauris egestas, maximus
congue tellus tempor. Quisque semper augue consectetur mattis imperdiet. Aliquam elementum, nibh
id scelerisque malesuada, arcu mauris ultricies tellus, non ultrices nulla lacus non erat. Curabitur in
diam a magna ornare finibus. Sed dapibus ipsum laoreet justo eleifend commodo. Nulla porttitor eros
odio, nec cursus mi sagittis eu. Duis metus arcu, auctor gravida interdum sed, congue a velit. Aliquam
malesuada posuere erat sit amet vehicula. Nunc vitae tempus orci. Nulla a elementum magna, vitae
scelerisque nisl. Phasellus gravida elit eu hendrerit tristique. Etiam rutrum ac ipsum vitae consequat.
Nam sit amet gravida arcu. Sed eget dictum lorem, eu consectetur sapien.</p>

<p>Donec gravida, velit ac vehicula feugiat, sem lectus hendrerit purus, non fermentum tortor neque id
tortor. Fusce iaculis feugiat tincidunt. Etiam nec metus leo. Nunc faucibus ut nisi vitae viverra. Aenean
quam lorem, maximus non odio quis, laoreet porttitor nunc. Duis sed viverra magna. Maecenas ut
ipsum eu erat pulvinar aliquet. Cras sed quam nec lectus sollicitudin venenatis vel vitae velit. Nullam
dignissim orci tempus, ultricies dui eget, placerat sem. Phasellus facilisis, felis eget laoreet aliquam, nisi
arcu vehicula orci, sed viverra velit nunc vel ipsum. Etiam in ligula fringilla, interdum massa nec,
elementum est.</p>

<h2>A small section</h2>
<p>Quisque tincidunt tempus lorem eu faucibus. Etiam vitae ¥ maximus diam. Cras ac augue a erat
elementum gravida. Aenean erät $ metus, maximus sit amet dapibus eü €, vulpötate vel arcu £.
Maecenas non vulputate mauris. Phasellus at purus et sapien mattis fringilla. Sed facilisis velit a elit
volutpat fringilla. Curabitur dapibuß urna eu ligula finibus egestas ac eget eros. Vestibulum ante
ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam in urna placerat, convallis
diam in, dignissim mauris. Phasellus ornare laoreet dui id aliquam. Praesent vitae lacus urna. Mauris
urna libero, egestas vel eros ac, tempus suscipit odio. Cras non varius ipsum. Ut vestibulum orci ut
nisl ornare maximus. Nulla condimentum condimentum risus at varius</p>

<table>
    <tr>
        <td></td>
        <th>Q1/2011</th>
        <th>Q1/2012</th>
    </tr>
    <tr>
        <th>Earnings per share</th>
        <th></th>
        <th></th>
    </tr>
    <tr>
        <td>Ordinary share</td>
        <th>0.65 €</th>
        <th>0.85 €</th>
    </tr>
    <tr>
        <td>Preferered Share</td>
        <th>0.66 €</th>
        <th>0.86 €</th>
    </tr>
    <tr>
        <th>Portfolio companies Revenue</th>
        <th></th>
        <th></th>
    </tr>
    <tr>
        <td>In million €</td>
        <th></th>
        <th></th>
    </tr>
    <tr>
        <td>Abarax IV</td>
        <th>12<sup>1</sup></th>
        <th>34</th>
    </tr>
    <tr>
        <td>Beryol VIII</td>
        <th>56</th>
        <th>78</th>
    </tr>
    <tr>
        <td>Cetra EUR II</td>
        <th>90</th>
        <th>-</th>
    </tr>
</table>

我试过的

pymupdf

import fitz

def to_html(filepath: str):
    doc = fitz.open(filepath)
    for i, page in enumerate(doc):
        text = page.getText("html")
        with open(f"pymupdf-page-{i}.html", "w") as fp:
            fp.write(text)
    doc.close()

卡米洛特

Camelot可以将表提取为数据帧,但它无法理解其余的不是表

pdftohtml

pdftohtml -c提供与pymupdf相同的输出-没有语义表


Tags: intractdnonipsumeuth