如何将html混合降价转换为html / docx / pdf?

时间:2020-02-20 14:37:12

标签: list markdown pandoc

我正在azure devops Wiki中工作,以创建规范和其他软件文档。

我必须创建表,并详细创建一些项目符号列表。可以在github风格的markdown中使用(完全在azure devops中):

#header1

|TableHeader1|TableHeader2|
|--|--|
|Text1|Details 1|
|ListCell|<ul><li>FirstBullet</li><li>SecondBullet</li></ul>|

Html output screenshot

我首先尝试使用pandoc,但是列表从表中消失了。 有什么想法可以转换成html / docx吗?

关于, 安德拉斯

1 个答案:

答案 0 :(得分:0)

您可能不会。作为Pandoc文档warns

因为pandoc对文档的中间表示较少 比它所转换的许多格式更具表现力, 不要期望每种格式之间都能完美转换。 Pandoc尝试保留文档的结构元素,但是 不格式化诸如边距大小之类的详细信息。还有一些文件 元素(例如复杂的表格)可能不适合pandoc的简单元素 文档模型。从pandoc的Markdown转换为全部 格式追求完美,将格式转换成更具表现力的格式 比pandoc的Markdown预计会有损失。

HTML当然比Markdown更具表现力。因此,Pandoc不保证将保留HTML源。就是说,一个简单的列表可以在Markdown中很好地表达,所以人们会认为这不会造成损失。

但是,该表使事情变得复杂。 Pandoc实际上支持四种不同的表格格式。但是,其中只有两种格式(multi-linegrid表)支持包含块级元素的单元格。

但是,您似乎正在使用pipe_tables,它不支持表单元格中的块级元素。如文档所述:

管道表的单元格不能包含段落和列表之类的块元素,并且不能跨越多行。

尽管Pandoc的markdown格式支持上述所有扩展名(表格格式),但pipe_tables格式仅支持gfm(请参阅Markdown Variants)。因此,您可以考虑使用markdown格式。但是,只有在您的表实际上对网格或多行表使用正确的语法时,这才有帮助。

不幸的是,Pandoc仅支持表格和多行表格。我不知道其他支持它们的Markdown实现。因此,在Pandoc和其他实现中,您都无法解析具有块级元素的表。

那么,为什么您正在使用的其他实现与表格单元格中的原始HTML列表一起正常工作?大概解析器不是很聪明,并且会盲目地通过原始HTML传递原始HTML。试图理解原始HTML的任何更复杂的解析器都将对您不起作用。而且,当然,如果您想将文档转换为另一种(非HTML)格式,则解析器需要理解原始HTML。

也许您可以找到一些随机解析器来完成您想要的操作,但可能性不大。更好的解决方案可能是采用其他Markdown工具的HTML输出,然后使用Pandoc(或其他工具)将其转换为docx / pdf。