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

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);

isio的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);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 内容
, 打印开发
, false
, image
, PrintOut
, C#打印
, C# 打印
Picture
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2025-01-31 01:35:42

C#进行Visio二次开发之图纸打印的相关文章

C#进行Visio二次开发之图纸设备信息的保存

在Visio的二次开发中,当发布图纸的时候,我们往往需要保存图纸和图纸的设备信息到数据库,图纸是将文件以二进制保存到数据库中,设备信息是保存图纸对应的Shape的各种自定义属性.本文主要介绍如何保存图纸背后的设备信息. 这里图纸的设备信息可以通过一个设备表如Device1来放置同一类型的设备信息,如负荷开关存放在Device1,架空线放在Device2等等,Device(n)是我们详细放置某种类型设备的表,其结构如下 另外主要我们再新建一个表来管理那种类型的设备对应那个表即可.如下图所示: 一旦

C#进行Visio二次开发之图纸缩放操作的实现

我们知道,Visio菜单[视图]中有一个缩放的菜单项目,如下所示,选择响应的选项会对图纸进行缩放. 开发之图纸缩放操作的实现-c站"> 另外,它的工具条中也有一个下拉列表框,除了可以选择现有的那些选项外,还可以输入自定义的值,达到自定义缩放比例的功能. 本文介绍如何使用C#和Visio的SDK函数,实现Visio中的图纸各种缩放操作.首先我们建立一个缩放菜单项和一个各种缩放比例的子菜单项,如第一个图形所示:然后将所有的子菜单项的事件处理指向同一个函数,如下所示 private void m

C#进行Visio二次开发之界面设计及架构设计

写C#进行Visio二次开发的系列文章有很多篇了,都是写一些经验总结和技术知识的分享,本文继续来探讨这方面开发的一些心得,主要介绍下WinForm界面的设计和Visio软件的架构设计.先看看我花了N个月的业余时间完成的软件概貌,然后大家一起讨论下相关的技术知识. 软件界面主要有菜单区.工具条区.图纸内容区.右边的管理区.状态条区等等,主要注意的是采用了ToolStripPanel来进行布局,然后并使用了有名的WeifenLuo.WinFormsUI.Docking.dll控件对图纸内容区.右边的

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

本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一回客座老师,重新拉起Visio二次开发这面大旗,个人觉得这也是一次比较难忘的一次经历. 本次准备的培训,除了全面介绍Visio的相关知识和概念,还以实战开发的方式加深Visio二次开发的知识掌握,另外还通过试题来考核各个学生的掌握情况,本文主要是介绍我根据自己一直以来的Visio开发经验所得,准备的Visio

如何使用C#进行Visio二次开发-总结版

很久没有写C#进行Visio二次开发的文章了,这次温习一下Visio二次开发的相关知识,全面总结一下Visio 二次开发的方方面面.一方面让对Visio的开发不太了解人员有一个全局的认识,对已经看过我前面文章的人来一个回顾总结. 本次主要根据我在Visio二次开发过程中,获得的一些实际系统开发经验以及学习历程,分三个方面对下面内容进行介绍: 1)介绍C#的Visio二次开发管理系统的架构设计思路 2)介绍C#进行Visio开发的准备工作 3)Visio的编程对象模型 1)Viso二次开发管理系统

如何使用C#进行Visio二次开发

    Visio在VB6中的开发有很多现成的项目及代码,但在.NET领域相对比较滞后,但是从Visio SDK2007发布以来,给予Visio的C#开发逐渐多了起来,虽然和VB6的开发思路有一定的相似,不过平台不一样,做出来的东西差别还是有一定的距离,虽然总体慢一点,但是,DotNET框架的逐渐强大以及更多的DotNet程序和开发人员的加入,带给大家更高的整合价值以及更美好的发展未来.     本人将会在C#领域将Visio的二次开发进行下去,希望大家一起学习研究,碰撞出更美的火花 Visio

C#进行Visio二次开发之自定义右键菜单

Visio Drawing Control中集成自定义菜单是很多项目必须的,很多朋友也问 过我如何实现这些菜单,下面介绍下Visio自定义菜单的实现. Visio二次 开发中,为Visio Drawing Control添加自定义菜单有两种方式:一种是使用捕捉 Visio的MouseUpEvent事件,弹出ContextMenu即可:另一种是通过在PageSheet中 增加Action来实现,也就是使用RUNADDONWARGS函数来实现. 两种实现的 效果如下图所示,两者的区别是,使用第二种会

C#进行Visio二次开发之动态仿真实现

Visio二次开发可以实现的项目情景很多,如电气线路分析.配电网络分析.流程图等,现因为项目需要,又认识多了一个应用场合,液压传动的仿真.项目效果图如下所示: 查看原图(大图) 动态仿真,其实也就是模拟实际线路的走向,实现动画的展现.以前我的Visio的项目,基本上都是基于静态的图形展现,并没有设置太多的动态展现.原来配电网络的通电线路的分析,严格来说也是静态的,因为基本上是一次性把通电和不通电的线路给绘制出来.而动态仿真则要求慢慢的动画展现线路的走向和颜色变化. 如活塞运动的仿真,要求不停止动

C#进行Visio二次开发之组合形状操作

由于一朋友需要Visio实现仿真模拟Demo,因此我在原来Visio项目代码基础上进行改进调整,完成了其需要的功能.现将对原有Visio二次开发项目的创新思路及成果总结一下,以飨读者,也做为一个标志,供日后参考,或者于各位同行,一起研究切磋.先贴图展示整个项目的该款,表明此文章所托并非空穴来风.纸上谈兵! 本人基于项目的Visio的二次开发文章写了很多,其中涉及到各形状方面的操作,但基本上都是做为一个图形的整体来实现各种效果的,由于仿真需要,需要将换向阀实现左右变换功能,而换向阀是一个组合控件,