1.自定义控件,继承richBox

public class RichTextBoxPrintCtrl : RichTextBox
{
//private const double anInch = 14.4;
private const double anInch1 = 150;
private const double anInch2 = 200;
[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, Int32 msg, Int32 wParam, Int32 lParam); public int PrintImage(int nStartFrom, Graphics g)
{
RECT rcToPrint = default(RECT);
FORMATRANGE fr = default(FORMATRANGE);
IntPtr iptHdc = IntPtr.Zero;
IntPtr iptRes = IntPtr.Zero;
IntPtr iptParam = IntPtr.Zero;
// Calculate the area to render and print
rcToPrint.Top = 0;
rcToPrint.Bottom = (int)Math.Ceiling((g.VisibleClipBounds.Height * anInch2));
rcToPrint.Left = 0;
rcToPrint.Right = (int)Math.Ceiling((g.VisibleClipBounds.Width * anInch1));
iptHdc = g.GetHdc();
//Indicate character from to character to
fr.chrg.cpMin = nStartFrom;
fr.chrg.cpMax = -1;
//Use the same DC for measuring and rendering point at printer hDC
fr.hdc = fr.hdcTarget = iptHdc;
//Indicate the area on page to print
fr.rc = rcToPrint;
//Get the pointer to the FORMATRANGE structure in memory
iptParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fr));
Marshal.StructureToPtr(fr, iptParam, false);
//Send the rendered data for printing
iptRes = SendMessage(this.Handle, EM_FORMATRANGE, 1, iptParam.ToInt32());
//Free the block of memory allocated
Marshal.FreeCoTaskMem(iptParam);
//Release the device context handle obtained by a previous call
g.ReleaseHdc(iptHdc);
//Return last + 1 character printer
return iptRes.ToInt32();
}
}

2.引用imageText即是。

Bitmap imageText = new Bitmap(richTextBoxPrintCtrl1.Width, richTextBoxPrintCtrl1.Height);
Graphics g = Graphics.FromImage(imageText);
richTextBoxPrintCtrl1.PrintImage(0, g);

c# richBox内容转图片的更多相关文章

  1. PHP限制HTML内容中图片必须是本站的方法

    本文实例讲述了PHP限制HTML内容中图片必须是本站的方法.分享给大家供大家参考.具体实现方法如下: 1. PHP代码如下: <?php $dom = new DOMDocument; $dom ...

  2. 将UIWebView显示的内容转为图片和PDF

    今天开发MarkEditor时要用到将 UIWebView 中显示的内容转为图片,方便转发到各个社交网络(Twiiter,Facebook,Weibo),这样内容就不受长度限制,类似于长微博. 之前关 ...

  3. 为CKEDITOR内容中图片加上 图片服务器路径

    做网站的时候,前台和后台是分开的, 用了CKEDITOR上传图片,但是发现内容带图片的时候,前台Web浏览的时候是一个红X,一看路径不对,上传的到数据库中的是相对的虚拟路径,例如:<img al ...

  4. 将PPT文件内容转换为图片放在Email邮件正文中发送

    通过Email推送统计报告.一般除了要求将PPT报告文件作为附件发给用户,同时希望将报告内容在邮件中直观展示. 一份统计报告中经常包含柱状图.饼图.好看的图表,这些信息要直接在Email中展示比较复杂 ...

  5. python scrapy爬取知乎问题和收藏夹下所有答案的内容和图片

    上文介绍了爬取知乎问题信息的整个过程,这里介绍下爬取问题下所有答案的内容和图片,大致过程相同,部分核心代码不同. 爬取一个问题的所有内容流程大致如下: 一个问题url 请求url,获取问题下的答案个数 ...

  6. Lodop导出图片,导出单页内容的图片

    用如下语句设置图片的格式,设置导出的图片初识的默认名称,Lodop可以把打印内容导出成图片. LODOP.SET_SAVE_MODE("SAVEAS_IMGFILE_EXENAME" ...

  7. dedecms织梦手机端文章内容页图片不能自适应解决方法

    dedecms织梦手机端文章内容页图片不能自适应解决方法: 方法一修改手机端文章页模板代码: 找到并打开手机端的文章内容页模板,将里面的{dede:field.body/}标签修改一下,改为如下的标签 ...

  8. android截屏:保存一个view的内容为图片并存放到SD卡

    项目中偶尔会用到截屏分享,于是就有了下面这个截屏的方法~ 下面得saveImage()方法就是保存当前Activity对应的屏幕所有内容的截屏保存. private void saveImage() ...

  9. 基于内容的图片检索CBIR(Content Based Image Retrieval)简介

    传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依据图像描述的字符匹配程度提供检索结果的方法,简称“以字找图”,既耗时又主观多义.基于内容的图像检索客服“以字找图”方式的 ...

随机推荐

  1. linux的用户管理相关配置文件

    Linux的管理命令的本质不过是对配置文件/etc相关文件的修改罢了 

  2. underscore.js常用方法整理(慢慢完善)

    整理自Underscore.js (1.8.3) 中文文档,http://www.css88.com/doc/underscore/ 1. extend _.extend() 复制对象中的所有属性到目 ...

  3. exynos4412—链接脚本复习

    在u-boot下,定义变量, 编译,编译完后  使用arm-linux-nm arm    没有去头的二进制可执行文件 都在BSS段,均为初始化. 打印之后会出算随机值. 目前还处于uboot阶段,如 ...

  4. Docker 运行时的用户与组管理的方法

    docker 以进程为核心, 对系统资源进行隔离使用的管理工具. 隔离是通过 cgroups (control groups 进程控制组) 这个操作系统内核特性来实现的. 包括用户的参数限制. 帐户管 ...

  5. Windows下安装配置MinGW GCC调试环境

    下载安装文件:Sourceforge  64位系统安装选项记得选x86_64.安装过程中连不上服务器的话也可以选择下载压缩包. 配置环境变量,假设mingw安装目录为C:\mingw-w64\ming ...

  6. Linux入门第五天——shell脚本入门(下)基础语法之循环

    一.循环 1.不定循环 有两种形式: while [ condition ] <==中括号内的状态就是判断式 do <==do 是循环的开始! 程序段落 done <==done 是 ...

  7. 20145234黄斐《Java程序设计》实验一—Java开发环境的熟悉(Linux + Eclipse)

    实验步骤 由于实验时间比较紧张,这里只有最终结果的截图 (一)命令行下Java程序开发 (二)Eclipse下Java程序开发.调试 (三)练习 实现求正整数1-N之间所有质数的功能,并进行测试 实验 ...

  8. css首行缩进2个字符

    css设置: p{ text-indent:2em; }

  9. sqlite3日期数据类型

    一.sqlite3日期数据类型,默认用datetime解析(根据stackflow) 使用时注意三点: 1. 创建表时,字段 DT 的类型为 date 2. 插入数据时,DT字段直接为 str 类型 ...

  10. dp合集 广场铺砖问题&&硬木地板

    dp合集 广场铺砖问题&&硬木地板 很经典了吧... 前排:思想来自yali朱全民dalao的ppt百度文库免费下载 后排:STO朱全民OTZ 广场铺砖问题 有一个 W 行 H 列的广 ...