winform顯示word和ppt文檔


最近所做的項目中需要在Winform窗體中顯示Office文檔。剛開始就使用webBrowser控件實現的,但是后來發現這個控件在顯示Office文檔的時候有個限制:只支持Office2003之前的版本,之后的版本都有問題。在網上也有很多人遇到這個問題,找了好久的解決方案都沒有找到,后來在一個網站上面找到了一個第三方的控件,可以很好的支持這個功能,就是Dsoframer(可以從網上找到關於Dsoframer的使用說明,里面有很詳細介紹它的方法和屬性)

操作步驟:

1.需要從網站下載dsoframer.ocx文件

2.把dsoframer.ocx文件復制到c:\windows\system32目錄下

         開始->運行->regsvr32 dsoframer.ocx , 系統會提示DSOFramer.ocx中的DllRegisterServer成功。

3.在VS中新建項目,添加引用

4.將該控件加載到工具箱中(添加新選項)

5.將控件拖到窗體中

   打開文件:this.axFramerControl1.Open(“文檔地址”);    //office的相關文檔

注:此Dsoframer控制還有很多其它很好的方法和功能,可以去下載一個Dsoframer的使用接口說明文檔

------------------------------------------------------------------------------------------------------------------------------------------------

 

doc  pdf ppt與 txt之間的轉換 :

組件的作用一般是將文件讀出成字符格式,並不是單純的轉換文件名后綴,所以需要將讀出的東西寫入txt文件 。

 

添加office引用

.net中對office中的word及ppt進行編程時,確保安裝office時已經安裝了word,ppt可編程組件(自定義安裝時可查看)或者安裝“Microsoft Office 2003 Primary Interop Assemblies”

安裝后,在編程頁面添加引用:

添加引用-com—microsoft powerpoint object 11.0 libaray/word 11.0 object library;

還得添加office組件

using Microsoft.Office.Interop.Word;

using Microsoft.Office.Interop.PowerPoint;

 

using org.pdfbox.pdmodel;                     

using org.pdfbox.util;

 

using Microsoft.Office.Interop.Word;

using Microsoft.Office.Interop.PowerPoint;

public void pdf2txt(FileInfo file,FileInfo txtfile)

    {

        PDDocument doc = PDDocument.load(file.FullName);

        PDFTextStripper pdfStripper = new PDFTextStripper();

        string text = pdfStripper.getText(doc);

            StreamWriter swPdfChange = new StreamWriter(txtfile.FullName, false, Encoding.GetEncoding("gb2312"));

        swPdfChange.Write(text);

        swPdfChange.Close();

    }

 

對於doc文件中的表格,讀出的結果是去除掉了網格線,內容按行讀取。

    public void word2text(FileInfo file,FileInfo txtfile)

    {

 

        object readOnly = true;

        object missing = System.Reflection.Missing.Value;

        object fileName = file.FullName;

        Microsoft.Office.Interop.Word.ApplicationClass wordapp = new Microsoft.Office.Interop.Word.ApplicationClass();

        Document doc = wordapp.Documents.Open(ref fileName,

    ref missing, ref readOnly, ref missing, ref missing, ref missing,

    ref missing, ref missing, ref missing, ref missing, ref missing,

    ref missing, ref missing, ref missing, ref missing, ref missing);

        string text = doc.Content.Text;

        doc.Close(ref missing, ref missing, ref missing);

        wordapp.Quit(ref missing, ref missing, ref missing);

        StreamWriter swWordChange = new StreamWriter(txtfile.FullName, false, Encoding.GetEncoding("gb2312"));

        swWordChange.Write(text);

        swWordChange.Close();

 

    }

 

    public void ppt2txt(FileInfo file, FileInfo txtfile)

    {

         Microsoft.Office.Interop.PowerPoint.Application pa = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();

        Microsoft.Office.Interop.PowerPoint.Presentation pp = pa.Presentations.Open(file.FullName,

                        Microsoft.Office.Core.MsoTriState.msoTrue,

                        Microsoft.Office.Core.MsoTriState.msoFalse,

                        Microsoft.Office.Core.MsoTriState.msoFalse);

        string pps = "";

        StreamWriter swPPtChange = new StreamWriter(txtfile.FullName, false, Encoding.GetEncoding("gb2312"));

       

        foreach (Microsoft.Office.Interop.PowerPoint.Slide slide in pp.Slides)

        {

            foreach (Microsoft.Office.Interop.PowerPoint.Shape shape in slide.Shapes)

           

                pps += shape.TextFrame.TextRange.Text.ToString();

   

        }

        swPPtChange.Write(pps);

        swPPtChange.Close();

 

   

    }

 

讀取不同類型的文件

    public StreamReader text2reader(FileInfo file)

    {

        StreamReader st = null;

        switch (file.Extension.ToLower())

        {

            case ".txt":

                st = new StreamReader(file.FullName, Encoding.GetEncoding("gb2312"));

                break;

            case ".doc":

                FileInfo wordfile = new FileInfo(@"E:/my programs/200807program/FileSearch/App_Data/word2txt.txt");//不能使用相對路徑,想辦法改進

                word2text(file, wordfile);

                st = new StreamReader(wordfile.FullName, Encoding.GetEncoding("gb2312"));

                break;

            case ".pdf":

                FileInfo pdffile = new FileInfo(@"E:/my programs/200807program/FileSearch/App_Data/pdf2txt.txt");

                pdf2txt(file, pdffile);

                st = new StreamReader(pdffile.FullName, Encoding.GetEncoding("gb2312"));

                break;

            case".ppt":

                FileInfo pptfile = new FileInfo(@"E:/my programs/200807program/FileSearch/App_Data/ppt2txt.txt");

                ppt2txt(file,pptfile);

                st = new StreamReader(pptfile.FullName,Encoding.GetEncoding("gb2312"));

                break;

        }

        return st;

    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM