• C#进行Visio二次开发之图纸打印


    几种打印模式

     

    Visio的二次开发中,我们往往需要打印文档,这也是正常不过的需求,VisioDocument对象提供了下面几种打印模式:

    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, 11false""false, visPage.Name, 1falsefalse);

     

    visPrintCurrentView是将你看到的窗体视图内容打印出来(一般很少用,因为可能截取到一半的区域而已),用法如下:

    visPage.Document.PrintOut(VisPrintOutRange.visPrintCurrentView, 11false""false, visPage.Name, 1falsefalse);


    visPrintSelection就是打印选取的内容,这个有用,当你选中一部分东西,想将其打印出来的时候。不过注意的是,你要确保你选中了内容,否则会打印出来是整个控件页面的内容,其用法如下:

     

    visPage.Document.PrintOut(VisPrintOutRange.visPrintSelection, 11false""false, visPage.Name, 1falsefalse);

     

    其他的用法大同小异,可以自己下去试试。

    另外还有一种打印方式,是打印一个大页面中的一部分,这个就需要技巧了,首先你需要获取到页面的Picture对象,转换为Image对象(下面介绍如何转换),然后打印整个Image对象中的一部分,通过定位左上角位置,和输出矩形大小就可以了。

                    Rectangle srcRect = new Rectangle(dblLeft, dblTop, this.visioImage.Width /2this.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);

            }


        }

     

                    在赋值给PictureBoxImage对象的时候,如此这般就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);

                }

     

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


    转载请注明出处:
    撰写人:伍华聪  http:
    //www.iqidi.com 
    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    xx
    office 2016 下载链接
    Revit 2019 下载链接
    AE cc 2019 下载链接
    Premiere Pro cc 2019 下载链接
    Photoshop cc 2019 下载链接
    百度云单机版、软件包及教程
    Visual Studio 2017 软件包及教程
    归并排序:逆序对问题
    归并排序:小和问题
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/1209398.html
Copyright © 2020-2023  润新知