• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

100分求教打印问题

ccliu1980 2004-11-03 05:31:47
我写了一个在web窗口中点击按钮开始打印的代码,不知道什么原因,点击后完全没反应.但是将这些代码放如window窗口中就可以打印了,以下为程序代码:
public class print1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Btnprint;
private Font printFont;
private StreamReader streamToPrint;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Btnprint.Click += new System.EventHandler(this.Btnprint_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Btnprint_Click(object sender, System.EventArgs e)
{
try
{
streamToPrint=new StreamReader("D:\\txt.txt");
try
{
printFont=new Font("Arial",20);
System.Drawing.Printing.PrintDocument pd=new System.Drawing.Printing.PrintDocument();
pd.PrintPage+=new System.Drawing.Printing.PrintPageEventHandler(this.pd_PrintPage);
pd.PrinterSettings=new System.Drawing.Printing.PrinterSettings();
pd.Print();
}
finally
{
streamToPrint.Close();
}
}
catch(Exception ex)
{
}
}

private void pd_PrintPage(object sender,System.Drawing.Printing.PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin=ev.MarginBounds.Left;
float topMargin=ev.MarginBounds.Top;
string line = null;
// Calculate the number of lines per page.
linesPerPage=ev.MarginBounds.Height/printFont.GetHeight(ev.Graphics);
// Print each line of the file.
while(count<linesPerPage&&((line=streamToPrint.ReadLine()) != null))
{
yPos=topMargin+(count*printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString("刘昌臣",printFont,Brushes.Black,leftMargin,yPos,new StringFormat());
count++;
}
// If more lines exist, print another page.
if(line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
}
希望各位高手指点
...全文
114 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ccliu1980 2004-11-04
谢谢各位参与
回复
xming076 2004-11-04
Web页面可以选中需要打印的部分,然后再打印。
或者用CSS控制某些部分不需要打印。
回复
ccliu1980 2004-11-03
在window窗口下当然上述的程序一点问题都没有,但是web窗口里好像没有printdialog组件
回复
ccliu1980 2004-11-03
由于是在web页面里,好像找不到printPreviewDialog以及printDialog,只能找到PrintDocument,所以上述所说的大印预览好像不适用啊,有什么办法能在web页面点击按钮开始打印的方法啊。由于不是大印整个页面,所以菜单栏的打印按钮不适用。
回复
earlsen 2004-11-03
对窗体进行打印预览 (Visual C#)
此示例说明如何对当前窗体进行打印预览的副本。

示例
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt (IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private Bitmap memoryImage;
private void CaptureScreen()
{
Graphics mygraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}
private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}
private void printButton_Click(System.Object sender, System.EventArgs e)
{
CaptureScreen();
printPreviewDialog1.Show();
}
编译代码
本示例需要:

名为 printDocument1 且包含 PrintPage 事件处理程序的 PrintDocument 组件。
名为 printPreviewDialog1 的 PrintPreviewDialog 组件,其 Document 属性设置为 printDocument1。
名为 printButton 且包含 Click 事件处理程序的 Button 对象。
该示例代码替换现有的事件处理程序。单击 printButton 时会显示窗体的打印预览。
回复
lypch 2004-11-03
有人写过打印预揽的程序啊?
回复
xming076 2004-11-03
WebForm只要点工具栏上面的打印按钮就可以打印了Hoho
回复
孟子E章 2004-11-03
WebForm要用
<input type=button value=print onclick="window.print()">
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-11-03 05:31
社区公告

让您成为最强悍的C#开发者