在不创建 HTML 文件的情况下打印 HTML 字符串?

Posted

技术标签:

【中文标题】在不创建 HTML 文件的情况下打印 HTML 字符串?【英文标题】:Printing An HTML String Without Creating An HTML File? 【发布时间】:2011-06-25 02:36:34 【问题描述】:

如何打印 html 字符串,以便正确识别和呈现所有 HTML 标记?我想可以创建一个 .HTML 文件并打印它,但如果有一种方法可以在不创建额外文件的情况下做到这一点,我会有兴趣学习如何。谢谢!

附录:

pd.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);
pd.Print();

更多代码:

static private void PrintDocument_PrintPage(Object sender, PrintPageEventArgs e) 
    Font printFont = new Font("Courier New", 12);
    e.Graphics.DrawString("<b>Hello</b> world", printFont, Brushes.Black, 0, 0);

打印结果:

<b>Hello</b> world

【问题讨论】:

你遇到了什么问题?我认为将所有适当的字符粘贴到 string 中会起作用,但也许不行? 如果您输出正确的 HTML,它将被“正确识别和呈现”。您要“打印”到哪里?你用什么来查看 HTML? 不幸的是它不能那样工作。真不知道从这里往哪个方向走…… 在什么情况下?您是说要获取和/或显示动态生成的 HTML 内容吗? 我只是想从 C# 字符串转到正确呈现的 HTML 打印输出 【参考方案1】:

Graphics 对象不理解 HTML,而DrawString 将完全按照您的要求执行,正如您所发现的那样。

您需要使用带有粗体字体的 Hello 和非粗体字体的 Graphics 对象 world 并删除 HTML 标记。

因此,对于更通用的方法,您需要一个 HTML 解析器(例如 HTML Agility Pack)和一种将 HTML 转换为不同字体的方法。

您可能会发现使用WebBrowser 控件并使用它来打印更容易。

【讨论】:

我可以从 C# 字符串直接转到 WebBrowserControl 打印而不编写单独的文件吗? @sooprise - 我自己没试过,但你应该可以直接使用DocumentStream

以上是关于在不创建 HTML 文件的情况下打印 HTML 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不覆盖之前数据的情况下创建多个 java txt 文件? [复制]

是否可能 HTML 下载属性可以在不使用 javascript 的情况下下载多个文件?

在不尝试打印的情况下验证 Postscript?

在不重新加载 web 视图的情况下更改 html 文本颜色

在不显示文件保存对话框的情况下将 FixedDocument/XPS 打印为 PDF

如何在不附加到 DOM 的情况下正确删除 html5 音频?