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

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

編輯:關於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);

打印頁邊距設置問題

再說另外一個問題,不知道大家有沒有注意到,頁面設置對話框中,頁邊距中的值默認是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);
}

最後給一個圖,顯示下所完成的工作:

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