首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Visio 二次開發:文件列印與預覽完整技術指南

     編輯:關於C#

Visio 文件列印是二次開發常見需求。Document.PrintOut 提供多種列印模式,搭配 Page.Picture 屬性可實現預覽,但需處理 IPictureDisp 轉換與頁邊距單位換算等細節。

五大列印模式對照

常數值說明
visPrintAll0列印所有前景頁面
visPrintFromTo1列印指定頁碼範圍
visPrintCurrentPage2列印當前作用中頁面
visPrintSelection3列印選取內容
visPrintCurrentView4列印目前視窗可見區域

常用列印程式碼範例

// 列印全部頁面
visPage.Document.PrintOut(VisPrintOutRange.visPrintAll, 1, 1, false, "", false, visPage.Name, 1, false, false);

// 列印選取內容(需先確認有選取項目)
visPage.Document.PrintOut(VisPrintOutRange.visPrintSelection, 1, 1, false, "", false, visPage.Name, 1, false, false);

局部區域列印技巧

需列印大頁面的特定區域時:

  1. 取得 Page.Picture (IPictureDisp) 轉為 Image 物件。
  2. 使用 Graphics.DrawImage 指定來源矩形 srcRect 與目標矩形 destRect 繪製局部。
Rectangle srcRect = new Rectangle(dblLeft, dblTop, visioImage.Width/2, visioImage.Height/2);
e.Graphics.DrawImage(visioImage, destRect, srcRect, GraphicsUnit.Pixel);

IPictureDisp 轉 Image 關鍵類別

需建立繼承 AxHost 的轉換器:

public class AxHostConverter : AxHost {
    private AxHostConverter() : base("") { }
    static public Image PictureDispToImage(stdole.IPictureDisp pictureDisp) {
        return GetPictureFromIPicture(pictureDisp);
    }
}

// 使用
pictureBox1.Image = AxHostConverter.PictureDispToImage(this.visPage.Picture);

頁邊距單位換算陷阱

PageSetupDialog 的預設單位是 ThousandthsOfAnInch,顯示時需轉為 HundredthsOfAMillimeter,確認後再轉回,否則會出現數值遞減異常:

PageSetupDialog dlg = new PageSetupDialog();
dlg.Document = printDoc;
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);
}

掌握以上技巧,即可在 Visio 二次開發中實現專業級的列印與預覽功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved