扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
你是否厌倦了将从控制台应用程序中选出的文本打印出来?这里将介绍一种方便的工具来帮你实现打印。
我在以前的一篇文章中曾介绍到过如何从控制台命令中捕获输出结果并将它放到剪贴板中。我常常需要从一些控制台命令中将文本输出结果打印出来,因此我对最后的例子进行了修改以使它支持打印。
.NET打印框架对于使用MFC的人来说并不陌生:你只需建立一个PrintDocument对象并调用其Print()方法就行。PrintDocument对象会调用你建立的事件处理来打印每个页面。打印完所有页面之后,打印处理会设置一个标记并结束打印。
在这个新的例子中,我做了三个地方的改动。首先,我修改了存储方法(storage)以便将被捕获的输入保存在一个ArrayList中,输入的每一行都成为该集合中的一个字符串: private void grabStream (TextReader inStream)
{
string str;
while (null != (str = inStream.ReadLine ()))
{
listOStrings.Add (str);
// Pipe it to the output:
System.Console.WriteLine (str);
}
}
接下来,我添加了一些命令行选项以使它能够将数据发送到剪贴板中或缺省的打印机上,或者同时发送到这两处(见javascript:openWindowRes('VS/2003_02/xml2html.asp?xmlfile=ConsoleApplication/List1.xml&xslfile=../../include/xsl/Mylist.xsl');">列表1)。
最后,我写了两个程序来将输出结果打印出来(见javascript:openWindowRes('VS/2003_02/xml2html.asp?xmlfile=ConsoleApplication/List2.xml&xslfile=../../include/xsl/Mylist.xsl');">列表2)。PrintData()方法用于建立一个PrintDocument对象并启动该打印过程。它还负责为打印页面处理添加事件处理程序。
PrintPage()方法用于打印每个页面。首先,我计算出符合打印页面的行数。字体的GetHeight()方法显示了单独一行的高度,PrintPageEvent的Marginbounds属性显示了每个页面的打印空间有多大。有了这些信息,我便可以简单地绘制出页眉行、页面的每一行以及页脚行。
在打印框架中有一个小问题:PageBounds属性代表的是整个页面的大小,而不是可打印区域的大小。我曾试图将页眉和页脚限定在打印区域以外,但没有成功。在有些打印机上,打印区域以下的地方是不能被打印出来的。所以我只能简单地调整页边距并将页眉和页脚放在打印区域中。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者