You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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控件:

  1. 引用DocumentFormat.OpenXml NuGet包。
  2. 用WordprocessingDocument加载文档,遍历文档结构。
  3. 将段落转为TextBlock,表格转为Grid,图片转为Image等,组装成预览界面。
    这种方式开发量较大,但完全无依赖,适合需要自定义预览样式的场景。

关键注意点

  • 所有方案均为本地部署,无需依赖Web服务、Office Online或Interop组件。
  • 确保使用的库均为开源免费授权(如MIT、Apache),避免版权风险。

内容的提问来源于stack exchange,提问作者yangjun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:52:35