
在 .NET 文档处理工作流中,使用 C# 将 TIFF 转换为 PDF 是一项常见需求。开发人员经常需要将扫描文档或多页 TIFF 文件转换为 PDF 格式,以提升兼容性、简化分发流程并实现标准化的文档管理。
TIFF 文件在扫描和归档系统中应用广泛,尤其适合在单个文件中存储多个页面。然而,这种格式在共享或跨平台查看时并非总是理想选择,而 PDF 则可以提供更通用且一致的格式体验。
借助 Spire.PDF for .NET,您可以使用简洁可靠的 C# 代码高效地将 TIFF 图像转换为 PDF。本文将演示如何在 .NET 中执行 TIFF 到 PDF 的转换,包括处理多页 TIFF 图像、调整页面布局以及在实际场景中应用最佳实践。
文章目录:
1. 了解任务背景
TIFF(标记图像文件格式)是一种灵活的图像格式,支持在单个文件中包含多个页面。这一特性使其在以下场景中广受欢迎:
- 扫描文档:多页合同、发票和表单
- 文档归档:在单个文件中保存完整的文档历史
- 医学成像:存储包含多个视图的诊断图像
- 传真传输:传统传真系统通常采用 TIFF 格式
将 TIFF 转换为 PDF 具有以下优势:
- 通用兼容性:所有主流平台均提供 PDF 查看器
- 更小的文件大小:PDF 压缩技术可有效减少存储需求
- 更便捷的分发:PDF 已成为文档分发的标准格式
- 增强的安全性:PDF 支持加密和访问控制功能
2. 使用 Spire.PDF 将 TIFF 转换为 PDF
本节提供使用 Spire.PDF 在 C# 中将 TIFF 图像转换为 PDF 的分步示例。
安装 Spire.PDF for .NET
首先,通过 NuGet 包管理器安装库:
Install-Package FreeSpire.PDF
或使用 .NET CLI:
dotnet add package FreeSpire.PDF
您也可以下载 Spire.PDF for .NET 包并手动将其添加到项目中。
将单页 TIFF 转换为 PDF
对于单页 TIFF 文件,最简单的方法是创建一个与原始图像尺寸匹配的 PDF 页面,并将图像直接绘制到页面上。这样可以确保 TIFF 内容完整填充整个 PDF 页面,避免出现不必要的边距或缩放问题。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// 加载 TIFF 图像
PdfImage tiffImage = PdfImage.FromFile("Sample_Page.tiff");
// 创建新的 PDF 文档
PdfDocument pdf = new PdfDocument();
// 移除默认页面边距
pdf.PageSettings.Margins.All = 0;
// 获取图像尺寸
float width = tiffImage.PhysicalDimension.Width;
float height = tiffImage.PhysicalDimension.Height;
// 添加与 TIFF 图像相同大小的 PDF 页面
PdfPageBase page = pdf.Pages.Add(new SizeF(width, height));
// 绘制图像以完全填充页面
page.Canvas.DrawImage(tiffImage, 0, 0, width, height);
// 保存 PDF 文档
pdf.SaveToFile("Sample_Page.pdf");
pdf.Close();

关键 API 说明:
PdfImage.FromFile:将 TIFF 图像加载为 PDF 兼容对象PageSettings.Margins.All:移除默认边距以实现全页渲染Pages.Add(SizeF):创建与 TIFF 尺寸精确匹配的 PDF 页面Canvas.DrawImage:绘制 TIFF 图像以完全填充页面SaveToFile:保存转换后的 PDF 文件
此方法保留了原始 TIFF 尺寸,确保输出的 PDF 在整个页面上清晰显示图像内容。
有关更多图像到 PDF 的转换场景,请参阅如何在 C# 中将图像转换为 PDF。
将多页 TIFF 转换为 PDF
多页 TIFF 文件包含多个帧,每个帧代表一个独立的页面。在转换过程中,需要遍历每个帧并为当前 TIFF 帧创建尺寸匹配的 PDF 页面,以保留原始布局。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.Drawing.Imaging;
// 加载多页 TIFF 文件
Image tiffImage = Image.FromFile("Sample89.tiff");
// 获取帧信息
FrameDimension dimension = new FrameDimension(tiffImage.FrameDimensionsList[0]);
int frameCount = tiffImage.GetFrameCount(dimension);
// 创建新的 PDF 文档
PdfDocument pdf = new PdfDocument();
// 移除默认边距
pdf.PageSettings.Margins.All = 0;
// 处理每个 TIFF 帧
for (int i = 0; i < frameCount; i++)
{
// 选择当前帧
tiffImage.SelectActiveFrame(dimension, i);
// 将当前帧转换为 PdfImage
PdfImage pdfImage = PdfImage.FromImage(tiffImage);
// 获取当前帧尺寸
float width = pdfImage.PhysicalDimension.Width;
float height = pdfImage.PhysicalDimension.Height;
// 创建与帧大小匹配的 PDF 页面
PdfPageBase page = pdf.Pages.Add(new SizeF(width, height));
// 绘制帧以填充页面
page.Canvas.DrawImage(pdfImage, 0, 0, width, height);
}
// 保存 PDF 文档
pdf.SaveToFile("Sample89.pdf");
pdf.Close();
// 释放资源
tiffImage.Dispose();

核心概念解析:
FrameDimension:标识多页 TIFF 文件中的帧集合GetFrameCount:检索 TIFF 文件的总页数SelectActiveFrame:切换到指定的 TIFF 帧进行处理Pages.Add(SizeF):为每个 TIFF 页面创建尺寸匹配的 PDF 页面Canvas.DrawImage:将每个 TIFF 帧渲染到对应的 PDF 页面上
此方法完整保留了原始 TIFF 文件中的所有页面,同时确保每个页面完全占据 PDF 画布,避免额外的边距或缩放失真。
将 TIFF 图像适配到标准 PDF 页面
在某些工作流中,输出的 PDF 必须遵循标准页面尺寸(如 A4 或 Letter),以便于打印、文档共享或归档。此时,可以按比例缩放图像以适配固定页面尺寸并保持水平居中,而非基于原始 TIFF 尺寸创建 PDF 页面。
using Spire.Pdf;
using Spire.Pdf.Graphics;
PdfDocument pdf = new PdfDocument();
PdfImage image = PdfImage.FromFile("Sample_Page.tiff");
// 创建带边距的 A4 页面
PdfPageBase page = pdf.Pages.Add(PdfPageSize.A4, new PdfMargins(20));
// 计算比例缩放
float scale = Math.Min(
page.Canvas.ClientSize.Width / image.PhysicalDimension.Width,
page.Canvas.ClientSize.Height / image.PhysicalDimension.Height
);
// 计算最终图像尺寸
float width = image.PhysicalDimension.Width * scale;
float height = image.PhysicalDimension.Height * scale;
// 水平居中并对齐顶部
float x = (page.Canvas.ClientSize.Width - width) / 2;
// 将图像绘制到 PDF 页面
page.Canvas.DrawImage(image, x, 0, width, height);
// 保存 PDF 文件
pdf.SaveToFile("Sample_Page_1.pdf");
pdf.Close();
生成的 PDF 将适配标准页面尺寸,同时保持原始图像的纵横比。

采用此方法的优势:
- 标准化输出:确保所有转换后的 PDF 使用一致的页面尺寸(如 A4 或 Letter)
- 更适合打印:避免因大型 TIFF 尺寸导致异常大小的 PDF 页面
- 保持纵横比:按比例缩放图像而不产生失真
- 更清晰的文档格式:使内容正确对齐,适用于业务和归档工作流
当需要让 TIFF 文件适配标准化的 PDF 布局而非保留其原始尺寸时,此方法尤为有效。
您还可以探索更多 C# 操作 PDF 布局和页面设置教程。
3. 高级 TIFF 到 PDF 转换场景
在生产环境中,通常需要对转换过程进行更精细的控制。
批量转换多个 TIFF 文件
在文档管理系统、扫描档案或自动化工作流中,可能需要一次性将多个 TIFF 文件转换为 PDF 格式。以下示例处理文件夹中的所有 TIFF 文件,并将每个文件转换为单独的 PDF,同时保留原始图像尺寸。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;
string inputFolder = @"C:\Documents\TIFF";
string outputFolder = @"C:\Documents\PDF";
// 如果输出文件夹不存在则创建
Directory.CreateDirectory(outputFolder);
// 处理文件夹中的所有 TIFF 文件
foreach (string tiffFile in Directory.GetFiles(inputFolder, "*.tiff"))
{
PdfImage image = PdfImage.FromFile(tiffFile);
using (PdfDocument pdf = new PdfDocument())
{
// 创建与 TIFF 尺寸匹配的 PDF 页面
PdfPageBase page = pdf.Pages.Add(
new SizeF(
image.PhysicalDimension.Width,
image.PhysicalDimension.Height
)
);
// 将 TIFF 图像绘制到页面
page.Canvas.DrawImage(
image,
0,
0,
image.PhysicalDimension.Width,
image.PhysicalDimension.Height
);
// 生成输出文件路径
string outputFile = Path.Combine(
outputFolder,
Path.GetFileNameWithoutExtension(tiffFile) + ".pdf"
);
// 保存 PDF
pdf.SaveToFile(outputFile);
}
}
批量转换的优势:
- 自动处理大量 TIFF 文件
- 减少手动转换的工作量
- 为每个文件保留原始图像尺寸
- 适用于档案迁移和文档自动化工作流
此方法非常适合转换大量单页 TIFF 文件。如果文件夹中包含多页 TIFF 文档,可以将此方法与前面介绍的多页转换逻辑结合使用。
将多个 TIFF 文件合并为一个 PDF
如果需要将多个 TIFF 图像合并为单个 PDF 文档,可以将每个 TIFF 文件添加为单独的 PDF 页面。这在整合扫描文档、发票或基于图像的报表时非常有用。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
string[] tiffFiles =
{
"Page1.tiff",
"Page2.tiff",
"Page3.tiff"
};
PdfDocument pdf = new PdfDocument();
foreach (string file in tiffFiles)
{
PdfImage image = PdfImage.FromFile(file);
float width = image.PhysicalDimension.Width;
float height = image.PhysicalDimension.Height;
// 创建与 TIFF 尺寸匹配的页面
PdfPageBase page = pdf.Pages.Add(new SizeF(width, height));
// 绘制 TIFF 图像
page.Canvas.DrawImage(image, 0, 0, width, height);
}
// 保存合并的 PDF
pdf.SaveToFile("CombinedDocument.pdf");
pdf.Close();
合并 TIFF 文件的好处:
- 将多个扫描页面整合为一个 PDF
- 简化文档共享流程
- 保留原始图像质量
- 适用于合同、发票和归档记录的管理
当每个 TIFF 文件需要作为单独页面出现在单个 PDF 文档中时,此方法效果最佳。
如果您需要将多个转换后的 PDF 文件合并为一个文档,还可以查看如何在 C# 中合并 PDF 文件。
高效处理大型 TIFF 文件
大型多页 TIFF 文件在转换过程中会消耗大量内存。为提高性能,建议按顺序处理每个帧并在使用后立即释放资源。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.Drawing.Imaging;
// 高效处理大型 TIFF 文件
using (Image tiffImage = Image.FromFile("LargeDocument.tiff"))
using (PdfDocument pdf = new PdfDocument())
{
FrameDimension dimension =
new FrameDimension(tiffImage.FrameDimensionsList[0]);
int frameCount = tiffImage.GetFrameCount(dimension);
for (int i = 0; i < frameCount; i++)
{
// 激活当前帧
tiffImage.SelectActiveFrame(dimension, i);
using (PdfImage image = PdfImage.FromImage(tiffImage))
{
float width = image.PhysicalDimension.Width;
float height = image.PhysicalDimension.Height;
// 创建与帧大小匹配的页面
PdfPageBase page = pdf.Pages.Add(
new SizeF(width, height)
);
// 绘制当前帧
page.Canvas.DrawImage(
image,
0,
0,
width,
height
);
}
}
pdf.SaveToFile("LargeDocument.pdf");
}
内存优化技巧:
- 使用
using语句自动释放资源 - 一次仅处理一个 TIFF 帧
- 避免同时加载多个大型图像
- 在转换高分辨率扫描文档时显著提升性能
此方法对于大型归档 TIFF 文件、医学扫描和企业文档迁移任务特别有用。
4. 常见错误及解决方案
在将 TIFF 转换为 PDF 时,开发人员可能会遇到以下常见错误。
多页 TIFF 未完全转换
问题:PDF 输出中仅显示第一页。
原因:未正确迭代 TIFF 文件中的所有帧。
解决方案:使用 GetFrameCount 和 SelectActiveFrame 处理每个帧。
int frameCount = tiffImage.GetFrameCount(dimension);
for (int i = 0; i < frameCount; i++)
{
tiffImage.SelectActiveFrame(dimension, i);
// 处理每个帧
}
图像失真或布局问题
问题:图像出现拉伸或未正确适配 PDF 页面。
原因:将 TIFF 适配到固定尺寸页面(如 A4)时,缩放计算不正确。
解决方案:使用保持纵横比的比例缩放算法。
float scale = Math.Min(
page.Canvas.ClientSize.Width / image.PhysicalDimension.Width,
page.Canvas.ClientSize.Height / image.PhysicalDimension.Height
);
float width = image.PhysicalDimension.Width * scale;
float height = image.PhysicalDimension.Height * scale;
大文件的高内存占用
问题:处理大型 TIFF 文件时性能缓慢或出现内存不足错误。
原因:将多页 TIFF 加载到内存中而未及时释放资源。
解决方案:按顺序处理帧并及时释放资源。
using (Image tiffImage = Image.FromFile("Large.tiff"))
using (PdfDocument pdf = new PdfDocument())
{
// 逐个处理帧
}
不支持的 TIFF 格式
问题:加载某些 TIFF 文件时出现错误。
原因:TIFF 文件使用了非标准压缩或颜色格式。
解决方案:确保 TIFF 文件使用库支持的标准格式。
总结
使用 Spire.PDF for .NET 在 C# 中将 TIFF 转换为 PDF 是一个简洁高效的过程。该库提供了完善的方法来处理单页和多页 TIFF 文件,同时保持图像质量和布局准确性。
通过遵循本文中演示的示例和最佳实践,开发人员可以为各种场景实现可靠的 TIFF 到 PDF 转换,包括文档归档、批量处理和企业文档管理系统。
如果您想评估 Spire.PDF for .NET 的功能,可以申请免费试用许可证。
常见问题解答
如何在 C# 中将多页 TIFF 转换为 PDF?
使用 FrameDimension 访问 TIFF 文件中的每个帧,然后为每个帧创建单独的 PDF 页面。GetFrameCount 方法返回帧的总数,SelectActiveFrame 允许您逐个处理每个帧。
在 .NET 中将 TIFF 转换为 PDF 的最佳方法是什么?
使用专用库(如 Spire.PDF for .NET)提供最可靠和高效的解决方案。它以最少的代码处理图像加载和 PDF 生成,同时全面支持多页 TIFF 文件。
将 TIFF 转换为 PDF 会减小文件大小吗?
与未压缩的 TIFF 文件相比,PDF 压缩通常可以减小文件大小。但实际的大小缩减取决于原始 TIFF 压缩方式、图像内容和 PDF 设置。高分辨率图像仍可能导致较大的 PDF 文件。
我可以在不安装 Microsoft Office 或其他软件的情况下将 TIFF 转换为 PDF 吗?
可以。Spire.PDF for .NET 独立运行,不需要 Microsoft Office、Adobe Acrobat 或任何其他外部软件。它使用自身的渲染引擎执行所有转换操作。
如何在将 TIFF 转换为 PDF 时保持图像质量?
要保留图像质量,应避免不必要的缩放,并将 PDF 页面尺寸与 TIFF 图像尺寸精确匹配以获得最佳效果。







