将Visio文件装换成HTML文件(在服务器上转换,客户端无需安装visio即可查看)

需求见我的前一篇文章:类似QQ邮箱中‘HTML方式查看’功能查看Office文件

当时是直接写的一个方法,支持word、excel、ppt文件,现在写visio文件,则改成了单例模式。

废话不说,上代码: 

public class VisioApplication
{
    
private static readonly object sync = new object();
    
private static Microsoft.Office.Interop.Visio.Application vso;
    
private VisioApplication() { }

    
public static Microsoft.Office.Interop.Visio.Application GetInstance()
    {
        
//单例模式,双重锁定
        if (vso == null)
        {
            
lock (sync)
            {
                
if (vso == null)
                {
                    vso 
= new Microsoft.Office.Interop.Visio.Application();
                    vso.Visible 
= false;//打开应用程序就隐藏
                    vso.AlertResponse = (short)1;//重要:转换时不用打开确认窗口,直接转换
                }
            }
        }
        
return vso;
    }

    
public static void Quit()
    {

        
if (vso != null)
        {
            vso.Quit();
        }
        GC.Collect();
    }

    
/// <summary>
    
/// 将Visio文档转换成HTML格式
    
/// </summary>
    
/// <param name="VisioFilePath"></param>
    public static void VisioToHtmlFile(string VisioFilePath)
    {
        Microsoft.Office.Interop.Visio.Application vso 
= GetInstance();
        Microsoft.Office.Interop.Visio.Document doc 
= null;
        Microsoft.Office.Interop.Visio.SaveAsWeb.VisSaveAsWeb saveAsWeb;
        Microsoft.Office.Interop.Visio.SaveAsWeb.VisWebPageSettings webPageSettings;
        
try
        {
            
//设置输出文件路径
            string strTarget = VisioFilePath.Substring(0, VisioFilePath.LastIndexOf(".")) + ".html";
            
//打开文档,本来想后台打开,但是无论如何都会闪一下,看大家有没有什么好的办法
            doc = vso.Documents.OpenEx(VisioFilePath,
                (
short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenRO
                
+ (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenMinimized
                
+ (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenHidden
                
+ (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenNoWorkspace);
            
//获得转换html文件用的对象
            saveAsWeb = (Microsoft.Office.Interop.Visio.SaveAsWeb.VisSaveAsWeb)vso.SaveAsWebObject;
            
//设置格式
            webPageSettings = (Microsoft.Office.Interop.Visio.SaveAsWeb.VisWebPageSettings)saveAsWeb.WebPageSettings;
            webPageSettings.TargetPath 
= strTarget;
            webPageSettings.QuietMode 
= 1;
            webPageSettings.SilentMode 
= 1;//安静模式,不然会显示转换进度窗口

            saveAsWeb.AttachToVisioDoc(doc);
//将文档添加到需要转换的列表中
            saveAsWeb.CreatePages();//开始转换
        }
        
finally
        {
            
if (doc != null)
            {
                doc.Close();
            }
        }
    }
}

本例子代码在VS2008、Office Visio 2007下测试通过,使用前需引用 相应的com组件
放在首页的原因是:希望大家帮个忙!如何让visio程序打开的时候不显示,在后台打开,我写的代码无论如何都会闪一下,谢谢!。
posted @ 2009-05-22 12:41  阿哲  阅读(2960)  评论(13编辑  收藏  举报