C#打印panel控件中内容 分页的问题

k6693075 2012-04-23 11:53:47
作了一个Winform程序。可以通过查询数据库提取图片、文字信息显示在一个panel中。信息都是动态的。但是都是显示在一个自动伸展的Panel中。
打印的代码如下。
this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);
private void BtnPrint_Click(object sender, EventArgs e)
{
Graphics graphic = panelReports.CreateGraphics();
Size s = panelReports.Size;
Bitmap sourceBitmap = new Bitmap(s.Width, s.Height);
Bitmap memImage = new Bitmap(s.Width, s.Height, graphic);
Graphics memGraphic = Graphics.FromImage(memImage);
IntPtr dc1 = graphic.GetHdc();
IntPtr dc2 = memGraphic.GetHdc();
BitBlt(dc2, 0, 0, panelReports.ClientRectangle.Width, panelReports.ClientRectangle.Height,
dc1, 0, 0, 13369376);
Image print_image = (Image)memImage.Clone();
graphic.ReleaseHdc(dc1);
memGraphic.ReleaseHdc(dc2);
graphic.Dispose();
memGraphic.Dispose();
//memImage.Dispose();
PrintPreviewDialog dlg = new PrintPreviewDialog();
dlg.Width = s.Width;
dlg.Height = s.Height;
dlg.Document = printDocument1;
pageSetupDialog1.Document = printDocument1;
pageSetupDialog1.ShowDialog();
if (dlg.ShowDialog() == DialogResult.OK)
printDocument1.Print();
}
void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Bitmap bmp = new Bitmap(this.panelReports.Width, this.panelReports.Height);
this.panelReports.DrawToBitmap(bmp, new Rectangle(Point.Empty, this.panelReports.Size));

e.Graphics.DrawImage(bmp, Point.Empty);

}

[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]//应用API函数
private static extern bool BitBlt(
IntPtr hdcDest, // 目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的X坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的长度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的X坐标
System.Int32 dwRop // 光栅的操作值
);
打印功能可以实现了。但是内容多的时候不知道怎么实现分页。需求要求是A4纸宽度。一半14高度。
打印这段代码是看网上的教程弄的。熟悉的朋友帮忙解说下。或者有更好的可以实现分页打印的方法帮忙提供下。谢谢
...全文
412 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
大胡子陈工 2014-10-12
  • 打赏
  • 举报
回复
lz这个有没有解决了,我现在也遇到这样的问题。
k6693075 2012-04-24
  • 打赏
  • 举报
回复
- -没人回答么
第一部分 构建ASP.NET页面 第1章 ASP.NET Framework概览 2 1.1 ASP.NET和.NET Framework 5 1.1.1 框架类库 5 1.1.2 公共语言运行库 9 1.2 ASP.NET件 10 1.2.1 ASP.NET件概览 11 1.2.2 HTML件 12 1.2.3 理解和处理件事件 12 1.2.4 视图状态 17 1.3 ASP.NET页面 20 1.3.1 动态编译 20 1.3.2 件树 23 1.3.3 使用代码隐藏页面 24 1.3.4 处理页面事件 27 1.3.5 使用Page.IsPostBack属性 29 1.3.6 调试和跟踪ASP.NET页面 30 1.3.7 跟踪页面执行 33 1.4 安装ASP.NET Framework 35 1.5 小结 37 第2章 使用标准件 38 2.1 显示信息 38 2.1.1 使用Label件 38 2.1.2 使用Literal件 42 2.2 接收用户输入 44 2.2.1 使用TextBox件 44 2.2.2 使用CheckBox件 50 2.2.3 使用RadioButton件 52 2.3 提交表单数据 55 2.3.1 使用Button件 55 2.3.2 使用LinkButton件 57 2.3.3 使用ImageButton件 59 2.3.4 Button件使用客户端脚本 62 2.3.5 执行跨页面发送 64 2.3.6 指定默认按钮 67 2.3.7 处理Command事件 68 2.4 显示图像 70 2.4.1 使用Image件 70 2.4.2 使用ImageMap件 71 2.5 使用Panel件 75 2.6 使用HyperLink件 79 2.7 小结 81 第3章 使用验证件 82 3.1 验证件概述 82 3.1.1 验证件与JavaScript 85 3.1.2 使用Page.IsValid 85 3.1.3 设置Display属性 86 3.1.4 突出显示验证错误 86 3.1.5 使用验证组 90 3.1.6 禁用验证 93 3.2 使用RequiredFieldValidator件 94 3.3 使用RangeValidator件 97 3.4 使用CompareValidator件 99 3.5 使用RegularExpressionValidator件 103 3.6 使用CustomValidator件 105 3.7 使用ValidationSummary件 111 3.8 创建自定义验证件 114 3.8.1 创建LengthValidator件 115 3.8.2 创建AjaxValidator件 117 3.9 小结 121 第4章 使用Rich件 122 4.1 接收上传文件 122 4.1.1 把文件保存到文件系统 123 4.1.2 把文件保存到数据库 125 4.1.3 上传大文件 128 4.2 显示日历 133 4.2.1 创建弹出式日期选择器 135 4.2.2 根据数据库表呈现日历 137 4.3 显示广告 141 4.3.1 在XML文件保存广告 141 4.3.2 在数据库表存储广告 144 4.3.3 跟踪显示和转到 145 4.4 显示不同的页面视图 149 4.4.1 显示选项卡式页面视图 149 4.4.2 显示多部分表单 152 4.5 显示向导 153 4.6 小结 157 第二部分 设计ASP.NET网站 第5章 使用母版页设计网站 160 5.1 创建母版页 160 5.1.1 创建默认内容 163 5.1.2 嵌套母版页 166 5.1.3 在母版页使用图片和超链接 170 5.1.4 在Web配置文件注册母版页 172 5.2 修改母版页内容 172 5.2.1 使用Title属性 173 5.
第1章(\ch01) 示例描述:介绍Visual Studio 2008的使用。 HelloWorld 第一个C#制台应用程序 第2章(\ch02) 示例描述:学习C#基本语法实例。 CharString 演示字符和字符串的使用 Enum 演示枚举类型的使用 FuncOverride 演示函数重载的使用 Integer 演示数值类型的使用 UseArray 演示数组定义和使用 UseFuc 演示函数的调用 UseIf 演示If、Switch选择语句使用 UseWhile 演示while、loop、for循环语句使用 第3章(\ch03) 示例描述:学习C#面向对象开发实例。 AnimalPerson 演示C#类的使用 Anonymous 演示匿名类的使用 ClsIndexeer 演示类索引器的使用 ExtMethod 演示扩展方法的使用 Inherit 演示类继承的实例 NewMethod 演示new关键字覆盖父类方法实例 UseClass 演示C#类的使用实例 UseClassProperty 演示类属性(Property)的使用 UseDElegate 演示委托的使用 UseException 演示异常的使用 UseInterface 演示接口的使用 第4章(\ch04) 示例描述:介绍C#常用集合类的使用。 CreateHashTable 演示创建Hash表实例 AddHashItem 演示添加元素到Hash表实例。 UseHashItem 演示Hash表属性、方法的使用实例 IndexList 演示通过索引访问List列表元素实例 UseList 演示List列表属性、方法的使用实例 FindList 演示在List列表搜索元素实例 RemoveList 演示删除List列表元素实例 HashProperty 演示Hash表属性的使用实例 RemoveArrayList 演示删除ArrayList元素实例 SearchArrayList 演示在ArrayList查找元素实例 UseArrayList 演示ArrayList属性、方法的使用实例 CreateDic 演示Dictionary字典的使用实例 第5章(\ch05) 示例描述:学习Windows Form程序和窗体件的使用。 SimpleForm 第一个窗体应用程序实例 UseButton 演示Button按钮件的使用实例 UseCheckBox 演示CheckBox复选框件的使用实例 UseComboBox 演示ComboBox下拉列表件的使用实例 UseGroupBox 演示GroupBox分组件的使用实例 UseLabel 演示Label标签件的使用实例 UseListBox 演示ListBox列表件的使用实例 UseMaskedTextBox 演示MaskedTextBox格式文本框件使用实例 UseMenu 演示MenuStrip菜单件使用实例 UseMonthCaledar 演示MonthCaledar日历件使用实例 UsePanel 演示Panel面板件使用实例 UseRadioButton 演示RadioButton单选框件使用实例 UseStatuStrip 演示StatuStrip状态栏件使用实例 UseTabControl 演示TabControl分页件使用实例 UseTextBox 演示TextBox文本框件使用实例 UseToolStrip 演示ToolStrip工具栏件使用实例 第6章(\ch06) 示例描述:学习简单窗体应用程序具体开发实例。 SimpleTextEditor 简易文本编辑器实例 第7章(\ch07) 示例描述:学习多文档窗体应用程序具体开发实例。 AdvTextEditor 改进的多文档文本编辑器实例 第8章(\ch08) 示例描述:学习自定义件的开发和使用。 IntegerTextBox 演示数字文本框自定义件的开发和使用实例 UseCaculatorUC 演示计算器自定义件的开发和使用实例

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧