在。NET Core中实现Word到PDF的转换:方法与实例代码

发表时间: 2023-10-08 08:40

将Word转换为PDF的过程可以通过.NET Core中的一些开源库来实现,其中最常用的是
Microsoft.Office.Interop.Word
PdfSharp。但是需要注意的是,
Microsoft.Office.Interop.Word
并不是一个.NET Core库,它是一个COM组件,因此在使用时可能会遇到一些与.NET Core的兼容性问题。

下面是一个示例代码,该代码将一个Word文件转换为PDF,并使用了
Microsoft.Office.Interop.Word
PdfSharp库:

using System;using System.IO;using System.Reflection;using System.Threading;using Microsoft.Office.Interop.Word;using PdfSharp;public class WordToPdfConverter{    private static Application wordApp = new Application();    private static object wordDocument = null;    public void ConvertWordToPdf(string wordFilePath, string pdfFilePath)    {        try        {            //打开Word文档            wordDocument = wordApp.Documents.Open(wordFilePath);            //将Word文档保存为PDF            wordApp.Visible = true; //设置Word应用程序可见,以便在保存时弹出保存对话框            wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone; //关闭所有提示框            wordDocument.SaveAs2(pdfFilePath, WdSaveFormat.wdFormatPDF);        }        catch (Exception ex)        {            throw new Exception("转换Word到PDF时出现错误 : " + ex.Message);        }        finally        {            //关闭Word文档和应用程序            wordDocument.Close();            wordApp.Quit();        }    }}

使用以上的ConvertWordToPdf方法,你可以将一个Word文件转换为PDF。但是这个方法依赖于
Microsoft.Office.Interop.Word
库,并且这个库不是.NET Core库,因此在一些平台上可能会有兼容性问题。因此,我们需要找到一个纯.NET Core的方法来实现这个转换。

PdfSharp是一个纯.NET库,但是它只能创建PDF,不能从Word文件创建PDF。因此,我们需要使用一个额外的库来将Word文件转换为HTML或XML,然后再使用PdfSharp将HTML或XML转换为PDF。这个额外的库可以是LibreOffice的命令行版本(例如unoconv)或Pandoc。以下是使用这些库的示例代码:

首先,我们需要安装这些库。你可以使用NuGet包管理器来安装它们:

# 安装PdfSharp和LibreOffice的命令行版本(例如unoconv)或Pandoc的NuGet包Install-Package PdfSharp -Version 1.14.0Install-Package unoconv -Version 1.0.0-beta145 -Pre   #这个是unoconv的NuGet包

然后我们就可以使用以下代码来将Word文件转换为PDF了:

using System;using System.IO;using System.Linq;using PdfSharp;using WordNetSharp; // 需要安装这个库来使用Pandocpublic class WordToPdfConverter{    public void ConvertWordToPdf(string wordFilePath, string pdfFilePath)    {        try        {            string html = ConvertWordToHtml(wordFilePath); // 将Word文件转换为HTML或XML,这个方法需要LibreOffice或Pandoc的支持            ConvertHtmlToPdf(html, pdfFilePath); // 将HTML或XML转换为PDF,这个方法需要PdfSharp的支持        }        catch (Exception ex)        {            throw new Exception("转换Word到PDF时出现错误 : " + ex.Message);        }    }}

下面是使用unoconv将Word转换为HTML的示例代码:

using System;using System.IO;using System.Reflection;using unoconv.dll; // 引入unoconv的dll文件public class WordToHtmlConverter{    public string ConvertWordToHtml(string wordFilePath)    {        // 初始化unoconv的实例        var converter = new Converter();        try        {            // 将Word文件转换为HTML            string html = converter.Convert(wordFilePath, "html", "");            // 将HTML保存到临时文件中            string tempFilePath = Path.GetTempFileName();            File.WriteAllText(tempFilePath, html);            // 返回HTML的内容            return File.ReadAllText(tempFilePath);        }        catch (Exception ex)        {            throw new Exception("转换Word到HTML时出现错误 : " + ex.Message);        }        finally        {            // 销毁unoconv的实例,释放资源            Assembly.Load("unoconv.dll").GetType("unoconv.Converter").GetMethod("Close").Invoke(converter, null);        }    }}

下面是使用PdfSharp将HTML转换为PDF的示例代码:

using System;using System.IO;using PdfSharp;public class HtmlToPdfConverter{    public void ConvertHtmlToPdf(string html, string pdfFilePath)    {        using (var document = new XDocument())        {            // 将HTML内容加载到XDocument对象中            document.LoadHtml(html);            // 创建一个PdfWriter对象,用于将XDocument对象保存为PDF文件            var writer = new PdfWriter();            document.Save(writer); // 将XDocument对象保存为PDF文件        }        // 将PDF文件保存到指定的路径中        File.WriteAllBytes(pdfFilePath, File.ReadAllBytes(Path.GetTempFileName()));    }}