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.PDFC# 将 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 天的临时许可证。
 



 
					



