程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#進行Visio二次開發之圖紙打印(1)

C#進行Visio二次開發之圖紙打印(1)

編輯:關於C語言

幾種打印模式

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved