WPF优秀组件推荐之FreeSpire
概述
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文档

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);
}
}
生成Excel文档

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

Code:

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);
}
}
生成Pdf文档

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);
}
}
Word转换为PDF
Pdf的生成是比较麻烦的,更像是绘图操作,如果客户一定要Pdf格式报表,我一般先生成一个Word的临时文件,然后再转成pdf,当然Word的生成仍可以采用模板的方法。

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);
}
以上代码下载地址:NiceComponents · Bruce/Learn WPF - 码云 - 开源中国 (gitee.com)
本文只是演示了一些基本应用,表格、图片等都没有涉及,主要是官方文档已经非常详细了,更多高级功能请参考帮助文档。
WPF优秀组件推荐之FreeSpire的更多相关文章
- WPF优秀组件推荐之MahApps
概述 MahApps是一套基于WPF的界面组件,通过该组件,可以使用较小的开发成本实现一个相对很好的界面效果. 官方网站:MahApps.Metro - Home 开源代码:MahApps · Git ...
- WPF优秀组件推荐之LiveCharts
概述 LiveCharts是一个比较漂亮的WPF图表控件,在数据变化时还会有动画切换的效果,并且样式也可以控制. 官方网站:Live Charts (lvcharts.net) 开源代码:GitHub ...
- WPF优秀组件推荐之Stylet(一)
一.简介 Stylet是基于WPF的一款MVVM组件,虽然WPF本身是自带MVVM功能的,但实现起来不是很方便 ,通过Stylet,用户可以用很少的代码就能享受MVVM带来的舒适体验. 目前Style ...
- WPF优秀组件推荐之Stylet(二)
上一篇文章介绍了Stylet的一些基本功能,本篇将介绍一些深入一点的功能. 依赖注入 在Bootstrapper 类中注入需要的对象: public class Bootstrapper : Boot ...
- JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)
前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...
- 优秀工具推荐:超实用的 CSS 库,样板和框架
当启动一个新的项目,使用 CSS 框架或样板,可以帮助您节省大量的时间.在这篇文章中,我编译整理了我最喜欢的 CSS 样板,框架和库,帮助你在建立网站或应用程序时更加高效. 您可能感兴趣的相关文章 精 ...
- 【转】JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)
前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...
- HP-Socket国产优秀socket通信组件推荐
来源:http://blog.csdn.net/clb929/article/details/51085983 * HP-Socket 官方网站:http://www.jessma.org * HP- ...
- vue组件推荐
Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...
随机推荐
- ideal 创建maven 项目
一 准备工作,已经配置好了maven 环境 .没有的话,参考我的上一篇笔记. 二,ideal相关配置 打开ideal 找到设置. file ------->setting . 点击 ...
- jstl split 分割字符串?
1. 在已经获得数据的前提下,对数据进行分割,分割后的结果是一个数组,可以通过数组获得我们需要的数据 2. value 是获得值 需要${} 的方式获取, var 是设置变量. var = " ...
- linux 权限命令行 xshell 切换用户
一. 权限命令行 两种方式. 1.1 chown -R 指定的用户名, 权限的文件/文件夹 赋予这个用户的权限读写. /*1.0 权限命令行 1. chown -R 指定的用户名 权限的文件/文件夹 ...
- Go 学习路线(2022)
原文链接: Go 学习路线(2022) Go 语言的发展越来越好了,很多大厂使用 Go 作为主要开发语言,也有很多人开始学习 Go,准备转 Go 开发. 那么,怎么学呢? 我发现,在互联网时代,学习的 ...
- SharePoint Online 为Modern Page添加脚本
前言 众所周知,如果我们想向SharePoint 页面添加脚本,最方便的便是经典页面,添加方式主要有内容编辑器Web部件或者直接使用SharePoint Designer. 但是,如果页面是Moder ...
- Atcoder ARC-064
ARC064(2020.7.23) A 直接贪心即可. B 手玩样例可以猜出这样一个结论,如果两端字符相同,如果字符串长度为奇数那么后手赢,否则先手赢,两端字符不同则相反.证明的话先从特殊情况开始入手 ...
- Request与Response
前言 request和response对象是由服务器创建的.我们来使用它们: request对象是来获取请求消息,response对象是来设置响应消息. Request 定义 服务器进行创建,通过该对 ...
- File 类的 getPath()、getAbsolutePath()、getCanonicalPath() 的区别【转】
File 类的 getPath().getAbsolutePath().getCanonicalPath() 的区别 感谢大佬:https://blog.csdn.net/zsensei/articl ...
- JS 将Table内容导出到Excel(样式设计)
转载请注明来源:https://www.cnblogs.com/hookjc/ function saveAsExcel(tableID){ var tb = new TableToExcel(tab ...
- ARC快速入门
1.ARC机制判断 iOS5以后,创建项目默认的都是ARC ARC机制下有几个明显的标志: 不允许调用对象的 release方法 不允许调用 autorelease方法 再重写父类的dealloc方法 ...