C#进行Visio二次开发之图纸打印
2008-05-28 20:38
393 查看
几种打印模式[/b]
Visio的二次开发中,我们往往需要打印文档,这也是正常不过的需求,Visio的Document对象提供了下面几种打印模式:
上面几种是什么意思呢?下面详细解说下,visPrintAll是将当前的文档进行分页打印,如果是你的控件中有多个页面的话,使用方法如下:
visPage.Document.PrintOut(VisPrintOutRange.visPrintAll, 1, 1, false, "", false, visPage.Name, 1, false, false);
visPrintCurrentView是将你看到的窗体视图内容打印出来(一般很少用,因为可能截取到一半的区域而已),用法如下:
visPage.Document.PrintOut(VisPrintOutRange.visPrintCurrentView, 1, 1, false, "", false, visPage.Name, 1, false, false);
visPrintSelection就是打印选取的内容,这个有用,当你选中一部分东西,想将其打印出来的时候。不过注意的是,你要确保你选中了内容,否则会打印出来是整个控件页面的内容,其用法如下:
visPage.Document.PrintOut(VisPrintOutRange.visPrintSelection, 1, 1, false, "", false, visPage.Name, 1, false, false);
其他的用法大同小异,可以自己下去试试。
另外还有一种打印方式,是打印一个大页面中的一部分,这个就需要技巧了,首先你需要获取到页面的Picture对象,转换为Image对象(下面介绍如何转换),然后打印整个Image对象中的一部分,通过定位左上角位置,和输出矩形大小就可以了。
Rectangle srcRect = new Rectangle(dblLeft, dblTop, this.visioImage.Width /2, this.visioImage.Height/2);
e.Graphics.DrawImage(this.visioImage, destRetangle, srcRect, GraphicsUnit.Pixel);
Visio[/b]的Picture[/b]属性及转换
[/b]
Visio文档打印的时候,有时候需要预览下内容,那如何实现呢,其实也很简单,因为你打印的Page对象有一个Picture的属性,可以用来显示的(Window.Selection也有一个这么对象,当然就可以用来预览选择的内容了)。不过到这里别高兴太早,因为Picture对象是IPictureDisp类型的,你需要转换为PicutureBox对象所能识别的Image类型,不过这个东西不是那么容易转换的,呵呵。
费了九牛二虎之力,终于查到了转换的方法,下面介绍下吧,以免大家走弯路。
先建立一个AxHostConverter的转换类,继承自 AxHost,如下:
public class AxHostConverter : AxHost
在赋值给PictureBox的Image对象的时候,如此这般就OK了
pictureBox1.Image = AxHostConverter.PictureDispToImage(this.visPage.Picture);
打印页边距设置问题
再说另外一个问题,不知道大家有没有注意到,页面设置对话框中,页边距中的值默认是10,你确定之后,值就变小了,再打开确定,值变得更小了,这是因为页边距值的转换出了问题,要正常工作,需要做一些转换的工作。下面贴出代码,一目了然。
PageSetupDialog dlg = new PageSetupDialog();
dlg.Document = PrintDocument;
dlg.PageSettings.Margins = PrinterUnitConvert.Convert(dlg.PageSettings.Margins,
PrinterUnit.ThousandthsOfAnInch, PrinterUnit.HundredthsOfAMillimeter);
if (dlg.ShowDialog() == DialogResult.OK)
else
最后给一个图,显示下所完成的工作:
转载请注明出处:
撰写人:伍华聪 http://www.iqidi.com
Visio的二次开发中,我们往往需要打印文档,这也是正常不过的需求,Visio的Document对象提供了下面几种打印模式:
Constant | Value | Description |
visPrintAll | 0 | Prints all foreground pages. |
visPrintCurrentPage | 2 | Prints the active page. |
visPrintCurrentView | 4 | Prints the current view area. |
visPrintFromTo | 1 | Prints pages between the FromPage value and the ToPage value. |
visPrintSelection | 3 | Prints a selection |
visPage.Document.PrintOut(VisPrintOutRange.visPrintAll, 1, 1, false, "", false, visPage.Name, 1, false, false);
visPrintCurrentView是将你看到的窗体视图内容打印出来(一般很少用,因为可能截取到一半的区域而已),用法如下:
visPage.Document.PrintOut(VisPrintOutRange.visPrintCurrentView, 1, 1, false, "", false, visPage.Name, 1, false, false);
visPrintSelection就是打印选取的内容,这个有用,当你选中一部分东西,想将其打印出来的时候。不过注意的是,你要确保你选中了内容,否则会打印出来是整个控件页面的内容,其用法如下:
visPage.Document.PrintOut(VisPrintOutRange.visPrintSelection, 1, 1, false, "", false, visPage.Name, 1, false, false);
其他的用法大同小异,可以自己下去试试。
另外还有一种打印方式,是打印一个大页面中的一部分,这个就需要技巧了,首先你需要获取到页面的Picture对象,转换为Image对象(下面介绍如何转换),然后打印整个Image对象中的一部分,通过定位左上角位置,和输出矩形大小就可以了。
Rectangle srcRect = new Rectangle(dblLeft, dblTop, this.visioImage.Width /2, this.visioImage.Height/2);
e.Graphics.DrawImage(this.visioImage, destRetangle, srcRect, GraphicsUnit.Pixel);
Visio[/b]的Picture[/b]属性及转换
[/b]
Visio文档打印的时候,有时候需要预览下内容,那如何实现呢,其实也很简单,因为你打印的Page对象有一个Picture的属性,可以用来显示的(Window.Selection也有一个这么对象,当然就可以用来预览选择的内容了)。不过到这里别高兴太早,因为Picture对象是IPictureDisp类型的,你需要转换为PicutureBox对象所能识别的Image类型,不过这个东西不是那么容易转换的,呵呵。
费了九牛二虎之力,终于查到了转换的方法,下面介绍下吧,以免大家走弯路。
先建立一个AxHostConverter的转换类,继承自 AxHost,如下:
public class AxHostConverter : AxHost
在赋值给PictureBox的Image对象的时候,如此这般就OK了
pictureBox1.Image = AxHostConverter.PictureDispToImage(this.visPage.Picture);
打印页边距设置问题
再说另外一个问题,不知道大家有没有注意到,页面设置对话框中,页边距中的值默认是10,你确定之后,值就变小了,再打开确定,值变得更小了,这是因为页边距值的转换出了问题,要正常工作,需要做一些转换的工作。下面贴出代码,一目了然。
PageSetupDialog dlg = new PageSetupDialog();
dlg.Document = PrintDocument;
dlg.PageSettings.Margins = PrinterUnitConvert.Convert(dlg.PageSettings.Margins,
PrinterUnit.ThousandthsOfAnInch, PrinterUnit.HundredthsOfAMillimeter);
if (dlg.ShowDialog() == DialogResult.OK)
else
最后给一个图,显示下所完成的工作:
转载请注明出处:
撰写人:伍华聪 http://www.iqidi.com
相关文章推荐
- C#进行Visio二次开发之图纸缩放操作的实现
- C#进行Visio二次开发之图纸设备信息的保存
- C#进行Visio二次开发之Web查看Visio图纸
- C#进行Visio二次开发之判断图纸是否有设备
- 如何使用C#进行Visio二次开发
- C#进行Visio二次开发之设备状态跟踪
- C#进行Visio二次开发之管理下拉列表
- 如何使用C#进行Visio二次开发
- C#进行Visio二次开发的常见问题处理
- C#进行Visio二次开发之组合形状操作
- 如何使用C#进行Visio二次开发-总结版
- C#进行Visio二次开发之电气线路停电分析逻辑
- C#进行Visio二次开发之动态仿真实现
- C#进行Visio二次开发相关事件汇总
- C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处
- 如何使用C#进行Visio二次开发
- C#进行Visio二次开发
- C#进行Visio二次开发之Visio模具制作(1)
- C#进行Visio二次开发之事件
- C#进行Visio二次开发之Visio模具制作(2)