wordinserter, 在Word文档中插入HTML或者 Markdown

分享于 

7分钟阅读

GitHub

  繁體 雙語
Insert HTML or Markdown into a Word document
  • 源代码名称:wordinserter
  • 源代码网址:http://www.github.com/orf/wordinserter
  • wordinserter源代码文档
  • wordinserter源代码下载
  • Git URL:
    git://www.github.com/orf/wordinserter.git
    Git Clone代码到本地:
    git clone http://www.github.com/orf/wordinserter
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/orf/wordinserter
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Wordinserter

    Build Statusimage1image2image3image4

    这个 MODULE 允许你将HTML插入Word文档中,并允许你以编程方式在纯 python (。python 3.x 仅在此时) 中构建Word文档。 运行 pip install wordinserter 后,你可以使用 wordinserter CLI快速生成测试文档:

    # Download https://raw.githubusercontent.com/orf/wordinserter/master/tests/docs/table_widths.htmlwordinserter table_widths.html --style="table { background-color: red }"

    这将打开Word并插入三个表,每个表都带有红色的background。

    该库是稳定的,并且用于生成数千个报告,目前支持许多功能( 全部通过HTML控制):

    • 常用标签,包括表格,列表,代码块,图像,超链接,脚注,页眉,段落,样式( biem )
    • 通过元素 id 属性在文档中命名的书签
    • 元素的子集,可以根据需要轻松添加。
    • 在添加元素时包括文档宽样式表
    • <pre><code> 块构建语法高亮
    • 支持复杂的合并表,rowspans和 colspans
    • 具有不同类型( 项目符号,编号,罗马数字)的任意嵌套列表
    • 使用经典链接或者使用 Word'fields在文档中指向书签的超链接'
    • 支持脚注,404和嵌入式base64数据uri图像的图像
    • 基本空白处理

    有一个比较文档显示WordInserter的输出,并查看它是否可以完成库。

    API

    API使用起来非常简单:

    from wordinserter import parse, insert
    operations = parse(html, parser="html")
    insert(operations, document=document, constants=constants)

    将HTML插入Word文档是两个步骤过程: 首先,输入必须解析为一系列操作,然后将它的插入到一个单词文档中。 这个库目前只支持使用com接口插入,这意味着它现在是特定于 Windows的。

    below 是一个更复杂的例子,包括将HTML代码的表示插入到新单词文档中,包括图像。标题和列表。

    from wordinserter import insert, parsefrom comtypes.client import CreateObject# This opens Microsoft Word and creates a new document.word = CreateObject("Word.Application")
    word.Visible =True# Don't set this to True in production!document = word.Documents.Add()from comtypes.gen import Word as constants
    html ="""<h3>This is a title</h3><p><img src="http://placehold.it/150x150" alt="I go below the image as a caption"></p><p><i>This is <b>some</b> text</i> in a <a href="http://google.com">paragraph</a></p><ul> <li>Boo! I am a <b>list</b></li></ul>"""# Parse the HTML into a list of operations then feed them into insert.operations = parse(html, parser="html")
    insert(operations, document=document, constants=constants)

    这些常数部分是什么? Wordinserter对你所使用的com库是不可知的。 每个库都公开了Wordinserter以不同方式所需的常量值: pywin32库将它的公开为 win32com.client.constants,而comtypes库将它们公开为驻留在 comtypes.gen. 中,而不是猜测你正在使用的是哪一个,而不是将它的明确地传递。 如果你需要混合不同的常量组,可以使用 CombinedConstants 类:

    from wordinserter.utils import CombinedConstantsfrom comtypes.gen import Word as word_constantsfrom comtypes.gen import Office as office_constants
    constants = CombinedConstants(word_constants, office_constants)

    安装

    在这里从PyPi获取它的,使用。 这是用 2010和 2013构建的,旧版本可能产生不同的结果。

    支持操作

    WordInserter目前支持各种不同的操作,包括代码块。字体大小/颜色。图像。超链接。编号和项目符号列表。

    样式表

    Wordinserter支持样式表 ! 每个元素都可以用 inline 样式( style='whatever' ) 进行样式化,但这在。 你可以将CSS样式表传递给 parse 函数:

    html ="<p class="mystyle">Hello Word</p>"stylesheet =""".mystyle { color: red;}"""operations = parse(html, parser="html", stylesheets=[stylesheet])
    insert(operations, document=document, constants=constants)

    这将使"问候词"呈现红色。 继承被尊重,因此子样式覆盖父样式。

    为什么我的列表没有正确显示

    有两种方式用HTML编写列表,一个用每个子列表作为父列表的子级,或者作为列表元素的子级。 below 是两种不同方式的示例,它们在所有浏览器中都能正确显示:

    <ol>
     <li>
     I'm a list element
     </li>
     <ul>
     <li>I'm a sub list!</li>
     </ul>
    </ol>
    <ol>
     <li>
     I'm a list element
     <ul>
     <li>I'm a sub list!</li>
     </ul>
     </li>
    </ol>

    第二种方法是根据HTML规范正确的。 lxml 在某些情况下不正确解析第一个结构,从而导致奇怪的列表行为。 这个库没有多少可以做到这一点,所以请确保列表处于第二种格式。

    另一件要注意的事情是: Word不支持单个级别上具有混合列表类型的列表。 例如 这里HTML将不正确呈现:

    <ol>
     <li>
     <ul><li>Unordered List On Level #1</li></ul>
     <ol><li>Ordered List On Level #1</li></ul>
     </li>
    </ol>

    DOC  WORD  MARK  Markdown  插入