1. 程式人生 > >Spire.Doc 生成pdf業務運營報告

Spire.Doc 生成pdf業務運營報告

  需求:每天向全國各運營大區釘釘運營群定時傳送pdf業務運營報告;

  通過對各Office操作元件對比,選擇Spire.Doc。它專門為開發人員進行建立,讀取,寫入、轉換列印 word 文件檔案提供便利,不需要安裝 MS Office即可對 word、Excel、Pdf 進行操作。包含商業版與免費版,其中免費版對文件頁數有限制(Free version is limited to 500 paragraphs and 25 tables. This limitation is enforced during reading or writing files. When converting word documents to PDF and XPS files, you can only get the first 3 page of PDF file.

)。官方地址:https://www.e-iceblue.com/

元件安裝


  • 開啟Visual Studio ,選擇 “工具" -->”NuGet包管理器“ -->”程式包管理控制檯“
  • 輸入:Install-Package FreeSpire.Doc -Version 7.1.13
  • 其中:可安裝的歷史版本可參見:https://www.nuget.org/packages/FreeSpire.Doc, 如下圖:

常用操作


1、載入Word模板

  • Document document = new Document();
    document.LoadFromFile("sample.docx", FileFormat.Docx);

 2 、獲取模板中的表格

  • //獲取第一個節
    Section section = document.Sections[0];
    
    //獲取第一個表格,若模板中有多個表格,則序號從0開始依次順延
    Table table = section.Tables[0] as Table;

3、表格行列操作

  • //新增一行到表格的最後
    table.AddRow(true, 4);
    
    //插入一行到表格的第三行
    table.Rows.Insert(2, table.AddRow());
    
    //新增一列到表格,設定單元格的寬度和寬度型別
    for (int i = 0; i < table.Rows.Count; i++)
    {
        TableCell cell = table.Rows[i].AddCell(true);
        cell.Width = table[0, 0].Width;
        cell.CellWidthType = table[0, 0].CellWidthType;
    }
    
    //刪除第二行
    table.Rows.RemoveAt(1);
    
    //刪除第二列
    for (int i = 0; i < table.Rows.Count; i++)
    {
        table.Rows[i].Cells.RemoveAt(1);
    }
    
    //設定第一行的行高
    table.Rows[0].Height = 40;
    
    //設定第二列的列寬
    for (int i = 0; i < table.Rows.Count; i++)
    {    
        table.Rows[i].Cells[1].Width = 40;
    }

4、表格單元格賦值及樣式 

  • //新增第1行
    TableRow row1 = table.AddRow();
    
    //新增第1個單元格到第1行
    TableCell cell1 = row1.AddCell();
    cell1.AddParagraph().AppendText("姓 名");
    
    //新增第2個單元格到第1行
    TableCell cell2 = row1.AddCell();
    cell2.AddParagraph().AppendText("年 齡");
    
    //設定表格的第二行第一列水平居左                        
    table[1, 0].Paragraphs[0].Format.HorizontalAlignment = HorizontalAlignment.Left;
    
    //設定表格第二行第一列垂直居上
    table[1,0].CellFormat.VerticalAlignment = VerticalAlignment.Top;
    
    //設定第二行第一個單元格的背景顏色
    table[1,0].CellFormat.BackColor = Color.SeaGreen;
    
    //通過 TextRange.CharacterFormat 來設定單元格內文字屬性,如:陰影,字型、顏色等
    TextRange HText = paragraph.AppendText("this is a test!");
    HText.CharacterFormat.IsShadow = true;
    HText.CharacterFormat.FontSize = 80;

5、表格樣式

  • /獲取第一個表格
    Table table = section.Tables[0] as Table;
    
    //給表格應用內建樣式
    table.ApplyStyle(DefaultTableStyle.LightGridAccent3);
    
    //設定表格的上邊框
    table.TableFormat.Borders.Top.BorderType = BorderStyle.Double;
    table.TableFormat.Borders.Top.LineWidth = 1.0F;
    table.TableFormat.Borders.Top.Color = Color.YellowGreen;
    
    //設定第一行的背景顏色
    table.Rows[0].RowFormat.BackColor = Color.SeaGreen;
    
    //設定第一行第一個單元格的背景顏色
    table[0,0].CellFormat.BackColor = Color.SeaGreen;

    當word模板中的表格由Excel畫好後,貼上至Word,然後再讀取模板中的表格時,上面的這些樣式設定好象未起作用,待驗證

6、寫操作

  • //文件轉換
    ocument document = new Document();
    
    document.LoadFromFile("sample.doc");
    document.SaveToFile("result.html", FileFormat.Html);
    document.Close();
    
    ocument.LoadFromFile("sample.html", FileFormat.Html, XHTMLValidationType.None);
    document.SaveToFile("result.doc");
    document.Close();
    
    //其它檔案的轉換類似

    總結:對於Table表格的操作與DataTable操作很類似,在每個單元格內 AddParagraph() 支援增加不同的Range型別,如:文字、超鏈、表格巢狀等,這塊的處理又與DevExpress控制元件的表格操作很類似,很贊,要是開源就更棒!

應用開發步驟


  • 新建Word報告模板,包括變數、表格等,模板中的表格,我是在Excel中畫好後複製過來的,如下圖:
  • NuGet安裝Spire.Doc元件
  • 載入Word模板,獲取業務資料填充表格
  • 儲存pdf文件,免費元件只能最多3頁資料,因此在定義Word模板時,將文件長寬設定為文件允許的最大高度,以便於顯示更多的內容
  • 示例應用效果如下圖:
  • 文件中設定的聯查,可以在資料填充的過程中設定聯查到你的業務系統,聯查的設定參見上一節的第4小節,單元格內的paragraph允許向其內新增不同的控制元件,如:文字、圖片、超鏈、複選框等,點選聯查應用效果如下圖(當然你得控制訪問許可權): 
  • 生成報告是本需求的核心,你可以將生成的文件儲存至指定的Web站點對應的目錄下,然後建立釘釘機器人,定時傳送訊息,訊息體指定為一個http地址即可,應用效果如下圖:

參考文件


  • 幫助文件: http://e-iceblue.cn/spiredoc/word-conversion-feature.html
  • 安裝: https://www.nuget.org/packages/FreeSpire.Doc