C# WPF本地环境下无需付费组件预览Word/Pdf附件方案咨询
免费实现WPF本地Word/PDF附件预览方案
PDF预览
PdfiumViewer
基于Google开源的Pdfium库,完全免费,可直接通过NuGet安装PdfiumViewer.Wpf包。它提供了现成的WPF预览控件,集成简单:
using PdfiumViewer; using System.IO; // 加载本地PDF文件 var pdfDoc = PdfDocument.Load("sample.pdf"); // 初始化WPF预览控件 var pdfViewer = new PdfiumViewer.Wpf.PdfViewer(); pdfViewer.Document = pdfDoc; // 将控件添加到窗口容器(如Grid) yourHostGrid.Children.Add(pdfViewer);
NuGet包会自动处理不同平台的Pdfium原生依赖,无需额外配置。
MuPDF
另一款开源PDF渲染库,有.NET绑定包MuPdf.NET可通过NuGet获取,支持高质量渲染,适合对预览精度要求较高的场景。
Word预览
Word的免费本地预览没有一站式的现成控件,推荐以下两种可行思路:
转换为XPS/PDF后预览
将Word文档转为WPF原生支持的XPS格式,或PDF格式,再用对应控件预览:
用DocX处理.docx
Novacode DocX是开源免费的.docx处理库,支持导出为XPS:
using Novacode; using System.IO; using System.Windows.Xps.Packaging; using (var doc = DocX.Load("sample.docx")) { using (var xpsStream = new MemoryStream()) { var xpsDoc = new XpsDocument(xpsStream, FileAccess.ReadWrite); doc.SaveAsXps(xpsDoc); xpsDoc.Close(); // 用WPF自带的DocumentViewer预览XPS var viewer = new DocumentViewer(); xpsStream.Position = 0; var targetXpsDoc = new XpsDocument(xpsStream, FileAccess.Read); viewer.Document = targetXpsDoc.GetFixedDocumentSequence(); yourHostGrid.Children.Add(viewer); } }
注意:DocX仅支持.docx格式,不兼容旧版.doc。
处理旧版.doc文件
用开源免费的LibreOffice命令行工具,将.doc转为.docx或PDF:
# 命令行示例:将doc转为docx soffice --headless --convert-to docx "sample.doc"
在WPF中可通过Process类调用该命令,转换完成后再用上述方案预览。
基于OpenXML SDK直接渲染内容
微软官方免费的OpenXML SDK可读取.docx的所有内容,手动将Word元素(段落、表格、图片等)映射为WPF控件:
- 引用
DocumentFormat.OpenXmlNuGet包。 - 用
WordprocessingDocument加载文档,遍历文档结构。 - 将段落转为
TextBlock,表格转为Grid,图片转为Image等,组装成预览界面。
这种方式开发量较大,但完全无依赖,适合需要自定义预览样式的场景。
关键注意点
- 所有方案均为本地部署,无需依赖Web服务、Office Online或Interop组件。
- 确保使用的库均为开源免费授权(如MIT、Apache),避免版权风险。
内容的提问来源于stack exchange,提问作者yangjun
相关产品推荐
相关产品推荐

