C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#合并Word并转为PDF

C#代码实现批量合并Word文档并转为PDF

作者:秋天的落叶铺满小路

本文将介绍如何利用 Spire.Doc for .NET 库,通过几行简洁的 C# 代码,轻松实现将指定文件夹下的所有 Word 文档合并并导出为 PDF,有需要的小伙伴可以了解下

将多个 Word 文档合并成一个 PDF 文件,方便分发、打印或存档。本文将介绍如何利用 Spire.Doc for .NET 库,通过几行简洁的 C# 代码,轻松实现将指定文件夹下的所有 Word 文档合并并导出为 PDF。

作为一款专业的 .NET Word 组件,Spire.Doc for .NET 允许开发者在无需安装 Microsoft Office 的情况下,高效地创建、编辑、转换和打印 Word 文档,具有出色的稳定性和可扩展性。

准备工作:安装 Spire.Doc

首先,在你的 .NET 项目中安装 Spire.Doc 库。推荐通过 NuGet 包管理器进行安装,方便快捷。

你可以通过 Visual Studio 的“管理 NuGet 包”搜索 Spire.Doc 并安装,或者在“程序包管理器控制台”中执行以下命令:

PM> Install-Package Spire.Doc

代码实现:合并与转换

核心逻辑很简单:创建一个新的 Document 对象来承载最终合并的内容;读取文件夹下所有 Word 文件;加载第一个文档作为基础;然后循环将后续文档插入其中;最后一步是将其保存为 PDF 格式。

以下是完整的代码示例:

using System.IO;
using System.Linq;
using Spire.Doc;
namespace MergeWordFolder
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 创建目标文档容器
            Document mergedDocument = new Document();
            // 2. 获取指定文件夹下所有的 Word 文档
            string folderPath = @"Documents"; // 请替换为你的文件夹路径
            string[] files = Directory.GetFiles(folderPath, "*.docx")
                                      .OrderBy(f => f)
                                      .ToArray();
            // 检查是否有文件
            if (files.Length == 0)
            {
                Console.WriteLine("文件夹中没有找到 .docx 文件。");
                return;
            }
            // 3. 加载第一个文档作为基础
            mergedDocument.LoadFromFile(files[0], FileFormat.Docx);
            // 4. 依次插入剩余的文档
            for (int i = 1; i < files.Length; i++)
            {
                // InsertTextFromFile 方法可以将一个完整文档的内容追加到当前文档末尾
                mergedDocument.InsertTextFromFile(files[i], FileFormat.Docx);
            }
            // 5. 将合并后的文档保存为 PDF
            mergedDocument.SaveToFile("MergedDocument.pdf", FileFormat.PDF);
            Console.WriteLine("合并完成!已生成 MergedDocument.pdf");
        }
    }
}

代码逐段解析

  1. 创建文档对象 :Document mergedDocument = new Document(); 实例化了一个空白的 Word 文档对象,它将作为合并所有内容后的最终容器。
  2. 获取文件列表 :Directory.GetFiles(folderPath, "*.docx") 会检索指定路径下所有扩展名为 .docx 的文件。.OrderBy(f => f) 确保了文件按名称排序合并,避免了顺序混乱。你可以根据需要调整排序逻辑。
  3. 加载与插入 :
    • mergedDocument.LoadFromFile(files[0], FileFormat.Docx):将第一个 Word 文档加载到我们创建的空白容器中。
    • mergedDocument.InsertTextFromFile(files[i], FileFormat.Docx):这是一个非常高效的方法。在循环中,它将后续每个 Word 文档的全部内容(包括文本、图片、表格、页眉页脚等)直接插入到 mergedDocument 的末尾。
  4. 保存为 PDF :mergedDocument.SaveToFile("MergedDocument.pdf", FileFormat.PDF) 是最后一步,也是最关键的一步。它将合并好的 Document 对象直接输出为一个 PDF 文件,实现了从“合并”到“转换”的一站式操作。

知识扩展

在 C# 中批量合并 Word 并转为 PDF,主流方案是使用专门处理文档的第三方库。这些库功能强大,且不依赖本机安装 Office。

下面是几种主流方案的实现方法与对比。

方案一:Aspose.Words(功能全面,商业库)

Aspose.Words 是一个功能非常全面的 .NET Word 文档处理库,可以不依赖 Office 直接操作文档,并能很好地保留原格式。

安装 NuGet 包

Install-Package Aspose.Words

核心代码

using Aspose.Words;
public void MergeAndConvertToPdf(List<string> wordFiles, string outputPdfPath)
{
    // 创建一个空文档作为合并目标
    Document mergedDoc = new Document();
    // 移除目标文档中默认的空白内容
    mergedDoc.RemoveAllChildren();
    foreach (string file in wordFiles)
    {
        // 加载源 Word 文档
        Document srcDoc = new Document(file);
        // 将源文档追加到目标文档末尾,并保留源格式
        mergedDoc.AppendDocument(srcDoc, ImportFormatMode.KeepSourceFormatting);
    }
    // 将合并后的文档保存为 PDF
    mergedDoc.Save(outputPdfPath);
}

代码说明

方案二:Syncfusion DocIO(功能丰富,商业库,有免费社区版)

Syncfusion 的 DocIO 是一个强大的 .NET Word 库,同样不依赖 Office 就能创建、编辑和转换 Word 文档。Syncfusion 提供免费的社区版,对个人开发者和小型团队比较友好。

安装 NuGet 包

Install-Package Syncfusion.DocIORenderer.Net.Core

核心代码

using Syncfusion.DocIO;
using Syncfusion.DocIO.DLS;
using Syncfusion.DocIORenderer;
using Syncfusion.Pdf;
public void MergeAndConvertToPdf(List<string> wordFiles, string outputPdfPath)
{
    // 创建一个空文档作为合并目标
    using (WordDocument mergedDoc = new WordDocument())
    {
        // 遍历所有源文件
        foreach (string file in wordFiles)
        {
            using (WordDocument srcDoc = new WordDocument(file, FormatType.Automatic))
            {
                // 将源文档内容导入到合并文档末尾,并保留格式
                mergedDoc.ImportContent(srcDoc, ImportOptions.KeepSourceFormatting);
            }
        }
        // 使用 DocIORenderer 将 Word 文档转换为 PDF
        using (DocIORenderer renderer = new DocIORenderer())
        {
            using (PdfDocument pdfDoc = renderer.ConvertToPDF(mergedDoc))
            {
                // 保存为 PDF 文件
                pdfDoc.Save(outputPdfPath);
            }
        }
    }
}

注意:使用 Syncfusion 库时,需要在应用启动时注册许可证密钥,否则输出会带有试用水印。

方案三:GroupDocs.Merger(专长合并,商业库)

如果工作流不仅涉及 Word,还包含 PDF、Excel 等其他格式,GroupDocs.Merger 是更合适的选择。它能直接将 DOCX、XLSX、PDF 等多种文档合并成一个 PDF。

安装 NuGet 包

Install-Package GroupDocs.Merger

核心代码

using GroupDocs.Merger;
using GroupDocs.Merger.Domain.Options;
public void MergeVariousToPdf(List<string> inputFiles, string outputPdfPath)
{
    using (Merger merger = new Merger(inputFiles[0]))
    {
        // 从第二个文件开始,依次追加到合并结果中
        for (int i = 1; i < inputFiles.Count; i++)
        {
            merger.Join(inputFiles[i]);
        }
        // 保存合并结果为 PDF
        merger.Save(outputPdfPath);
    }
}

GroupDocs.Merger 会根据第一个文件的格式决定输出格式,因此如果输入列表的第一个文件是 PDF,输出就是 PDF。它支持 Word、Excel、PDF、PPT 等多种格式的合并。

方案四:Xceed DocX(开源、轻量,PDF 功能受限)

如果预算有限,DocX 是一个开源免费的 .NET Word 操作库,轻量且不依赖 Office。

安装 NuGet 包

Install-Package DocX

合并 Word 文档的代码

using Xceed.Document.NET;
using Xceed.Words.NET;
public void MergeWordDocuments(List<string> wordFiles, string outputDocxPath)
{
    using (DocX mergedDoc = DocX.Create(outputDocxPath))
    {
        foreach (string file in wordFiles)
        {
            using (DocX srcDoc = DocX.Load(file))
            {
                // 将源文档内容插入到合并文档末尾
                mergedDoc.InsertDocument(srcDoc);
            }
        }
        mergedDoc.Save();
    }
}

总结

通过上述简单的代码,我们成功避免了手动打开、复制、粘贴再另存为 PDF 的繁琐流程。Spire.Doc 库在处理此类文档合并任务时非常高效。

除了合并 .docx 文件,这个方法还具备很强的扩展性。例如,如果你需要合并 .doc 文件,只需修改 Directory.GetFiles 的搜索模式,并在 LoadFromFile 和 InsertTextFromFile 方法中指定对应的 FileFormat 即可。

到此这篇关于C#代码实现批量合并Word文档并转为PDF的文章就介绍到这了,更多相关C#合并Word并转为PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文