您的位置:首页 > 手游攻略 > 基于C#代码实现方式创建PDF作品集(文件包)实用指南

基于C#代码实现方式创建PDF作品集(文件包)实用指南

作者:互联网  时间: 2026-10-24 12:20:01  

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“基于C#代码实现方法创建PDF作品集(文件包)”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

落到代码里,PDF 文件包(PDF Portfolio)是一种用来集合多个文件的 PDF 容器,能够包含文本文件、电子表格、电子邮件、图片、PowerPoint 演示文稿以及绘图文件等多种类型的内容。

结合项目来看,虽然 PDF 文件包会将不同格式的文件整合到一个 PDF 中,但其中每个文件仍然保留原始的格式、分辨率和尺寸。下面会介绍如何借助编程方式采用 C# 和 VB.NET 新建 PDF 文件包,同时向其中添加文件或文件夹。

准备开发环境

实际处理时,在开始之前,需在 .NET 项目中添加用来 PDF 处理的相关程序集引用。能够借助下载对应的 DLL 文件,或采用 NuGet 包管理器将相关程序集添加到项目中。

PM> Install-Package Spire.PDF

新建 PDF 文件包并添加文件

理解这一步时,由于 PDF 文件包本质上是多个文件的集合,能够借助 PDF 文档对象提供的集合功能新建文件包,并采用添加文件的方法将所需文件嵌入其中。具体步骤如下所示:

  1. 指定需添加到 PDF 文件包中的文件。
  2. 新建 PdfDocument 实例。
  3. 借助 PdfDocument.Collection.AddFile() 方法新建 PDF 文件包同时添加文件。
  4. 采用 PdfDocument.SaveToFile() 方法保存生成的 PDF 文件。

完整示例如下所示:

using System;
using Spire.Pdf;

namespace CreatePDFPortfolio
{
    class Program
    {
        static void Main(string[] args)
        {
            // 指定需要添加的文件
            String[] files = new String[] { "input.pdf", "sample.docx", "report.xlsx", "Intro.pptx", "logo.png" };

            // 创建 PdfDocument 实例
            using (PdfDocument pdf = new PdfDocument())
            {
                // 创建 PDF 文件包并添加文件
                for (int i = 0; i < files.Length; i++)
                {
                    pdf.Collection.AddFile(files[i]);

                }
                // 保存生成的文件
                pdf.SaveToFile("PortfolioWithFiles.pdf", FileFormat.PDF);
                pdf.Dispose();
            }
        }
    }
}

新建 PDF 文件包并添加文件夹

落到代码里,在新建 PDF 文件包后,还能够在其中新建文件夹,以便进一步管理和组织包含的文件。具体步骤如下所示:

  1. 指定需添加到 PDF 文件包中的文件。
  2. 新建 PdfDocument 实例。
  3. 采用 PdfDocument.Collection 新建 PDF 文件包。
  4. 借助 PdfCollection.Folders.CreateSubfolder() 方法在 PDF 文件包中新建文件夹,随后采用 PdfFolder.AddFile() 方法将文件添加到对应文件夹中。
  5. 采用 PdfDocument.SaveToFile() 方法保存生成的文件。

完整示例如下所示:

using System;
using Spire.Pdf;
using Spire.Pdf.Collections;

namespace CreatePDFPortfolio
{
    class Program
    {
        static void Main(string[] args)
        {
            // 指定需要添加的文件
            String[] files = new String[] { "input.pdf", "sample.docx", "report.xlsx", "Intro.pptx", "logo.png" };

            // 创建 PdfDocument 实例
            using (PdfDocument pdf = new PdfDocument())
            {
                // 创建 PDF 文件包并添加文件夹
                for (int i = 0; i < files.Length; i++)
                {
                    PdfFolder folder = pdf.Collection.Folders.CreateSubfolder("Folder" + i);

                    // 将文件添加到文件夹中
                    folder.AddFile(files[i]);
                }

                // 保存生成的文件
                pdf.SaveToFile("PortfolioWithFolders.pdf", FileFormat.PDF);
                pdf.Dispose();
            }
        }
    }
}

知识扩展

在这个场景下,PDF 作品集(PDF Portfolio)是一种特殊的 PDF 文档,它能够将多个不同类型的文件——如 PDF、Word、Excel、图片等——打包到一个 PDF 容器中,同时保留每个文件的原始格式。

以下是几种主流的 C# 实现方案。

方案一:Spire.PDF(建议,API 最简洁)

Spire.PDF 借助 PdfDocument.Collection 属性提供最直观的 API,几行代码即可完成作品集新建。

安装:

Install-Package Spire.PDF

基础用法——添加多个文件:

using Spire.Pdf;
class Program
{
    static void Main()
    {
        // 指定要打包的文件
        string[] files = new string[]
        {
            "document.pdf",
            "report.docx",
            "data.xlsx",
            "presentation.pptx",
            "logo.png"
        };
        using (PdfDocument pdf = new PdfDocument())
        {
            // 创建 PDF 作品集并添加文件
            for (int i = 0; i < files.Length; i++)
            {
                pdf.Collection.AddFile(files[i]);
            }
            // 保存作品集
            pdf.SaveToFile("PortfolioWithFiles.pdf", FileFormat.PDF);
        }
    }
}

进阶用法——在作品集内新建文件夹结构:

using Spire.Pdf;
using Spire.Pdf.Collections;
class Program
{
    static void Main()
    {
        using (PdfDocument pdf = new PdfDocument())
        {
            // 创建作品集
            PdfCollection collection = pdf.Collection;
            // 创建文件夹
            PdfFolder folder1 = collection.Folders.CreateSubfolder("项目文档");
            PdfFolder folder2 = collection.Folders.CreateSubfolder("参考资料");
            // 向根目录添加文件
            collection.AddFile("readme.pdf");
            // 向子文件夹添加文件
            folder1.AddFile("设计文档.docx");
            folder1.AddFile("需求说明.xlsx");
            folder2.AddFile("技术参考.pdf");
            pdf.SaveToFile("PortfolioWithFolders.pdf", FileFormat.PDF);
        }
    }
}

在这个场景下,Spire.PDF 还兼容在新建作品集时添加文件描述、设置文件图标等高级功能。

方案二:Aspose.PDF(企业级方案,功能最全面)

Aspose.PDF 借助 Document.Collection 和 FileSpecification 类实现作品集新建,兼容为每个文件添加描述信息。

安装:

Install-Package Aspose.PDF

示例代码:

using Aspose.Pdf;
class Program
{
    static void Main()
    {
        // 创建文档并启用作品集集合
        Document doc = new Document();
        doc.Collection = new Collection();
        // 准备要添加的文件
        FileSpecification excel = new FileSpecification("data.xlsx");
        excel.Description = "Excel 数据表";
        FileSpecification word = new FileSpecification("report.docx");
        word.Description = "Word 报告文档";
        FileSpecification image = new FileSpecification("logo.png");
        image.Description = "项目 Logo";
        // 添加到作品集
        doc.Collection.Add(excel);
        doc.Collection.Add(word);
        doc.Collection.Add(image);
        // 保存
        doc.Save("Portfolio.pdf");
    }
}

注意:Aspose.PDF 建议采用版本 21 或更高版本,要求 .NET Framework 4.7.2 或 .NET Core/5+/6+。

方案三:GemBox.Pdf(兼容文件夹结构和自定义字段)

实际处理时,GemBox.Pdf 提供更精细的控制,兼容文件夹结构、自定义元数据字段以及设置作品集的初始显示文件。

安装:

Install-Package GemBox.Pdf

许可证说明:免费版有采用限制,生产环境需购买商业许可证。

示例代码:

using GemBox.Pdf;
using GemBox.Pdf.Portfolios;
class Program
{
    static void Main()
    {
        // 免费版需设置许可证密钥
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");
        using (var document = new PdfDocument())
        {
            // 将文档设置为 PDF 作品集
            var portfolio = document.SetPortfolio();
            // 添加文件到作品集根目录
            portfolio.Files.Add("document.pdf");
            portfolio.Files.Add("report.docx");
            // 创建文件夹并添加文件
            var folder = portfolio.Folders.Add("附件");
            folder.Files.Add("image1.png");
            folder.Files.Add("image2.jpg");
            // 设置初始显示文件(第一个PDF文件)
            portfolio.InitialFile = document.EmbeddedFiles
                .FirstOrDefault(f => f.Name.EndsWith(".pdf"));
            // 自定义字段:添加"FullName"字段
            var field = portfolio.Fields.Add(PdfPortfolioFieldDataType.String, "FullName");
            field.Value.Name = "Full Name";
            field.Value.Order = 0;
            document.Save("Portfolio.pdf");
        }
    }
}

方案四:Apryse(原 PDFTron,功能强大的商业库)

实际处理时,Apryse 借助操作 PDF 的底层对象模型来新建作品集,适合需深度控制的高级场景。

安装:

Install-Package PDFNet

示例代码:

using pdftron;
using pdftron.PDF;
class Program
{
    static void AddPackage(PDFDoc doc, string filePath, string desc)
    {
        // 创建嵌入式文件名称树
        NameTree files = NameTree.Create(doc, "EmbeddedFiles");
        // 创建文件规格对象
        FileSpec fs = FileSpec.Create(doc, filePath, true);
        byte[] fileName = System.Text.Encoding.UTF8.GetBytes(filePath);
        // 添加到名称树
        files.Put(fileName, fs.GetSDFObj());
        fs.GetSDFObj().PutText("Desc", desc);
        // 创建或获取 Collection 字典
        Obj collection = doc.GetRoot().FindObj("Collection");
        if (collection == null)
            collection = doc.GetRoot().PutDict("Collection");
        // 设置初始视图模式
        collection.PutName("View", "T");
    }
    static void Main()
    {
        PDFDoc doc = new PDFDoc();
        AddPackage(doc, "document.pdf", "主文档");
        AddPackage(doc, "image.png", "示意图");
        doc.Save("Portfolio.pdf", SDFDocSaveOptions.e_linearized);
    }
}

总结

在这个场景下,PDF 文件包能够将多个不同格式的文件整合到一个 PDF 容器中,同时保留每个文件原有的格式、分辨率和尺寸。借助编程方式新建 PDF 文件包时,能够根据实际需求将文件直接添加到文件包中,也能够新建文件夹对文件进行分类管理,从而提升文档组织和管理效率。

落到代码里,本文主要讲解了如何采用 C# 和 VB.NET 新建 PDF 文件包,同时演示了添加文件和新建文件夹的基本方法。在实际开发和测试过程中,如果需去除生成文档中的评估提示信息,或体验完整功能,能够申请 30 天临时许可证(Temporary License),以便在开发环境中进行更完整的功能测试。

相关资讯

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4