C#进行Visio二次开发之图纸打印
几种打印模式
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 |
上面几种是什么意思呢?下面详细解说下,visPrintAll是将当前的文档进行分页打印,如果是你的控件中有多个页面的话,使用方法如下:
visPrintCurrentView是将你看到的窗体视图内容打印出来(一般很少用,因为可能截取到一半的区域而已),用法如下:
visPrintSelection就是打印选取的内容,这个有用,当你选中一部分东西,想将其打印出来的时候。不过注意的是,你要确保你选中了内容,否则会打印出来是整个控件页面的内容,其用法如下:
其他的用法大同小异,可以自己下去试试。
另外还有一种打印方式,是打印一个大页面中的一部分,这个就需要技巧了,首先你需要获取到页面的Picture对象,转换为Image对象(下面介绍如何转换),然后打印整个Image对象中的一部分,通过定位左上角位置,和输出矩形大小就可以了。
e.Graphics.DrawImage( this.visioImage, destRetangle, srcRect, GraphicsUnit.Pixel);
Visio的Picture属性及转换
Visio文档打印的时候,有时候需要预览下内容,那如何实现呢,其实也很简单,因为你打印的Page对象有一个Picture的属性,可以用来显示的(Window.Selection也有一个这么对象,当然就可以用来预览选择的内容了)。不过到这里别高兴太早,因为Picture对象是IPictureDisp类型的,你需要转换为PicutureBox对象所能识别的Image类型,不过这个东西不是那么容易转换的,呵呵。
费了九牛二虎之力,终于查到了转换的方法,下面介绍下吧,以免大家走弯路。
先建立一个AxHostConverter的转换类,继承自 AxHost,如下:
{
private AxHostConverter() : base("") { }
static public Image ictureDispToImage(stdole.IPictureDisp pictureDisp)
{
return GetPictureFromIPicture(pictureDisp);
}
}
在赋值给PictureBox的Image对象的时候,如此这般就OK了
打印页边距设置问题
再说另外一个问题,不知道大家有没有注意到,页面设置对话框中,页边距中的值默认是10,你确定之后,值就变小了,再打开确定,值变得更小了,这是因为页边距值的转换出了问题,要正常工作,需要做一些转换的工作。下面贴出代码,一目了然。
dlg.Document = PrintDocument;
dlg.PageSettings.Margins = PrinterUnitConvert.Convert(dlg.PageSettings.Margins,
PrinterUnit.ThousandthsOfAnInch, PrinterUnit.HundredthsOfAMillimeter);
if (dlg.ShowDialog() == DialogResult.OK)
{
}
else
{
dlg.PageSettings.Margins = PrinterUnitConvert.Convert(dlg.PageSettings.Margins,
PrinterUnit.HundredthsOfAMillimeter, PrinterUnit.ThousandthsOfAnInch);
}
最后给一个图,显示下所完成的工作:
本文转自博客园伍华聪的博客,原文链接:C#进行Visio二次开发之图纸打印,如需转载请自行联系原博主。
C#进行Visio二次开发之图纸打印相关推荐
- C#进行Visio二次开发之判断图纸是否有设备
判断Visio图纸上是否图纸有设备(存在图元), 有两种方法,一种是通过Window对象的SelectAll方法,在判断选择的集合是否不为空即可,如下: /// <summary ...
- C#进行Visio二次开发之知识点考核试题
本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一 ...
- NX二次开发-获得图纸视图的名字UF_OBJ_ask_name
NX二次开发-获得图纸视图的名字UF_OBJ_ask_name #include <uf.h> #include <uf_draw.h> #include <uf_obj ...
- NX二次开发-创建图纸尺寸表达式抑制UF_DRF_add_controlling_exp
NX二次开发-创建图纸尺寸表达式抑制UF_DRF_add_controlling_exp #include <uf.h> #include <uf_modl.h> #inclu ...
- NX二次开发-更改图纸尺寸内容(编辑文本)uc5566
NX二次开发-更改图纸尺寸内容(编辑文本)uc5566 #include <uf.h> #include <uf_drf.h> #include <uf_obj.h> ...
- Visio二次开发(二)----Shape的添加和连接
先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中 ...
- Visio二次开发(一)----巧用Visio宏
最近做的项目中需要用到Visio二次开发,安装了Visio的SDK,还有从网上找了一些这方面的博客,Visio的SDK是全英文的,看着有点费劲,很多的东西都不知道该如何去找,不过网上的一些博客还是有一 ...
- NX二次开发-读取图纸表格注释与部件属性关联的名字
NX二次开发-读取图纸表格注释与部件属性关联的名字 NX11+VS2013#include <uf.h> #include <uf_ui.h> #include <uf_ ...
- 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单等相关问题...
原文:关于FlexPaper 2.1.2版本 二次开发 Logo .打印.搜索.缩略图.添加按钮.js交互.右键菜单等相关问题 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash( ...
最新文章
- 用vue.js写的一个瀑布流的组件
- 阿里云esc服务器和mysql_解决远程链接阿里云esc服务器的mysql数据库
- ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java
- 2018-05-05(在小程序中使用图标)
- 一种快速构造和获取URL查询参数的方法:URLSearchParams
- 中国焦磷酸四钾市场趋势报告、技术动态创新及市场预测
- iOS: 目前天气API 整理
- Exynos4412 BSP平台搭建(详细图解)
- Mac端SVN工具CornerStone详解
- usb redirector linux,USB Redirector Client详细使用教程
- 纽约亮马河邮轮 - 从水上欣赏纽约迷人景色
- 啥是全栈程序员?更厉害?更有钱途?
- PYTHON学习创建当先时间和昨天时间
- 马云、张小龙、雷军缅怀金庸:江湖路远,侠义长存!
- 各个操作系统的命令行窗口的样式
- OpenPose 安装和使用教程
- 睿智的目标检测31——非极大抑制NMS与Soft-NMS
- lua_pcall 函数详解
- saber与matlab,MATLAB与SABER联合仿真(Co-sim)遇到的问题
- 利用Python画随机水墨图