天天看點

[轉]用C#實作将HTML檔案轉換為CHM檔案

這些天因為工作需要,要将一些html檔案轉換為chm檔案,當然是需要和程式結合在一起。

後來找到NDoc,裡頭有一段代碼是相關的,于是開始分析代碼,寫完之後,

總結:主要是利用微軟的hhc.exe來編譯html檔案,程式需要将具體的資料寫入hhp和hhc檔案。

主要代碼如下:

[轉]用C#實作将HTML檔案轉換為CHM檔案

public void CompileProject()

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

{

[轉]用C#實作将HTML檔案轉換為CHM檔案

    Process helpCompileProcess = new Process();  //建立新的程序,NDOC采用Process啟動HHC.EXE來Compile一個CHM檔案

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

    try

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

        /**/////判斷檔案是否存在并不被占用

[轉]用C#實作将HTML檔案轉換為CHM檔案

        try

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

            string path = _chmFile;  //chm生成路徑 

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

            if (File.Exists(path))

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

                File.Delete(path);

[轉]用C#實作将HTML檔案轉換為CHM檔案

            }

[轉]用C#實作将HTML檔案轉換為CHM檔案

        }

[轉]用C#實作将HTML檔案轉換為CHM檔案

        catch

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

            throw new Exception("檔案被打開!");

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

        ProcessStartInfo processStartInfo = new ProcessStartInfo();

[轉]用C#實作将HTML檔案轉換為CHM檔案

        processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;

[轉]用C#實作将HTML檔案轉換為CHM檔案

        processStartInfo.FileName = hhcFile;  //調入HHC.EXE檔案  

[轉]用C#實作将HTML檔案轉換為CHM檔案

        processStartInfo.Arguments = "\"" + Path.GetFullPath(GetPathToProjectFile()) + "\"";//擷取空的HHP檔案

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

        helpCompileProcess.StartInfo = processStartInfo;

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

        //開始生成

[轉]用C#實作将HTML檔案轉換為CHM檔案

.

[轉]用C#實作将HTML檔案轉換為CHM檔案

        helpCompileProcess.Start();

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

        helpCompileProcess.WaitForExit(); //元件無限期地等待關聯程序退出

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

        if (helpCompileProcess.ExitCode == 0)

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

            MessageBox.Show(new Exception().Message);

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

    }

[轉]用C#實作将HTML檔案轉換為CHM檔案

    finally

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

        helpCompileProcess.Close();

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

}

[轉]用C#實作将HTML檔案轉換為CHM檔案

public void OpenProjectFile()

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

    FileStream fs = new FileStream(GetPathToProjectFile(), FileMode.Create);

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp = new System.IO.StreamWriter(fs, System.Text.Encoding.GetEncoding("GB18030"));

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("[FILES]");

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

public void AddFileToProject(string filename)

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine(filename);

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

public void CloseProjectFile(string title)

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine();

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("[OPTIONS]");

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("Title=" + title);

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("Compatibility=1.1 or later");

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("Compiled file=" + GetCompiledHtmlFilename());  //chm檔案名

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("Contents file=" + GetContentsHtmlFilename());  //hhc檔案名

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("Default topic=" + _defaultTopic);  //預設頁

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("Display compile progress=No"); //是否顯示編譯過程 

[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("Language=0x804 中文(中國)");  //chm檔案語言

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.WriteLine("[INFOTYPES]");

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

    streamHtmlHelp.Close();

[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案
[轉]用C#實作将HTML檔案轉換為CHM檔案

轉自:http://www.cnblogs.com/monthkey/archive/2004/06/15/15995.aspx