几种打印模式

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是将当前的文档进行分页打印,如果是你的控件中有多个页面的话,使用方法如下:

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的Picture属性及转换

Visio文档打印的时候,有时候需要预览下内容,那如何实现呢,其实也很简单,因为你打印的Page对象有一个Picture的属性,可以用来显示的(Window.Selection也有一个这么对象,当然就可以用来预览选择的内容了)。不过到这里别高兴太早,因为Picture对象是IPictureDisp类型的,你需要转换为PicutureBox对象所能识别的Image类型,不过这个东西不是那么容易转换的,呵呵。

费了九牛二虎之力,终于查到了转换的方法,下面介绍下吧,以免大家走弯路。

先建立一个AxHostConverter的转换类,继承自 AxHost,如下:

     public  class AxHostConverter : AxHost

     {

        private AxHostConverter() : base("") { }

        static public Image ictureDispToImage(stdole.IPictureDisp pictureDisp)

        {

            return GetPictureFromIPicture(pictureDisp);

        }

    }

在赋值给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

             {

                dlg.PageSettings.Margins = PrinterUnitConvert.Convert(dlg.PageSettings.Margins,

                  PrinterUnit.HundredthsOfAMillimeter, PrinterUnit.ThousandthsOfAnInch);

            }

最后给一个图,显示下所完成的工作:

本文转自博客园伍华聪的博客,原文链接:C#进行Visio二次开发之图纸打印,如需转载请自行联系原博主。

C#进行Visio二次开发之图纸打印相关推荐

  1. C#进行Visio二次开发之判断图纸是否有设备

    判断Visio图纸上是否图纸有设备(存在图元), 有两种方法,一种是通过Window对象的SelectAll方法,在判断选择的集合是否不为空即可,如下:         /// <summary ...

  2. C#进行Visio二次开发之知识点考核试题

    本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一 ...

  3. NX二次开发-获得图纸视图的名字UF_OBJ_ask_name

    NX二次开发-获得图纸视图的名字UF_OBJ_ask_name #include <uf.h> #include <uf_draw.h> #include <uf_obj ...

  4. NX二次开发-创建图纸尺寸表达式抑制UF_DRF_add_controlling_exp

    NX二次开发-创建图纸尺寸表达式抑制UF_DRF_add_controlling_exp #include <uf.h> #include <uf_modl.h> #inclu ...

  5. NX二次开发-更改图纸尺寸内容(编辑文本)uc5566

    NX二次开发-更改图纸尺寸内容(编辑文本)uc5566 #include <uf.h> #include <uf_drf.h> #include <uf_obj.h> ...

  6. Visio二次开发(二)----Shape的添加和连接

    先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中 ...

  7. Visio二次开发(一)----巧用Visio宏

    最近做的项目中需要用到Visio二次开发,安装了Visio的SDK,还有从网上找了一些这方面的博客,Visio的SDK是全英文的,看着有点费劲,很多的东西都不知道该如何去找,不过网上的一些博客还是有一 ...

  8. NX二次开发-读取图纸表格注释与部件属性关联的名字

    NX二次开发-读取图纸表格注释与部件属性关联的名字 NX11+VS2013#include <uf.h> #include <uf_ui.h> #include <uf_ ...

  9. 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单等相关问题...

    原文:关于FlexPaper 2.1.2版本 二次开发 Logo .打印.搜索.缩略图.添加按钮.js交互.右键菜单等相关问题 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash( ...

最新文章

  1. 用vue.js写的一个瀑布流的组件
  2. 阿里云esc服务器和mysql_解决远程链接阿里云esc服务器的mysql数据库
  3. ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java
  4. 2018-05-05(在小程序中使用图标)
  5. 一种快速构造和获取URL查询参数的方法:URLSearchParams
  6. 中国焦磷酸四钾市场趋势报告、技术动态创新及市场预测
  7. iOS: 目前天气API 整理
  8. Exynos4412 BSP平台搭建(详细图解)
  9. Mac端SVN工具CornerStone详解
  10. usb redirector linux,USB Redirector Client详细使用教程
  11. 纽约亮马河邮轮 - 从水上欣赏纽约迷人景色
  12. 啥是全栈程序员?更厉害?更有钱途?
  13. PYTHON学习创建当先时间和昨天时间
  14. 马云、张小龙、雷军缅怀金庸:江湖路远,侠义长存!
  15. 各个操作系统的命令行窗口的样式
  16. OpenPose 安装和使用教程
  17. 睿智的目标检测31——非极大抑制NMS与Soft-NMS
  18. lua_pcall 函数详解
  19. saber与matlab,MATLAB与SABER联合仿真(Co-sim)遇到的问题
  20. 利用Python画随机水墨图

热门文章

  1. Unity 屏幕特效 之 简单地调整颜色的亮度、饱和度、对比度
  2. 算法之美隆重上市欢迎关注(另附勘误表在此)
  3. Qt——常用数据类型
  4. python合并excel出现多余列等问题
  5. 一个奇鸽免费版- 船新体验的小工具软件
  6. gitflow的规范
  7. 安卓手机不能开机 怎么备份 联系人 短信 通话记录
  8. 实现一个二叉搜索树(Binary Search Tree)
  9. pycharm最新激活码activation code
  10. NLP-实体关系联合抽取-2021:UniRE