代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
RichTextBox打印和打印成图片
作者:
zgke
/ 发布于
2014/7/29
/
558
这里类把RICHTEXTBOX的内容打印到DOCUMENT里 using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Drawing.Printing; using System.Runtime.InteropServices; namespace WindowsApplication3.ControlPrint.PrintClass { public class MyRichTextBox { /* 使用方式 ControlPrint.PrintClass.MyRichTextBox MyText= new WindowsApplication3.ControlPrint.PrintClass.MyRichTextBox(richTextBox1); ControlPrint.PrintClass.PrintControllerFile PrintControll = new WindowsApplication3.ControlPrint.PrintClass.PrintControllerFile(); MyText.Document.DefaultPageSettings.Margins.Bottom = 0; MyText.Document.DefaultPageSettings.Margins.Left = 0; MyText.Document.DefaultPageSettings.Margins.Right = 0; MyText.Document.DefaultPageSettings.Margins.Top = 0; //设置边局 MyText.Document.PrintController = PrintControll; MyText.Document.Print(); for (int i = 0; i != PrintControll.Image.Count; i++) { PrintControll.Image[i].Save(@"C:/" + i.ToString() + ".emf"); } */ private int checkPrint = 0; private RichTextBoxPrintCtrl _RichTextBox; private PrintDocument _PrintDocument = new PrintDocument(); public PrintDocument Document { get { return _PrintDocument; } } public MyRichTextBox(RichTextBox MyRichTextBox) { _RichTextBox = new RichTextBoxPrintCtrl(); _RichTextBox.Rtf = MyRichTextBox.Rtf; _PrintDocument.BeginPrint += new PrintEventHandler(_PrintDocument_BeginPrint); _PrintDocument.PrintPage += new PrintPageEventHandler(_PrintDocument_PrintPage); } void _PrintDocument_PrintPage(object sender, PrintPageEventArgs e) { checkPrint = _RichTextBox.Print(checkPrint, _RichTextBox.TextLength, e); if (checkPrint < _RichTextBox.TextLength) e.HasMorePages = true; else e.HasMorePages = false; } void _PrintDocument_BeginPrint(object sender, PrintEventArgs e) { checkPrint = 0; } private class RichTextBoxPrintCtrl : RichTextBox { //Convert the unit used by the .NET framework (1/100 inch) //and the unit used by Win32 API calls (twips 1/1440 inch) private const double anInch = 14.4; [StructLayout(LayoutKind.Sequential)] private struct RECT { public int Left; public int Top; public int Right; public int Bottom; } [StructLayout(LayoutKind.Sequential)] private struct CHARRANGE { public int cpMin; //First character of range (0 for start of doc) public int cpMax; //Last character of range (-1 for end of doc) } [StructLayout(LayoutKind.Sequential)] private struct FORMATRANGE { public IntPtr hdc; //Actual DC to draw on public IntPtr hdcTarget; //Target DC for determining text formatting public RECT rc; //Region of the DC to draw to (in twips) public RECT rcPage; //Region of the whole DC (page size) (in twips) public CHARRANGE chrg; //Range of text to draw (see earlier declaration) } private const int WM_USER = 0x0400; private const int EM_FORMATRANGE = WM_USER + 57; [DllImport("USER32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); /// <summary> /// /// </summary> /// <param name="charFrom">页号</param> /// <param name="charTo">文字长度</param> /// <param name="e">打印</param> /// <returns></returns> public int Print(int charFrom, int charTo, PrintPageEventArgs e) { //Calculate the area to render and print RECT rectToPrint; rectToPrint.Top = (int)(e.MarginBounds.Top * anInch); rectToPrint.Bottom = (int)(e.MarginBounds.Bottom * anInch); rectToPrint.Left = (int)(e.MarginBounds.Left * anInch); rectToPrint.Right = (int)(e.MarginBounds.Right * anInch); //Calculate the size of the page RECT rectPage; rectPage.Top = (int)(e.PageBounds.Top * anInch); rectPage.Bottom = (int)(e.PageBounds.Bottom * anInch); rectPage.Left = (int)(e.PageBounds.Left * anInch); rectPage.Right = (int)(e.PageBounds.Right * anInch); IntPtr hdc = e.Graphics.GetHdc(); FORMATRANGE fmtRange; fmtRange.chrg.cpMax = charTo; //Indicate character from to character to fmtRange.chrg.cpMin = charFrom; fmtRange.hdc = hdc; //Use the same DC for measuring and rendering fmtRange.hdcTarget = hdc; //Point at printer hDC fmtRange.rc = rectToPrint; //Indicate the area on page to print fmtRange.rcPage = rectPage; //Indicate size of page IntPtr res = IntPtr.Zero; IntPtr wparam = IntPtr.Zero; wparam = new IntPtr(1); //Get the pointer to the FORMATRANGE structure in memory IntPtr lparam = IntPtr.Zero; lparam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fmtRange)); Marshal.StructureToPtr(fmtRange, lparam, false); //Send the rendered data for printing res = SendMessage(Handle, EM_FORMATRANGE, wparam, lparam); //Free the block of memory allocated Marshal.FreeCoTaskMem(lparam); //Release the device context handle obtained by a previous call e.Graphics.ReleaseHdc(hdc); //Return last + 1 character printer return res.ToInt32(); } } } } 下面的内把PRINTDOCUMENT里的图形 using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Printing; using System.Collections.Generic; using System.Diagnostics; namespace WindowsApplication3.ControlPrint.PrintClass { /// <summary> /// 打印到图形类 /// </summary> internal class PrintControllerFile : PreviewPrintController { private IList<Image> _Image = new List<Image>(); /// <summary> /// 获取打印的图形 /// </summary> public IList<Image> Image { get {return _Image; } } public override void OnEndPage(PrintDocument document, PrintPageEventArgs e) { base.OnEndPage(document, e); PreviewPageInfo[] PageInfos = GetPreviewPageInfo(); PreviewPageInfo PageInfo = PageInfos[PageInfos.Length - 1]; _Image.Add(PageInfo.Image); //_Metafile = (Metafile)MyImage; } } }
试试其它关键字
RichTextBox
打印成图片
RichTextBox打印
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
zgke
贡献的其它代码
(
46
)
.
让程序只保证一个进程的类
.
获取PictureBox的SizeMode为Zoom图形的大小
.
获取RICHTEXTBOX所有图形的位置和大小
.
实现系统热键盘注册的类.
.
操作CUR的类
.
读写 Photoshop PSD文件 操作类
.
获取系统鼠标指针
.
隐藏滚动条
.
实现BCD码
.
获取EXCEL所有表名
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3