65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的 RTF 打印窗体

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.55/5 (5投票s)

2014 年 10 月 14 日

CPOL

3分钟阅读

viewsIcon

28491

downloadIcon

3298

富文本的 WYSIWYG 打印机界面

引言

这个窗体类为任何需要打印富文本的应用程序添加了完整的基本多页打印和页面预览功能。

背景

这个项目开始于我寻找一种打印富文本框控件内容的方法。我最初在 MSDN 上找到了 Martin Muller 提供的实现(可在此处找到)。

然而,这仅适用于单页富文本,并且不包括任何分页支持。然后我找到了一个更完整的解决方案,M.Rojas 的 RichTextBoxHelper可在此处找到,它具有正确分页所需的图形渲染支持。 我扩展了这个类,使其包含页面设置和打印设置对话框以及页面预览,因此它提供了标准打印界面所需的一切。 它还公开了任何异常,以便它们可以被调用程序处理,并带有一个 Exception 参数。 然后我将其封装在一个小窗体中,允许默认打印机选择,可以将其添加到任何项目。 如上所述,最新版本被封装在一个 DLL 中。

Using the Code

要使用该窗体,只需将 PrintForm.cs 及其附带的 PrintForm.designer.csPrintform.resx 添加到您的项目中。 另添加 RichTextBoxPrintHelper.cs 类。 更改 PrintForm.csdesigner.cs 代码中的命名空间引用以匹配项目命名空间。 然后,当您想要打印富文本框的内容时,只需创建一个新的 PrintForm,将富文本框内容作为 string 传递给它,然后使用 ShowDialog(this) 打开窗体。 窗体按钮是不言自明的。 要更改默认打印机,请单击显示的打印机名称以获取已安装打印机的下拉框。

// Create The Form, pass the richtext, and window title, and call it

PrintForm pf = new PrintForm();
pf.Document = yourRichTextBox.rtf;
pf.windowtitle = "My Application";
pf.ShowDialog(this); // center form in parent app
if (pf.error)
 { 
    MyExceptionHandler(pf.printexception); / handle the exception
 };
pf.Dispose(); / required if you use ShowDialog() rather than Show();

// The richtext can be also passed in the constructor, if desired, via an override

Printform pf = pf(YourRichTextBox.rtf);
pf.ShowDialog(this);

在最新版本中,PrintForm 被合并到 printhelper.dll 中,这使其更容易添加到项目中,并且具有 PageSettingsMargins、横向或纵向模式)的新重载,并添加了带页码的页眉。 要使用它,请将 printhelper.dll 复制到您的项目文件夹,然后使用“添加项”和“添加引用”将文件添加到您的项目中。 在标头中包含“using printhelper.dll;”,并创建一个 PrintTools 实例,如 PrintTools pt = new PrintTools()。 然后,您可以使用 GeneralPrintForm() 的 3 个重载之一来打印您的 rtf,如 pt.GeneralPrintForm("Title",RichTextBox1.Rtf,ref ex)。 DLL 和演示的源代码都已记录。 如果您愿意,您仍然可以使用 PrintForm 本身,如上所述。 只需将文件从源代码复制到您的项目中并更正命名空间引用即可。

关注点

考虑到对许多其他常见任务的广泛支持,这使得该环境对于新手程序员来说非常容易使用,但我发现令人惊讶的是,在 C# 托管代码类中没有简单的方法来打印富文本框的内容。 PrintForm 包装器类在很大程度上解决了这个问题,但缺少更复杂的功能,例如在真正的文字处理器中找到的固定分页符、页眉和页脚。 将这些添加到标准富文本框控件将完成该项目。

最新版本现在包括对页面设置的支持以及添加带有页码的文档页眉的功能。 非常感谢 Andrew 的这篇 stackoverflow 文章

历史

  • 10-12-2014:初始版本 1.0.0.1
  • 09-28-2016:版本 1.0.0.3
© . All rights reserved.