在日常开发中,经常需要将多张图片(如 JPG、PNG、BMP 等)合并为一个 PDF 文档,方便存储和分享。本文将介绍如何使用 C# 结合 Spire.PDF for .NET 库实现这一功能,该库提供了简洁的 API,无需依赖 Adobe Acrobat 即可快速操作 PDF。
一、准备工作
Spire.PDF for .NET是一个专业的PDF处理类库,支持创建、编辑、转换PDF文档,同时提供了丰富的图片处理能力,可轻松将图片插入PDF页面。
安装步骤如下:
推荐通过 NuGet 包管理器安装:
- 在 Visual Studio 中右键点击项目,选择"管理 NuGet 包"
- 搜索"Spire.PDF"并安装
- 安装完成后,引用命名空间:
using Spire.Pdf;
和using Spire.Pdf.Graphics;
二、核心实现步骤
功能需求
将指定文件夹中的所有图片(支持JPG、PNG、BMP等格式)按顺序合并为一个PDF,每张图片占一页,且页面大小自适应图片尺寸。
完整代码示例
csharp
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace ConvertMultipleImagesIntoPdf
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
// 将页边距设置为0
pdf.PageSettings.SetMargins(0);
// 获取图片存放的文件夹
DirectoryInfo folder = new DirectoryInfo(@"C:\Users\Administrator\Desktop\Images");
// 遍历图片
foreach (FileInfo file in folder.GetFiles())
{
Image image = Image.FromFile(file.FullName);
// 获取图片尺寸
float width = image.PhysicalDimension.Width;
float height = image.PhysicalDimension.Height;
// 添加与图片大小相同的PDF页面
PdfPageBase page = pdf.Pages.Add(new SizeF(width, height));
// 将图片绘制到页面
PdfImage pdfImage = PdfImage.FromImage(image);
page.Canvas.DrawImage(pdfImage, 0, 0, pdfImage.Width, pdfImage.Height);
}
// 保存PDF文档
pdf.SaveToFile("CombinaImagesToPdf.pdf");
pdf.Dispose();
}
}
}
代码解析
- 参数配置:指定图片文件夹路径,可根据实际需求修改。
- PDF页面创建:创建一个与图片尺寸完全相同的 PDF 页面(确保页面大小适配图片,无拉伸或裁剪)
- 图片绘制 :
page.Canvas.DrawImage()
从页面左上角 (0,0) 开始绘制图片,尺寸与图片原始尺寸一致,最终效果是图片完全覆盖页面。 - 释放资源 :
Dispose()
手动释放 PdfDocument 对象占用的资源。
三、扩展技巧
1. 固定PDF页面大小
如果需要所有页面使用固定尺寸(如A4),可修改页面创建逻辑:
csharp
// 创建A4尺寸页面(210mm×297mm)
PdfPageBase page = pdf.Pages.Add(PdfPageSize.A4);
2. 图片缩放适应页面
若图片尺寸超过页面,可自动缩放:
csharp
// 计算缩放比例(确保图片完全显示在页面内)
float scaleX = page.Canvas.ClientSize.Width / pdfImage.Width;
float scaleY = page.Canvas.ClientSize.Height / pdfImage.Height;
float scale = Math.Min(scaleX, scaleY);
// 按比例缩放绘制
page.Canvas.DrawImage(pdfImage, x, y, pdfImage.Width * scale, pdfImage.Height * scale);
结语:通过 Spire.PDF for .NET 库,使用简单代码即可实现图片转 PDF 的功能,相比传统方案(System.Drawing + GDI+)更简洁易用。该方法适用于批量处理图片、生成电子相册、归档扫描件等场景,可根据实际需求扩展更多功能(如添加页码、水印等)。