PDF files are widely used for sharing and viewing documents across different platforms, while TIFF files are preferred for storing high-quality images with detailed graphics or photographs. Converting a PDF file to TIFF can maintain the quality of images within the file. Similarly, converting a TIFF image to PDF ensures that the image can be easily viewed, shared, and printed without compatibility issues. In this article, you will learn how to programmatically convert PDF to TIFF or TIFF to PDF in C# using Spire.PDF for .NET.
Install Spire.PDF for .NET
To begin with, you need to add the DLL files included in the Spire.PDF for.NET package as references in your .NET project. The DLL files can be either downloaded from this link or installed via NuGet.
PM> Install-Package Spire.PDF
Convert PDF to TIFF in C#
The TIFF format allows multiple images to be stored in a single file. With Spire.PDF for .NET, you can convert each page of a PDF file into a separate image, and then call the custom method JoinTiffImages() to combine these images and save them as a single TIFF image.
The following are the steps to convert a PDF into a multi-page TIFF file using C#.
- Create a PdfDocument object.
- Load a PDF file using PdfDocument.LoadFromFile() method.
- Call custom method SaveAsImage() to convert each page of the PDF to a separate image.
- Call custom method JoinTiffImages() to merge the converted images into a multi-page TIFF image.
- C#
using System; using System.Drawing; using System.Drawing.Imaging; using Spire.Pdf; namespace SavePdfAsTiff { class Program { static void Main(string[] args) { //Create a PdfDocument object PdfDocument pdf = new PdfDocument(); //Load a PDF document pdf.LoadFromFile("Report.pdf"); //Convert PDF pages to images Image[] images = SaveAsImage(pdf); //Combine the images and save them as a multi-page TIFF file JoinTiffImages(images, "result.tiff", EncoderValue.CompressionLZW); } private static Image[] SaveAsImage(PdfDocument document) { //Create a new image array Image[] images = new Image[document.Pages.Count]; //Iterate through all pages in the document for (int i = 0; i < document.Pages.Count; i++) { //Convert a specific page to an image images[i] = document.SaveAsImage(i); } return images; } private static ImageCodecInfo GetEncoderInfo(string mimeType) { //Get the image encoders ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders(); for (int j = 0; j < encoders.Length; j++) { //Find the encoder that matches the specified MIME type if (encoders[j].MimeType == mimeType) return encoders[j]; } throw new Exception(mimeType + " mime type not found in ImageCodecInfo"); } public static void JoinTiffImages(Image[] images, string outFile, EncoderValue compressEncoder) { //Set the encoder parameters 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); //Get the first image Image pages = images[0]; //Initialize a frame int frame = 0; //Get an ImageCodecInfo object for processing TIFF image codec information ImageCodecInfo info = GetEncoderInfo("image/tiff"); //Iterate through each Image foreach (Image img in images) { //If it's the first frame, save it to the output file with specified encoder parameters if (frame == 0) { pages = img; pages.Save(outFile, info, ep); } else { //Save the intermediate frames ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage); pages.SaveAdd(img, ep); } //If it's the last frame, flush the encoder parameters and close the file if (frame == images.Length - 1) { ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush); pages.SaveAdd(ep); } frame++; } } } }
Convert TIFF to PDF in C#
To convert a multi-page TIFF image to a PDF file, you need to convert each frame of the TIFF image to a separate PDF image. Then draw each image at a specified location on a PDF page through the PdfPageBase.Canvas.DrawImage() method.
The following are the steps to convert a TIFF image to a PDF file using C#.
- Create a PdfDocument object.
- Load a TIFF image using Image.FromFile() method.
- Call custom method SplitTiffImage() to split the TIFF image into separate images.
- Iterate through the split images, and then convert each into a PDF image.
- Add a page to the PDF document using PdfDocument.Pages.Add() method.
- Draw the PDF image at a specified location on the page using PdfPageBase.Canvas.DrawImage() method.
- Save the result PDF file using PdfDocument.SaveToFile() method.
- 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) { //Create a PdfDocument object PdfDocument pdf = new PdfDocument(); //Load a TIFF image Image tiffImage = Image.FromFile("result.tiff"); //Split the Tiff image into separate images Image[] images = SplitTiffImage(tiffImage); //Iterate through the images for (int i = 0; i < images.Length; i++) { //Convert a specified image into a PDF image PdfImage pdfImg = PdfImage.FromImage(images[i]); //Get image width and height float width = pdfImg.Width; float height = pdfImg.Height; //Add a page with the same size as the image SizeF size = new SizeF(width, height); PdfPageBase page = pdf.Pages.Add(size); //Draw the image at a specified location on the page page.Canvas.DrawImage(pdfImg, 0, 0, width, height); } //Save the result file pdf.SaveToFile("TiffToPdf.pdf"); } public static Image[] SplitTiffImage(Image tiffImage) { //Get the number of frames in the Tiff image int frameCount = tiffImage.GetFrameCount(FrameDimension.Page); //Create an image array to store the split tiff images Image[] images = new Image[frameCount]; //Gets the GUID of the first frame dimension Guid objGuid = tiffImage.FrameDimensionsList[0]; //Create a FrameDimension object FrameDimension objDimension = new FrameDimension(objGuid); //Iterate through each frame for (int i = 0; i < frameCount; i++) { //Select a specified frame tiffImage.SelectActiveFrame(objDimension, i); //Save the frame in TIFF format to a memory stream MemoryStream ms = new MemoryStream(); tiffImage.Save(ms, ImageFormat.Tiff); //Load an image from memory stream images[i] = Image.FromStream(ms); } return images; } } }
Apply for a Temporary License
If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.