使用 Spire.XLS 实现 Excel 转 PDF 的完整指南

一、Spire.XLS 简介与优势

Spire.XLS 是一款专业的 .NET 库,无需安装 Microsoft Office,即可在应用程序中创建、读取、编辑和转换 Excel 文档。其核心优势在于:

  • 高度保真转换:精确保留 Excel 的布局、字体、颜色、图表、图片和公式。
  • 无环境依赖:独立运行,避免了服务器环境中安装 Office 的安全风险与授权问题。
  • 高性能与批量处理:支持大文件处理和批量转换,提升工作效率。
  • 丰富的 API:提供细粒度的控制,自定义页面设置、水印、安全选项等。

二、环境准备与安装

首先,通过 NuGet 包管理器安装 Spire.XLS:

Install-Package Spire.XLS

或使用 .NET CLI:

dotnet add package Spire.XLS

安装后,即可在项目中引用相关命名空间。

三、基础转换:Excel 转 PDF 代码示例

以下是一个简单的 C# 示例,将 Excel 文件转换为 PDF:

using Spire.Xls;
using System.IO;

namespace ExcelToPdfDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Workbook 对象
            Workbook workbook = new Workbook();
            
            // 加载 Excel 文件
            workbook.LoadFromFile(@"C:\Input\sample.xlsx");
            
            // 设置转换选项
            ToPdfParameterMap pdfParam = new ToPdfParameterMap();
            
            // 可选:设置 PDF 兼容性、嵌入字体等
            // pdfParam.PdfConformanceLevel = PdfConformanceLevel.Pdf_A1B;
            
            // 保存为 PDF 文件
            workbook.SaveToFile(@"C:\Output\sample.pdf", pdfParam);
            
            // 释放资源
            workbook.Dispose();
        }
    }
}

四、高级定制与格式保留技巧

1. 精确控制页面设置

使用 ToPdfParameterMap 类自定义 PDF 输出:

// 设置页面大小、方向、页边距
Worksheet sheet = workbook.Worksheets[0];
sheet.PageSetup.PaperSize = PaperSize.PaperA4;
sheet.PageSetup.Orientation = PageOrientationType.Landscape;
sheet.PageSetup.LeftMargin = 0.5;

// 设置缩放选项以适应页面
sheet.PageSetup.FitToPage = true;
sheet.PageSetup.FitToWidth = 1;
sheet.PageSetup.FitToHeight = 0;

2. 处理图表与图片

Spire.XLS 会自动将 Excel 图表转换为 PDF 矢量图形,确保清晰度。对于图片,建议在转换前设置适当的 DPI:

pdfParam.ImageDpi = 150; // 提高图片质量

3. 添加水印或页眉页脚

可以预先在 Excel 模板中设计好水印,或在转换后通过代码添加。

五、批量转换与错误处理

遍历文件夹进行批量转换,并添加异常处理:

try
{
    string[] excelFiles = Directory.GetFiles(@"C:\Input", "*.xlsx");
    foreach (string file in excelFiles)
    {
        Workbook wb = new Workbook();
        wb.LoadFromFile(file);
        
        string pdfPath = Path.Combine(@"C:\Output", Path.GetFileNameWithoutExtension(file) + ".pdf");
        wb.SaveToFile(pdfPath, FileFormat.PDF);
        wb.Dispose();
    }
}
catch (Exception ex)
{
    Console.WriteLine($"转换错误:{ex.Message}");
}

六、常见问题与解决方案

  • 中文乱码:确保服务器安装了中文字体,或通过 workbook.WorkFonts.DuplicateFont() 嵌入字体。
  • 内存溢出:对于超大文件,分批次加载工作表进行转换。
  • 公式计算:确保在加载工作簿后调用 workbook.CalculateAllValue() 更新计算结果。

七、总结

通过 Spire.XLS,开发者可以轻松实现 Excel 到 PDF 的高质量转换,无需依赖 Office 环境。无论是简单的单文件转换,还是复杂的批量处理需求,其丰富的 API 和稳定的性能都能提供可靠支持。建议结合官方文档,探索更多高级功能,如加密 PDF、设置数字签名等,以满足企业级应用需求。