概述

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文档

  1. public void SaveWord()
  2. {
  3. SaveFileDialog fileDialog = new SaveFileDialog()
  4. {
  5. Filter = "Word File(*.docx)|*.docx",
  6. FileName = "Report01" + ".docx",
  7. };
  8.  
  9. if (fileDialog.ShowDialog() == true)
  10. {
  11. Document document = new Document();
  12. Section s = document.AddSection();
  13. Paragraph para1 = s.AddParagraph();
  14. para1.AppendText("欢迎使用Spire.Doc");
  15.  
  16. document.SaveToFile(fileDialog.FileName, Spire.Doc.FileFormat.Docx);
  17. Process.Start(fileDialog.FileName);
  18. }
  19. }

生成Excel文档

  1. public void SaveExcel()
  2. {
  3. SaveFileDialog fileDialog = new SaveFileDialog()
  4. {
  5. Filter = "Word File(*.xlsx)|*.xlsx",
  6. FileName = "Report01" + ".xlsx",
  7. };
  8.  
  9. if (fileDialog.ShowDialog() == true)
  10. {
  11. Workbook workbook = new Workbook();
  12. Worksheet sheet = workbook.Worksheets[0];
  13.  
  14. sheet.Range[1, 1].Text = "步骤";
  15. sheet.Range[1, 2].Text = "时间";
  16.  
  17. int row = 2;
  18. for (int i = 0; i <10; i++)
  19. {
  20. sheet.Range[row, 1].Text = i.ToString();
  21. sheet.Range[row, 2].Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  22. row++;
  23. }
  24.  
  25. sheet.Range[row + 2, 1].Text = "报告时间:";
  26. sheet.Range[row + 2, 2].Text = $"2022-02-02 11:11:11";
  27.  
  28. workbook.SaveToFile(fileDialog.FileName, ExcelVersion.Version2010);
  29. Process.Start(fileDialog.FileName);
  30. }
  31. }

读取Word模板

生成Word文档时,格式其实很难控制,有一个简单的办法就是先创建一个模板格式文件,动态的内容先用特殊的占位字符串,然后程序再把相应的占位字符串给替换掉,这样文件的样式就可以非常容易调整和修改,客户有什么特殊需求还能直接修改模板,都不用改代码。

Code:

  1. public void LoadWord()
  2. {
  3. SaveFileDialog fileDialog = new SaveFileDialog()
  4. {
  5. Filter = "Word File(*.docx)|*.docx",
  6. FileName = "Report02" + ".docx",
  7. };
  8.  
  9. if (fileDialog.ShowDialog() == true)
  10. {
  11. Document document = new Document();
  12. document.LoadFromFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Template", "WordTemplate.docx"));
  13.  
  14. document.Replace("<$ReportTitle>", "报表标题", false, true);
  15. document.Replace("<$CompanyName>", "公司名称", false, true);
  16.  
  17. document.SaveToFile(fileDialog.FileName, Spire.Doc.FileFormat.Docx);
  18. Process.Start(fileDialog.FileName);
  19. }
  20. }

生成Pdf文档

  1. public void SavePdf()
  2. {
  3. SaveFileDialog fileDialog = new SaveFileDialog()
  4. {
  5. Filter = "Word File(*.pdf)|*.pdf",
  6. FileName = "Report01" + ".pdf",
  7. };
  8.  
  9. if (fileDialog.ShowDialog() == true)
  10. {
  11. //初始化一个PdfDocument实例
  12. PdfDocument document = new PdfDocument();
  13.  
  14. //设置边距
  15. PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
  16. PdfMargins margins = new PdfMargins();
  17. margins.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
  18. margins.Bottom = margins.Top;
  19. margins.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
  20. margins.Right = margins.Left;
  21.  
  22. //添加新页
  23. PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margins);
  24.  
  25. //自定义PdfTrueTypeFont、PdfPen实例
  26. PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 11f), true);
  27. PdfPen pen = new PdfPen(Color.Black);
  28.  
  29. //使用DrawString方法在指定位置写入文本
  30. string text = "我的第一个C# PDF文档";
  31. page.Canvas.DrawString(text, font, pen, 100, 50);
  32.  
  33. //保存文档
  34. document.SaveToFile(fileDialog.FileName);
  35. Process.Start(fileDialog.FileName);
  36. }
  37. }

Word转换为PDF

Pdf的生成是比较麻烦的,更像是绘图操作,如果客户一定要Pdf格式报表,我一般先生成一个Word的临时文件,然后再转成pdf,当然Word的生成仍可以采用模板的方法。

  1. public void WordToPdf()
  2. {
  3. var WordFilePath = @"E:\Report02.docx";
  4. var PdfFilePath = @"E:\Report02.pdf";
  5.  
  6. Document document = new Document();
  7. document.LoadFromFile(WordFilePath);
  8. document.SaveToFile(PdfFilePath, Spire.Doc.FileFormat.PDF);
  9. Process.Start(PdfFilePath);
  10. }

以上代码下载地址:NiceComponents · Bruce/Learn WPF - 码云 - 开源中国 (gitee.com)

本文只是演示了一些基本应用,表格、图片等都没有涉及,主要是官方文档已经非常详细了,更多高级功能请参考帮助文档。

WPF优秀组件推荐之FreeSpire的更多相关文章

  1. WPF优秀组件推荐之MahApps

    概述 MahApps是一套基于WPF的界面组件,通过该组件,可以使用较小的开发成本实现一个相对很好的界面效果. 官方网站:MahApps.Metro - Home 开源代码:MahApps · Git ...

  2. WPF优秀组件推荐之LiveCharts

    概述 LiveCharts是一个比较漂亮的WPF图表控件,在数据变化时还会有动画切换的效果,并且样式也可以控制. 官方网站:Live Charts (lvcharts.net) 开源代码:GitHub ...

  3. WPF优秀组件推荐之Stylet(一)

    一.简介 Stylet是基于WPF的一款MVVM组件,虽然WPF本身是自带MVVM功能的,但实现起来不是很方便 ,通过Stylet,用户可以用很少的代码就能享受MVVM带来的舒适体验. 目前Style ...

  4. WPF优秀组件推荐之Stylet(二)

    上一篇文章介绍了Stylet的一些基本功能,本篇将介绍一些深入一点的功能. 依赖注入 在Bootstrapper 类中注入需要的对象: public class Bootstrapper : Boot ...

  5. JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)

    前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...

  6. 优秀工具推荐:超实用的 CSS 库,样板和框架

    当启动一个新的项目,使用 CSS 框架或样板,可以帮助您节省大量的时间.在这篇文章中,我编译整理了我最喜欢的 CSS 样板,框架和库,帮助你在建立网站或应用程序时更加高效. 您可能感兴趣的相关文章 精 ...

  7. 【转】JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)

    前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...

  8. HP-Socket国产优秀socket通信组件推荐

    来源:http://blog.csdn.net/clb929/article/details/51085983 * HP-Socket 官方网站:http://www.jessma.org * HP- ...

  9. vue组件推荐

    Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...

随机推荐

  1. Linux配置zookeeper 和zookeeper简单介绍

    一.zookeeper介绍? 一.zookeeper 简单介绍? 1.什么是集群? // 很多台服务器保持连接通讯状态,并且所有的服务器做同一件事就称之为集群 2.什么是zookeeper? 注册中心 ...

  2. maven的三种项目打包方式----jar,war,pom

    1.pom工程:**用在父级工程或聚合工程中.用来做jar包的版本控制.必须指明这个聚合工程的打包方式为pom 2.war工程:将会打包成war,发布在服务器上的工程.如网站或服务.在SpringBo ...

  3. Bootstrap 弹出表单

  4. JavaScript与java语法区别

    网页中各种技术的作用 感谢大佬:https://blog.csdn.net/RookiexiaoMu_a/article/details/89052768 HTML 制作网页的结构 CSS 美化网页 ...

  5. autorelease基本使用

    1.autorelease基本概念 autorelease是一种支持引用计数的内存管理方式,只要给对象发送一条autorelease消息,会将对象放到一个自动释放池中,当自动释放池被销毁时,会对池子里 ...

  6. python——rsa加签名以及分段加密

    借鉴 https://www.cnblogs.com/sammy1989/p/9583965.html 最近请求一个系统,对方要求加密.折腾了一天,使用pycryptodome库,最终代码如下: #! ...

  7. 500行代码了解Mecached缓存客户端驱动原理

    原创不易,求分享.求一键三连 缓存一般是用来加速数据访问的效率,在获取数据耗时高的场景下使用缓存可以有效的提高数据获取的效率. 比如,先从memcached中获取数据,如果没有则查询mysql中的数据 ...

  8. 介绍回流与重绘(Reflow & Repaint),以及如何进行优化?

    前言 回流与重绘对于前端来说可以说是非常重要的知识点了,我们不仅需要知道什么是回流与重绘,还需要知道如何进行优化.一个页面从加载到完成,首先是构建DOM树,然后根据DOM节点的几何属性形成render ...

  9. 3.HTTP协议详解

    ### Web核心+HTTP协议 准备工作:XAMPP+PhpWindd+Aglieone HTTP协议简介 HTTP请求 最常用请求 GET请求获取URL所标识的资源 POST请求在URL所标识的资 ...

  10. 帆软报表(finereport)图表钻取详细类别 当前页对话框展示

    添加参数栏,季度下拉框的控件命名为 jd 这里添加雷达图做案例 编辑→特效→ 添加JavaScript 参数:wd    值:分类名      #取雷达图所点击的点 参数:jd      值:公式$j ...