快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

在控制台应用程序中实现打印

我在以前的一篇文章中曾介绍到过如何从控制台命令中捕捉输出结果并将它放到剪贴板中。我经常需要从一些控制台命令中将文本输出结果打印出来,因此我对最后的例子进行了修改以使它支持打印。

.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);
}
}




接下来,我添加了一些命令行选项以使它能够将数据发送到剪贴板中或缺省的打印机上,或者同时发送到这两处

最后,我写了两个程序来将输出结果打印出来PrintData()方式用于建立一个PrintDocument对象并启动该打印过程。它还负责为打印页面处理添加事件处理程序。

PrintPage()方式用于打印每个页面。首先,我计算出符合打印页面的行数。字体的GetHeight()方式显示了单独一行的高度,PrintPageEvent的Marginbounds属性显示了每个页面的打印空间有多大。有了这些信息,我便可以简朴地绘制出页眉行、页面的每一行以及页脚行。

在打印框架中有一个小问题:PageBounds属性代表的是整个页面的大小,而不是可打印区域的大小。我曾试图将页眉和页脚限定在打印区域以外,但没有成功。在有些打印机上,打印区域以下的地方是不能被打印出来的。所以我只能简朴地调整页边距并将页眉和页脚放在打印区域中。





返回类别: 教程
上一教程: 10天学会ASP.net之第七天
下一教程: 从ASP迁移至ASP+

您可以阅读与"在控制台应用程序中实现打印"相关的教程:
· 创建分布式应用程序学习心得
· 使用.net下的系统事件增强应用程序
· .NET客户端应用程序:.NET应用程序更新组件(6)
· 为您的应用程序加上注册的限制
· C#消息队列应用程序 -1
    微笑服务 优质保证 索取样品