pandoc - 用Word docx的自定义样式替换标题

时间:2017-05-02 05:06:09

标签: python pandoc

我使用panflute为pandoc编写python过滤器,将Markdown转换为Word文档。通常,pandoc会将Markdown标头转换为Word的内置样式,称为标题1,标题2等。但由于我必须使用的Word模板的详细信息,我需要将所有Markdown标头更改为相应的自定义Word中的样式使得标题级别1 => Header1,level 2 => Header2等

这是我用来测试我的过滤器的快速示例Markdown文件:

# Heading 1

some text in a paragraph

## Heading 2

a little bit more text down below

基本上,我想把Markdown转换为像我写的那样:

<div custom-style="Header1">Heading 1</div>

some text in a paragraph

<div custom-style="Header2">Heading 2</div>

a little bit more text down below

这样,当我跑:

pandoc -S test_input.md -o test_output.docx --reference-docx ./custom_styles.docx --filter ./test_filter.py

生成的Word docx将使用适当的自定义样式。

请?

无论如何,这是我使用panflute编写的过滤器:

#! /usr/bin/env python
#coding: utf-8

from panflute import *

def action( elem, doc ):
    if isinstance( elem, Header ):
        return Div( elem, classes=['Header{}'.format(elem.level)] )

def main(doc=None):
    return run_filter( action, doc=doc )

if __name__ == "__main__":
    main()

遗憾的是,不会将我的自定义div替换Markdown标头以进行样式设置。它基本上出现在另一端,好像根本没有过滤器。

我不确定我在这里做错了什么。

1 个答案:

答案 0 :(得分:3)

啊哈!最后我自己想出来了。

from panflute import *

def action( elem, doc ):
    if isinstance( elem, Header ):
        #return Div( elem, attributes={'custom-style': 'Header{}'.format(elem.level)} )
        return Div( Para(*elem.content), attributes={'custom-style': 'Header {}'.format(elem.level)} )

def main(doc=None):
    return run_filter( action, doc=doc )

if __name__ == "__main__":
    main()