PDF 文件广泛用于在不同平台上共享和查看文档,而 TIFF 文件则是存储高质量图片或照片的首选。将 PDF 文件转换为 TIFF 文件可以保持文件中图像的质量。反之,将 TIFF 图像转换为 PDF 可确保图像易于查看、共享和打印,而不会出现兼容性问题。在本文中,您将学习如何使用 Spire.PDF for .NET 通过 C# 将 PDF 转换为 TIFF,或将 TIFF 转换为 PDF。
安装 Spire.PDF for .NET
首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为.NET项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PDF
C# 将 PDF 转换为 TIFF
TIFF 格式允许在单个文件中存储多个图像。使用 Spire.PDF for .NET,您可以将 PDF 文件的每一页转换为单独的图像,然后调用自定义方法 JoinTiffImages() 将这些图像合并并保存为单个 TIFF 图片。
以下是使用 C# 将 PDF 转换为多页 TIFF 文件的步骤:
- 创建 PdfDocument 类的对象。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文件。
- 调用自定义方法 SaveAsImage() 将 PDF 的每一页转换为单独的图片。
- 调用自定义方法 JoinTiffImages() 将转换后的图片合并为一个多页 TIFF 文件。
- C#
using System;
using System.Drawing;
using System.Drawing.Imaging;
using Spire.Pdf;
namespace SavePdfAsTiff
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载PDF文档
pdf.LoadFromFile("E:\\PythonPDF\\示例.pdf");
//将PDF页面转换为图片
Image[] images = SaveAsImage(pdf);
//合并图片并保存为一个多页的TIFF文件
JoinTiffImages(images, "Pdf转Tiff.tiff", EncoderValue.CompressionLZW);
}
private static Image[] SaveAsImage(PdfDocument document)
{
//创建一个新的图像数组
Image[] images = new Image[document.Pages.Count];
//遍历文档中的所有页面
for (int i = 0; i < document.Pages.Count; i++)
{
//将特定页面转换为图像
images[i] = document.SaveAsImage(i);
}
return images;
}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
//获取图像编码器
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < encoders.Length; j++)
{
//查找符合指定 MIME 类型的编码器
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
throw new Exception(mimeType + "在 ImageCodecInfo 中未发现 mime 类型");
}
public static void JoinTiffImages(Image[] images, string outFile, EncoderValue compressEncoder)
{
//设置编码器参数
Encoder enc = Encoder.SaveFlag;
EncoderParameters ep = new EncoderParameters(2);
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);
ep.Param[1] = new EncoderParameter(Encoder.Compression, (long)compressEncoder);
//获取第一张图片
Image pages = images[0];
//初始化帧
int frame = 0;
//获取用于处理 TIFF 图像编码信息的 ImageCodecInfo 对象
ImageCodecInfo info = GetEncoderInfo("image/tiff");
//遍历每个图像
foreach (Image img in images)
{
//如果是第一帧,则用指定的编码器参数将其保存到输出文件中
if (frame == 0)
{
pages = img;
pages.Save(outFile, info, ep);
}
else
{
//保存中间帧
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
pages.SaveAdd(img, ep);
}
//如果是最后一帧,则清除编码器参数并关闭文件
if (frame == images.Length - 1)
{
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
pages.SaveAdd(ep);
}
frame++;
}
}
}
}
C# 将 TIFF 转换为 PDF
要将多页 TIFF 图像转换为 PDF 文件,需要将 TIFF 图像的每一帧转换为单独的 PDF 图片。然后通过 PdfPageBase.Canvas.DrawImage() 方法在 PDF 页面的指定位置绘制图片。
以下是使用 C# 将 TIFF 图像转换为 PDF 文件的步骤:
- 创建 PdfDocument 类的对象。
- 使用 Image.FromFile() 方法加载 TIFF 图像。
- 调用自定义方法 SplitTiffImage() 将 分割TIFF 图像。
- 遍历分割后的图像,然后将每个图像转换为 PDF 图片。
- 使用 PdfDocument.Pages.Add() 方法在 PDF 文档中添加页面。
- 使用 PdfPageBase.Canvas.DrawImage() 方法在页面指定位置绘制 PDF 图片。
- 使用 PdfDocument.SaveToFile() 方法保存生成的 PDF 文件。
- C#
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using Spire.Pdf;
using Spire.Pdf.Graphics;
namespace TiffToPdf
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
//加载TIFF图片
Image tiffImage = Image.FromFile("Pdf转Tiff.tiff");
//拆分Tiff图片
Image[] images = SplitTiffImage(tiffImage);
//遍历图片
for (int i = 0; i < images.Length; i++)
{
//将指定图片转换为PDF图片
PdfImage pdfImg = PdfImage.FromImage(images[i]);
//获取图片高度和宽度
float width = pdfImg.Width;
float height = pdfImg.Height;
//添加与图片大小相同的页面
SizeF size = new SizeF(width, height);
PdfPageBase page = pdf.Pages.Add(size);
//在页面指定位置绘制图片
page.Canvas.DrawImage(pdfImg, 0, 0, width, height);
}
//保存结果文件
pdf.SaveToFile("Tiff转Pdf.pdf");
}
public static Image[] SplitTiffImage(Image tiffImage)
{
//获取Tiff图像的帧数
int frameCount = tiffImage.GetFrameCount(FrameDimension.Page);
//创建一个图像数组,用于存储拆分的tiff图像
Image[] images = new Image[frameCount];
//获取第一个帧维度的GUID
Guid objGuid = tiffImage.FrameDimensionsList[0];
//创建FrameDimension对象
FrameDimension objDimension = new FrameDimension(objGuid);
//遍历每一帧
for (int i = 0; i < frameCount; i++)
{
//选择指定帧
tiffImage.SelectActiveFrame(objDimension, i);
//以TIFF格式保存到流中
MemoryStream ms = new MemoryStream();
tiffImage.Save(ms, ImageFormat.Tiff);
//从流中加载图像
images[i] = Image.FromStream(ms);
}
return images;
}
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。