| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1233 人关注过本帖
标题:如何实现打印?
只看楼主 加入收藏
zousoft
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2005-3-22
收藏
 问题点数:0 回复次数:7 
如何实现打印?
小弟在此请教各位大侠,  如何实现打印功能? 把写具体代码时,麻烦再注释一下,多谢!
搜索更多相关主题的帖子: 打印 注释 
2005-07-24 17:40
jackey163
Rank: 1
等 级:新手上路
帖 子:230
专家分:0
注 册:2005-7-21
收藏
得分:0 

在MSDN里面输入“打印”就可以查到用法,例子等,下面摘录小部分! System.Drawing.Printing 命名空间提供与打印相关的服务。 通常,您会创建 PrintDocument 类的新实例,设置对打印内容进行描述的属性,然后调用 Print 方法来实际打印文档。

使用 PrintPageEventArgs.Graphics 属性可指定要打印的输出内容。如果您正在打印文本文件,请按如下方式使用 StreamReader:从输出流中一次读取一行,然后调用 DrawString 方法绘制图形对象中的行。有关此过程的更多信息,请参见 GraphicsStreamReader 类。

当在派生类中实现后,PrintController 控制如何打印 PrintDocumentPrintDocument.Print 方法调用打印控制器的 OnStartPrintOnEndPrintOnStartPageOnEndPage 方法,这些方法指示打印机如何打印文档。有关打印对话框的更多信息,请参见 PrintDialogPageSetupDialog

打印预览进程使用专用的打印控制器、对话框和控件。有关这种打印控制器和对话框的示例,请参见 PreviewPrintControllerPrintPreviewDialogPrintPreviewControl

命名空间层次结构


.net 方面可以交流下 MSN:jackeyhuang123@
2005-07-25 14:02
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 

先引用System.Drawing.Printing; private void button3_Click(object sender, System.EventArgs e) { PrintDocument p = new PrintDocument();//建立一个PrintDocument对象 p.DocumentName="SunA";//乱起个名字吧~ p.PrintPage+=new PrintPageEventHandler(p_PrintPage);//在打印的时候会用得到的 PrintDialog prd = new PrintDialog();//选择打印机的对话框 prd.Document=p;//设置它的Document对象,这一步必不可少 if(prd.ShowDialog()==DialogResult.OK) { p.PrinterSettings=prd.PrinterSettings;//打印的一些设置应用到p上面 p.Print();//开干 } }

private void p_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.DrawLine(Pens.Black,new Point(20,20),new Point(50,50));//用Graphics的形式来,随便你怎么画了~ }


寻求挑战,追求完美 Oh,my god!
2005-07-25 16:57
eastsnake
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2005-3-8
收藏
得分:0 
楼上的说的确实是打印,但C#中能不能象VB那样直接打印窗体,我有些窗体表格想打印,用上面的方法只适合打印字符文本,总不能用Graphics一个一个画矩形吧?
盼求助!!!!!!!!!!1

程序员是男孩,语言是女孩; 每个男孩都希望能交往更多的女孩; 但是却没有一个男孩真正了解一个女孩; 男孩总是不能专心一个女孩,而女孩却总是在变~
2005-07-26 11:01
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
你说得没错,就是这样画,让你看看吧~这是一个打报表的例子
private float PrintPageHeader(System.Drawing.Printing.PrintPageEventArgs e)
{
  try
  {  
    float yPos =  e.MarginBounds.Top;
    String line=null;
    Font printTitleFont= new Font("新细明体",18,FontStyle.Bold);
    Font printHeaderFont= new Font("新细明体",18,FontStyle.Bold);
    StringFormat sfCenter= new StringFormat();
    sfCenter.Alignment = StringAlignment.Center;
    StringFormat sfRight= new StringFormat();
    sfRight.Alignment = StringAlignment.Far;
    StringFormat sfLeft= new StringFormat();
    sfLeft.Alignment = StringAlignment.Near ;
    //print company name
    line="恒逸资讯股份有限公司";
    e.Graphics.DrawString (line, printTitleFont, Brushes.Black, new RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height), sfCenter);
    yPos+=printTitleFont.GetHeight(e.Graphics);
    //print report name
    line="讨论区报表";
    e.Graphics.DrawString (line, printTitleFont, Brushes.Black, new RectangleF(e.MarginBounds.Left, e.MarginBounds.Top+printTitleFont.GetHeight(e.Graphics), e.MarginBounds.Width, e.MarginBounds.Height), sfCenter);
    e.Graphics.DrawString ("列印日期:" +DateTime.Now.ToString("yyyy-MM-dd",null)  , mPrintFont, Brushes.Black, new RectangleF(e.MarginBounds.Left, e.MarginBounds.Top+printTitleFont.GetHeight(e.Graphics), e.MarginBounds.Width, e.MarginBounds.Height), sfRight);
    yPos+=printHeaderFont.GetHeight(e.Graphics);
    //print first line
    e.Graphics.DrawLine(new Pen(Color.Black,4),e.MarginBounds.Left,yPos,e.MarginBounds.Right ,yPos);   
    yPos+=4;
    //print column header
    e.Graphics.DrawString ("主题代码", mPrintFont, Brushes.Black, new RectangleF(e.MarginBounds.Left, yPos, e.Graphics.MeasureString("主题代码",mPrintFont).Width, mPrintFont.GetHeight(e.Graphics)), sfLeft);
    e.Graphics.DrawString ("发布日期", mPrintFont, Brushes.Black, new RectangleF(e.MarginBounds.Left+e.Graphics.MeasureString("主题代码 ",mPrintFont).Width, yPos, e.Graphics.MeasureString("0000-00-00",mPrintFont).Width, mPrintFont.GetHeight(e.Graphics)), sfLeft);
    e.Graphics.DrawString ("发布者"  , mPrintFont, Brushes.Black, new RectangleF(e.MarginBounds.Left+e.Graphics.MeasureString("主题代码 0000-00-00  ",mPrintFont).Width, yPos, e.Graphics.MeasureString("发布者发布者",mPrintFont).Width, mPrintFont.GetHeight(e.Graphics)), sfLeft);
    e.Graphics.DrawString ("主题"    , mPrintFont, Brushes.Black, new RectangleF(e.MarginBounds.Left+e.Graphics.MeasureString("主题代码 0000-00-00  发布者发布者 ",mPrintFont).Width, yPos, e.MarginBounds.Width-(e.MarginBounds.Left+e.Graphics.MeasureString("主题代码 0000-00-00 发布者发布者 ",mPrintFont).Width)  , mPrintFont.GetHeight(e.Graphics)), sfLeft);
    yPos+=mPrintFont.GetHeight(e.Graphics);
   
    //print 2nd line
    e.Graphics.DrawLine(new Pen(Color.Black,4),e.MarginBounds.Left,yPos,e.MarginBounds.Right ,yPos);   
    yPos+=4;
    //print page no
    float lpp = (e.MarginBounds.Height- yPos)  / mPrintFont.GetHeight(e.Graphics) ;
    mTotalPageCount=(mDataSet1.Tables["forum"].Rows.Count / Convert.ToInt32( lpp))  +1 ;
    e.Graphics.DrawString ("页数:"+mCurrentPageNo.ToString()+"/"+mTotalPageCount.ToString()  , mPrintFont, Brushes.Black, new RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height), sfRight);
    return yPos;
  }
  catch(System.Exception E)
  {
    ErrorHandler(E.ToString());
    return 0;
  }
}
用Graphics画我觉得蛮方便的啊~哪里不行呢?晕晕的...

寻求挑战,追求完美 Oh,my god!
2005-07-27 08:47
eastsnake
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2005-3-8
收藏
得分:0 
谢了,我先这么写。
看来你比我有耐心

不过,谁能把它写成控件给我调用就好了,我是个懒人,期待…………

程序员是男孩,语言是女孩; 每个男孩都希望能交往更多的女孩; 但是却没有一个男孩真正了解一个女孩; 男孩总是不能专心一个女孩,而女孩却总是在变~
2005-07-27 09:51
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
你想要什么样的,说说看~太Terrible的组件没人会去做,那没有任何必要

寻求挑战,追求完美 Oh,my god!
2005-07-27 16:53
eastsnake
Rank: 1
等 级:新手上路
帖 子:127
专家分:0
注 册:2005-3-8
收藏
得分:0 
就是把窗体上所显示的都打印出来,如VB的form.print

程序员是男孩,语言是女孩; 每个男孩都希望能交往更多的女孩; 但是却没有一个男孩真正了解一个女孩; 男孩总是不能专心一个女孩,而女孩却总是在变~
2005-07-28 15:09
快速回复:如何实现打印?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016688 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved