WPF優秀元件推薦之FreeSpire

seabluescn發表於2022-03-09

概述

Spire是一套可以輕鬆處理Word、Excel和PDF的商業元件,需要收費,但是他有一套對應的免費元件FreeSpire可以使用,免費元件在功能上有一些限制(比如:excel的sheet數量不能超過30),對於普通應用來說大部分場景下都可以適用了。

中文幫助文件:幫助文件 | 全面豐富的線上文件,助您快速瞭解如何使用產品 

 

本文程式碼基於Stylet開發,如果您還不瞭解Stylet,請參閱:

WPF優秀元件推薦之Stylet(一) - seabluescn - 部落格園 (cnblogs.com)

WPF優秀元件推薦之Stylet(二) - seabluescn - 部落格園 (cnblogs.com)

 

環境安裝

在Nuget中搜尋:FreeSpire

如果你只需要處理Excel或Word等,可以下載對應的包,怕麻煩可以下一個FreeSpire.Office的總包。(建議下載FreeSpire.Office,雖然檔案多一些,但後期功能升級不需要再加元件,也不會有不同元件版本之間不相容的問題)

 

生成Word文件

WPF優秀元件推薦之FreeSpire
        public void SaveWord()
        {
            SaveFileDialog fileDialog = new SaveFileDialog()
            {
                Filter = "Word File(*.docx)|*.docx",
                FileName = "Report01" + ".docx",
            };

            if (fileDialog.ShowDialog() == true)
            {
                Document document = new Document();
                Section s = document.AddSection();             
                Paragraph para1 = s.AddParagraph();
                para1.AppendText("歡迎使用Spire.Doc");

                document.SaveToFile(fileDialog.FileName, Spire.Doc.FileFormat.Docx);
                Process.Start(fileDialog.FileName);
            }
        }
View Code

  

生成Excel文件

WPF優秀元件推薦之FreeSpire
        public void SaveExcel()
        {
            SaveFileDialog fileDialog = new SaveFileDialog()
            {
                Filter = "Word File(*.xlsx)|*.xlsx",
                FileName = "Report01" + ".xlsx",
            };

            if (fileDialog.ShowDialog() == true)
            {
                Workbook workbook = new Workbook();
                Worksheet sheet = workbook.Worksheets[0];

                sheet.Range[1, 1].Text = "步驟";
                sheet.Range[1, 2].Text = "時間";               

                int row = 2;
                for (int i = 0; i <10; i++)
                {                   
                    sheet.Range[row, 1].Text = i.ToString();
                    sheet.Range[row, 2].Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 
                    row++;
                }

                sheet.Range[row + 2, 1].Text = "報告時間:";
                sheet.Range[row + 2, 2].Text = $"2022-02-02 11:11:11";
              
                workbook.SaveToFile(fileDialog.FileName, ExcelVersion.Version2010);
                Process.Start(fileDialog.FileName);
            }
        }
View Code

  

讀取Word模板

生成Word文件時,格式其實很難控制,有一個簡單的辦法就是先建立一個模板格式檔案,動態的內容先用特殊的佔位字串,然後程式再把相應的佔位字串給替換掉,這樣檔案的樣式就可以非常容易調整和修改,客戶有什麼特殊需求還能直接修改模板,都不用改程式碼。

 Code:

WPF優秀元件推薦之FreeSpire
        public void LoadWord()
        {
            SaveFileDialog fileDialog = new SaveFileDialog()
            {
                Filter = "Word File(*.docx)|*.docx",
                FileName = "Report02" + ".docx",
            };

            if (fileDialog.ShowDialog() == true)
            {
                Document document = new Document();
                document.LoadFromFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Template", "WordTemplate.docx"));

                document.Replace("<$ReportTitle>", "報表標題", false, true);
                document.Replace("<$CompanyName>", "公司名稱", false, true);

                document.SaveToFile(fileDialog.FileName, Spire.Doc.FileFormat.Docx);
                Process.Start(fileDialog.FileName);
            }
        }
View Code

 

生成Pdf文件

WPF優秀元件推薦之FreeSpire
        public void SavePdf()
        {
            SaveFileDialog fileDialog = new SaveFileDialog()
            {
                Filter = "Word File(*.pdf)|*.pdf",
                FileName = "Report01" + ".pdf",
            };

            if (fileDialog.ShowDialog() == true)
            {
                //初始化一個PdfDocument例項
                PdfDocument document = new PdfDocument();

                //設定邊距
                PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
                PdfMargins margins = new PdfMargins();
                margins.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
                margins.Bottom = margins.Top;
                margins.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
                margins.Right = margins.Left;

                //新增新頁
                PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margins);

                //自定義PdfTrueTypeFont、PdfPen例項
                PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋體", 11f), true);
                PdfPen pen = new PdfPen(Color.Black);

                //使用DrawString方法在指定位置寫入文字
                string text = "我的第一個C# PDF文件";
                page.Canvas.DrawString(text, font, pen, 100, 50);

                //儲存文件
                document.SaveToFile(fileDialog.FileName);
                Process.Start(fileDialog.FileName);
            }
        }
View Code

  

Word轉換為PDF

Pdf的生成是比較麻煩的,更像是繪圖操作,如果客戶一定要Pdf格式報表,我一般先生成一個Word的臨時檔案,然後再轉成pdf,當然Word的生成仍可以採用模板的方法。 

WPF優秀元件推薦之FreeSpire
        public void WordToPdf()
        {
            var WordFilePath = @"E:\Report02.docx";
            var PdfFilePath = @"E:\Report02.pdf";

            Document document = new Document();
            document.LoadFromFile(WordFilePath);
            document.SaveToFile(PdfFilePath, Spire.Doc.FileFormat.PDF);
            Process.Start(PdfFilePath);
        }
View Code

  

以上程式碼下載地址:NiceComponents · Bruce/Learn WPF - 碼雲 - 開源中國 (gitee.com)

本文只是演示了一些基本應用,表格、圖片等都沒有涉及,主要是官方文件已經非常詳細了,更多高階功能請參考幫助文件。

相關文章