HTML到Word docx

2024-09-29 02:28:35 发布

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

我用BeautifulSoup得到一些HTML格式的文本。我想通过docxrun命令将所有斜体(标记I)、粗体(b)和链接(a href)转换为Word格式。在

我可以写一段:

p = document.add_paragraph('text')

我可以将下一个序列添加为粗体/斜体:

^{pr2}$

直观地说,我可以找到所有特定的标记(即soup.find_all('i')),然后观察索引,然后连接部分字符串。。。在

……但也许还有更好、更优雅的方式?在

我不希望库或解决方案只是把一个html页面转换成word并保存它们。我想要多一点控制。在

我拿着字典一无所获。以下是代码和视觉错误(源代码)和正确(期望)结果:

from docx import Document
import os
from bs4 import BeautifulSoup

html = '<a href="http://someurl.you">hi, I am link</a> this is some nice regular text. <i> oooh, but I am italic</i> ' \
        ' or I can be <b>bold</b> '\
        ' or even <i><b>bold and italic</b></i>'

def get_tags(text):
    soup = BeautifulSoup(text, "html.parser")
    tags = {}
    tags["i"] = soup.find_all("i")
    tags["b"] = soup.find_all("b")

    return tags


def make_test_word():
    document = Document()

    document.add_heading('Demo HTML', 0)

    soup = BeautifulSoup(html, "html.parser")

    p = document.add_paragraph(html)

    # p.add_run('bold').bold = True
    # p.add_run(' and some ')
    # p.add_run('italic.').italic = True

    file_name="demo_html.docx"
    document.save(file_name)
    os.startfile(file_name)


make_test_word()

enter image description here


Tags: runtextimportaddhtmltagsallfind
1条回答
网友
1楼 · 发布于 2024-09-29 02:28:35

我只是编写了一些代码,将文本从tkinter文本小部件转换为word文档,包括用户可以添加的任何粗体标记。这对你来说不是一个完整的解决方案,但它可能会帮助你开始一个有效的解决方案。我想你得做一些正则表达式的工作,把超链接转移到word文档。堆叠格式标记也可能会变得棘手。我希望这有助于:

from docx import Document

html = 'HTML string <b>here</b>.'

html = html.split('<')
html = [html[0]] + ['<'+l for l in html[1:]]
doc = Document()
p = doc.add_paragraph()
for run in html:
    if run.startswith('<b>'):
        run = run.lstrip('<b>')
        runner = p.add_run(run)
        runner.bold = True
    elif run.startswith('</b>'):
        run = run.lstrip('</b>')
        runner = p.add_run(run)
    else:
        p.add_run(run)
doc.save('test.docx')

我回到它,使它能够解析出多个格式化标记。这将记录列表中正在使用的格式化标记。在每个标记处,都会创建一个新的跑步记录,并且该跑步记录的格式由正在播放的当前标记设置。在

^{pr2}$

超链接功能感谢this question。我在这里担心的是,您将需要手动为您希望携带到docx的每个HTML标记编写代码。我想这可能是一个很大的数字。我已经给出了一些你可能想要解释的标签的例子。在

相关问题 更多 >