【问题标题】:How to parse HTML text and add it to MigraDoc Document如何解析 HTML 文本并将其添加到 MigraDoc 文档
【发布时间】:2019-07-16 09:42:58
【问题描述】:

我需要获取用户正在编写的文本(在 CKEditor HTML 中),然后将该文本添加到 MigraDoc 文档中,作为段落或我需要的任何内容。

我的想法是将文本转换为 MDDDL 文档(在内存中)并将其添加到文档中。但我不知道是否有任何允许这种行为的 DLL。

所以,我的问题是,有人可以给我指点或建议我如何做到这一点吗?我应该解析 HMTL 文本吗?如果是这样,我应该解析什么?之后如何添加?

【问题讨论】:

    标签: c# pdf pdfsharp migradoc


    【解决方案1】:

    PDFsharp 和 MigraDoc 都无法解析 HTML,所以要么自己编写代码,要么尝试寻找第三方库(可能尚不存在)。

    我可能会将 HTML 直接转换为内存中的 MigraDoc 文档对象。

    【讨论】:

    • 我应该采取什么程序,如您所说,将 HTML 直接转换为内存中的 MigraDoc 文档对象?
    • 到目前为止,这是一个需要在几周内完成的项目,所以我认为我负担不起编写复杂的解析器。如果数据源是 XML 或 XHTML,答案是否仍然相同?
    • 为简单起见:您可以将 RTF 转换为 MigraDoc 或提出您自己的 Wiki 或 Markdown 语法。我们通过 RichEdit 控件“解析”RTF,在该控件中我们选择单个字符并查询其属性。我们还使用可以转换为 MigraDoc 的 Wiki 代码。这都是封闭源代码,我无法分享。你需要哪些属性?常规,粗体,斜体,也许是下划线。定义您支持的属性并从 HTML 或 RTF 或 Wiki 或 Markdown 中解析它们 - 这应该不会花费很长时间来实现。
    • 好的,但是如何将 rtf 文本添加到 migradoc 中的文档中?顺便说一句,感谢您的帮助。
    • 致电AddParagraph(),然后致电AddFormattedText。在最好的情况下,只要支持的属性发生更改,您就调用AddFormattedText。对于一个简单的实现,您可以为每个字符调用AddFormattedText,但这会增加开销。
    【解决方案2】:

    MigraDoc / PDFSharp 无法做到这一点。

    但是,您可以使用HtmlAgilityPack nuget,然后使用它的htmlDoc.DocumentNode.Descendants() 从 html 中以平面列表形式提取文本片段,并使用node.ParentNode.Name 找出文本的标记然后将文本插入到您的 MigraDoc 文档中,使用 .AddFormattedText() 之类的内容,并对其应用自定义 MigraDoc 样式 - 即,如果父标签为“strong”,则应用 MigraDoc 样式,其中 Font.Italic = true; 等..

    【讨论】:

    • 我知道这是一个老问题,但只是不想让这个问题得不到解答。我最终根据您的建议使用了一个解决方案,我找到了this git repo,并针对我的用例进行了扩展。由于这个答案使我达到了我想要的结果,我将其标记为已接受。
    猜你喜欢
    • 2017-11-18
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多