LEADTOOLS Image File Support (Leadtools.Codecs assembly)
LEAD Technologies, Inc

CodecsRasterPdfInfo Structure

Example 





Members 
Contains information for a raster PDF file created with the LEADTOOLS Raster PDF plug in. .NET support
Object Model
CodecsRasterPdfInfo Structure
Syntax
public struct CodecsRasterPdfInfo : System.ValueType 
'Declaration
 
Public Structure CodecsRasterPdfInfo 
   Inherits System.ValueType
'Usage
 
Dim instance As CodecsRasterPdfInfo
public class CodecsRasterPdfInfo
JAVASCRIPT_NOSTRUCTS
public value class CodecsRasterPdfInfo : public System.ValueType 
Remarks

The various RasterCodecs.GetInformation methods are used to return information about a raster image file on disk or stream. Information such as the format, size, dimension, bits per pixel are returned as members of the CodecsImageInfo object returned from RasterCodecs.GetInformation.

Raster Adobe PDF saved with the various RasterCodecs.Save methods (using any of the RasterImageFormat.RasPdfXyz flavors), contain extra information that can be obtained using RasterCodecs.GetRasterPdfInfo. This method return an instance of CodecsRasterPdfInfo filled with these extra information as follows:

Member Description
IsLeadPdf

true if the source file was created with the LEADTOOLS Raster PDF plug in, false; otherwise. If the value of this property is true, then other members of this structure are guaranteed to contain accurate information. If the value of this property is false and Format is one of the PDF flavors (RasterImageFormat.RasPdfXyz, then the source file is a PDF not created with LEADTOOLS, and the other members of this structure may not be guaranteed to contain accurate information (except for Width, Height, XResolution and YResolution). If this property is true, then calling RasterCodecs.DeletePage is guaranteed to work on this file.

BitsPerPixel

The bits per pixel value of the raster PDF page. This is the same value used as the bitsPerPixel parameter value to the RasterCodecs.Save method used to create this file. You can set the value of CodecsPdfLoadOptions.DisplayDepth to this value to load a PDF page in the original bits per pixel value it was saved at.

Format

The format (compression type) of the raster PDF page, one of RasterImageFormat.RasPdfXyz. This is the same value used as the format parameter value to the RasterCodecs.Save method used to create this file.

Width

The width of the page in pixels. This is the same width of the Leadtools.RasterImage object to the RasterCodecs.Save method used to create this file.

Height

The height of the page in pixels. This is the same height of the Leadtools.RasterImage object to the RasterCodecs.Save method used to create this file.

XResolution

The horizontal resolution of the page in dots per inch. This is the same horizontal resolution of the Leadtools.RasterImage object to the RasterCodecs.Save method used to create this file if CodecsPdfSaveOptions.UseImageResolution was set to true.

YResolution

The vertical resolution of the page in dots per inch. This is the same vertical resolution of the Leadtools.RasterImage object to the RasterCodecs.Save method used to create this file. if CodecsPdfSaveOptions.UseImageResolution was set to true.

Version

The version of the PDF file. This is the same value as CodecsPdfSaveOptions.Version used when saving this file with the RasterCodecs.Save method.

Example
 
Private Shared Sub CodecsRasterPdfInfoExample()
      Dim multiPageRasterPdfFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "MultiPageRasterPdf.pdf")
      Dim pagesPdfFileNames As String = Path.Combine(LEAD_VARS.ImagesDir, "Page{0}.pdf")
      ' Create a 4 pages PDF file
      CreateMultiPageRasterPdfFile(multiPageRasterPdfFileName)

      ' Without prior information, we will split this multi-page PDF file into
      ' multiple single page PDF files with original size, resolution, bit-depth and compression
      Using codecs As New RasterCodecs()
         Dim pagesSaved As Integer = 0

         ' Get the file information
         Using imageInfo As CodecsImageInfo = codecs.GetInformation(multiPageRasterPdfFileName, True)
            Console.WriteLine( _
               "Information: Format:\n Format: {0}\n Pages: {1}\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}", _
               imageInfo.Format, imageInfo.TotalPages, imageInfo.BitsPerPixel, imageInfo.Width, imageInfo.Height, imageInfo.XResolution, imageInfo.YResolution)
            Console.WriteLine("-----------------------")

            ' Now show the PDF specific information
            ' Notice: GetInformation will return RasPdf as the format for all PDF files
            ' regardless of the actual compression
            If imageInfo.Format = RasterImageFormat.RasPdf Then
               Console.WriteLine("Image is PDF, getting the specific info for each page")

               For i As Integer = 0 To imageInfo.TotalPages - 1
                  Dim pageNumber As Integer = i + 1

                  Dim pdfInfo As CodecsRasterPdfInfo = codecs.GetRasterPdfInfo(multiPageRasterPdfFileName, i + 1)
                  If pageNumber = 1 Then
                     Console.WriteLine(" LEAD PDF?: {0}", pdfInfo.IsLeadPdf)
                     Console.WriteLine(" Version: {0}", pdfInfo.Version)
                  End If

                  If pdfInfo.IsLeadPdf Then
                     Console.WriteLine( _
                        "Page {0} of {1} info:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}\n Format: {7}", _
                        pageNumber, imageInfo.TotalPages, pdfInfo.BitsPerPixel, pdfInfo.Width, pdfInfo.Height, pdfInfo.XResolution, pdfInfo.YResolution, pdfInfo.Format)
                     Console.WriteLine("-----------------------")

                     ' Load this page with its original parameters
                     codecs.Options.RasterizeDocument.Load.XResolution = pdfInfo.XResolution
                     codecs.Options.RasterizeDocument.Load.YResolution = pdfInfo.YResolution
                     codecs.Options.Pdf.Load.DisplayDepth = pdfInfo.BitsPerPixel

                     Using pageImage As RasterImage = codecs.Load(multiPageRasterPdfFileName, 0, CodecsLoadByteOrder.BgrOrGray, pageNumber, pageNumber)
                        Console.WriteLine( _
                           "Page {0} of {1} loaded:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}", _
                           pageNumber, imageInfo.TotalPages, pageImage.BitsPerPixel, pageImage.Width, pageImage.Height, pageImage.XResolution, pageImage.YResolution)
                        Console.WriteLine("-----------------------")

                        ' Setup the PDF save options
                        codecs.Options.Pdf.Save.UseImageResolution = True
                        codecs.Options.Pdf.Save.Version = pdfInfo.Version

                        ' Save this page to a separate file
                        Dim pagePdfFileName As String = String.Format(pagesPdfFileNames, pageNumber)
                        codecs.Save(pageImage, pagePdfFileName, pdfInfo.Format, pdfInfo.BitsPerPixel)
                        pagesSaved = pagesSaved + 1
                     End Using
                  End If
               Next
            End If
         End Using

         ' We are done, now show the info of the generated files
         For i As Integer = 0 To pagesSaved - 1
            Dim pageNumber As Integer = i + 1
            Dim pagePdfFileName As String = String.Format(pagesPdfFileNames, pageNumber)

            Dim pdfInfo As CodecsRasterPdfInfo = codecs.GetRasterPdfInfo(pagePdfFileName, 1)
            Console.WriteLine( _
               "Page {0} of {1} info:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}\n Format: {7}", _
               pageNumber, pagesSaved, pdfInfo.BitsPerPixel, pdfInfo.Width, pdfInfo.Height, pdfInfo.XResolution, pdfInfo.YResolution, pdfInfo.Format)
            Console.WriteLine("-----------------------")
         Next
      End Using
   End Sub

   Private Shared Sub CreateMultiPageRasterPdfFile(ByVal pdfFileName As String)
      Dim sourceFile As String = Path.Combine(LEAD_VARS.ImagesDir, "Sample1.cmp")

      ' Delete the destination PDF file if exists
      If System.IO.File.Exists(pdfFileName) Then
         System.IO.File.Delete(pdfFileName)
      End If

      Using codecs As New RasterCodecs()
         ' Save to PDF v1.4
         codecs.Options.Pdf.Save.Version = CodecsRasterPdfVersion.V14
         ' Save using image resolution
         codecs.Options.Pdf.Save.UseImageResolution = True

         ' Load the source file to use for each page
         Using pageImage As RasterImage = codecs.Load(sourceFile, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1)
            Console.WriteLine( _
               "Original image dimension:\n Size: {0} by {1}\n Resolution: {2} by {3}", _
               pageImage.Width, pageImage.Height, pageImage.XResolution, pageImage.YResolution)

            ' Array of bits/pixel and compression to use when saving the pages
            Dim bitsPerPixel() As Integer = _
            { _
               1, _
               8, _
               24 _
            }
            Dim formats() As RasterImageFormat = _
            { _
               RasterImageFormat.RasPdfG4, _
               RasterImageFormat.RasPdfLzw, _
               RasterImageFormat.RasPdfJpeg422 _
            }

            Dim pageCount As Integer = bitsPerPixel.Length
            For i As Integer = 0 To pageCount - 1
               ' Append this page with given format
               Console.WriteLine("Saving page {0} of {1} using {2} at {3}", i + 1, pageCount, bitsPerPixel(i), formats(i))
               codecs.Save(pageImage, pdfFileName, formats(i), bitsPerPixel(i), 1, 1, -1, CodecsSavePageMode.Append)
            Next
         End Using

         Console.WriteLine("-----------------------")
      End Using
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
private static void CodecsRasterPdfInfoExample()
     {
         string multiPageRasterPdfFileName = Path.Combine(LEAD_VARS.ImagesDir, "MultiPageRasterPdf.pdf");
         string pagesPdfFileNames = Path.Combine(LEAD_VARS.ImagesDir, "Page{0}.pdf");
         // Create a 4 pages PDF file
         CreateMultiPageRasterPdfFile(multiPageRasterPdfFileName);

         // Without prior information, we will split this multi-page PDF file into
         // multiple single page PDF files with original size, resolution, bit-depth and compression
         using (RasterCodecs codecs = new RasterCodecs())
         {
             int pagesSaved = 0;

             // Get the file information
             using (CodecsImageInfo imageInfo = codecs.GetInformation(multiPageRasterPdfFileName, true))
             {
                 Console.WriteLine(
                    "Information: Format:\n Format: {0}\n Pages: {1}\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}",
                    imageInfo.Format, imageInfo.TotalPages, imageInfo.BitsPerPixel, imageInfo.Width, imageInfo.Height, imageInfo.XResolution, imageInfo.YResolution);
                 Console.WriteLine("-----------------------");

                 // Now show the PDF specific information
                 // Notice: GetInformation will return RasPdf as the format for all PDF files
                 // regardless of the actual compression
                 if (imageInfo.Format == RasterImageFormat.RasPdf)
                 {
                     Console.WriteLine("Image is PDF, getting the specific info for each page");

                     for (int i = 0; i < imageInfo.TotalPages; i++)
                     {
                         int pageNumber = i + 1;

                         CodecsRasterPdfInfo pdfInfo = codecs.GetRasterPdfInfo(multiPageRasterPdfFileName, i + 1);
                         if (pageNumber == 1)
                         {
                             Console.WriteLine(" LEAD PDF?: {0}", pdfInfo.IsLeadPdf);
                             Console.WriteLine(" Version: {0}", pdfInfo.Version);
                         }

                         if (pdfInfo.IsLeadPdf)
                         {
                             Console.WriteLine(
                                "Page {0} of {1} info:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}\n Format: {7}",
                                pageNumber, imageInfo.TotalPages, pdfInfo.BitsPerPixel, pdfInfo.Width, pdfInfo.Height, pdfInfo.XResolution, pdfInfo.YResolution, pdfInfo.Format);
                             Console.WriteLine("-----------------------");

                             // Load this page with its original parameters
                             codecs.Options.RasterizeDocument.Load.XResolution = pdfInfo.XResolution;
                             codecs.Options.RasterizeDocument.Load.YResolution = pdfInfo.YResolution;
                             codecs.Options.Pdf.Load.DisplayDepth = pdfInfo.BitsPerPixel;

                             using (RasterImage pageImage = codecs.Load(multiPageRasterPdfFileName, 0, CodecsLoadByteOrder.BgrOrGray, pageNumber, pageNumber))
                             {
                                 Console.WriteLine(
                                    "Page {0} of {1} loaded:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}",
                                    pageNumber, imageInfo.TotalPages, pageImage.BitsPerPixel, pageImage.Width, pageImage.Height, pageImage.XResolution, pageImage.YResolution);
                                 Console.WriteLine("-----------------------");

                                 // Setup the PDF save options
                                 codecs.Options.Pdf.Save.UseImageResolution = true;
                                 codecs.Options.Pdf.Save.Version = pdfInfo.Version;

                                 // Save this page to a separate file
                                 string pagePdfFileName = string.Format(pagesPdfFileNames, pageNumber);
                                 codecs.Save(pageImage, pagePdfFileName, pdfInfo.Format, pdfInfo.BitsPerPixel);
                                 pagesSaved++;
                             }
                         }
                     }
                 }
             }

             // We are done, now show the info of the generated files
             for (int i = 0; i < pagesSaved; i++)
             {
                 int pageNumber = i + 1;
                 string pagePdfFileName = string.Format(pagesPdfFileNames, pageNumber);

                 CodecsRasterPdfInfo pdfInfo = codecs.GetRasterPdfInfo(pagePdfFileName, 1);
                 Console.WriteLine(
                    "Page {0} of {1} info:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}\n Format: {7}",
                    pageNumber, pagesSaved, pdfInfo.BitsPerPixel, pdfInfo.Width, pdfInfo.Height, pdfInfo.XResolution, pdfInfo.YResolution, pdfInfo.Format);
                 Console.WriteLine("-----------------------");
             }
         }
     }

     private static void CreateMultiPageRasterPdfFile(string pdfFileName)
     {
         string sourceFile = Path.Combine(LEAD_VARS.ImagesDir, "Sample1.cmp");

         // Delete the destination PDF file if exists
         if (System.IO.File.Exists(pdfFileName))
         {
             System.IO.File.Delete(pdfFileName);
         }

         using (RasterCodecs codecs = new RasterCodecs())
         {
             // Save to PDF v1.4
             codecs.Options.Pdf.Save.Version = CodecsRasterPdfVersion.V14;
             // Save using image resolution
             codecs.Options.Pdf.Save.UseImageResolution = true;

             // Load the source file to use for each page
             using (RasterImage pageImage = codecs.Load(sourceFile, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1))
             {
                 Console.WriteLine(
                    "Original image dimension:\n Size: {0} by {1}\n Resolution: {2} by {3}",
                    pageImage.Width, pageImage.Height, pageImage.XResolution, pageImage.YResolution);

                 // Array of bits/pixel and compression to use when saving the pages
                 int[] bitsPerPixel =
            {
               1,
               8,
               24
            };
                 RasterImageFormat[] formats =
            {
               RasterImageFormat.RasPdfG4,
               RasterImageFormat.RasPdfLzw,
               RasterImageFormat.RasPdfJpeg422
            };

                 int pageCount = bitsPerPixel.Length;
                 for (int i = 0; i < pageCount; i++)
                 {
                     // Append this page with given format
                     Console.WriteLine("Saving page {0} of {1} using {2} at {3}", i + 1, pageCount, bitsPerPixel[i], formats[i]);
                     codecs.Save(pageImage, pdfFileName, formats[i], bitsPerPixel[i], 1, 1, -1, CodecsSavePageMode.Append);
                 }
             }

             Console.WriteLine("-----------------------");
         }
     }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
[TestMethod]
public async Task CodecsRasterPdfInfoExample()
{
   string multiPageRasterPdfFileName = @"MultiPageRasterPdf.pdf";
   string pagesPdfFileNames = "Page{0}.pdf";
   try
   {
      // Create a 4 pages PDF file
      await CreateMultiPageRasterPdfFile(multiPageRasterPdfFileName);

      // Without prior information, we will split this multi-page PDF file into
      // multiple single page PDF files with original size, resolution, bit-depth and compression
      using (RasterCodecs codecs = new RasterCodecs())
      {
         int pagesSaved = 0;

         // Get the file information
         StorageFile loadFile = await Tools.AppLocalFolder.GetFileAsync(multiPageRasterPdfFileName);
         using (CodecsImageInfo imageInfo = await codecs.GetInformationAsync(LeadStreamFactory.Create(loadFile), true, 1))
         {
            Debug.WriteLine(
               "Information: Format:\n Format: {0}\n Pages: {1}\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}",
               imageInfo.Format, imageInfo.TotalPages, imageInfo.BitsPerPixel, imageInfo.Width, imageInfo.Height, imageInfo.XResolution, imageInfo.YResolution);
            Debug.WriteLine("-----------------------");

            // Now show the PDF specific information
            // Notice: GetInformation will return RasPdf as the format for all PDF files
            // regardless of the actual compression
            if (imageInfo.Format == RasterImageFormat.RasPdf)
            {
               Debug.WriteLine("Image is PDF, getting the specific info for each page");

               for (int i = 0; i < imageInfo.TotalPages; i++)
               {
                  int pageNumber = i + 1;

                  CodecsRasterPdfInfo pdfInfo = await codecs.GetRasterPdfInfoAsync(LeadStreamFactory.Create(loadFile), i + 1);
                  if (pageNumber == 1)
                  {
                     Debug.WriteLine(" LEAD PDF?: {0}", pdfInfo.IsLeadPdf);
                     Debug.WriteLine(" Version: {0}", pdfInfo.Version);
                  }

                  if (pdfInfo.IsLeadPdf)
                  {
                     Debug.WriteLine(
                        "Page {0} of {1} info:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}\n Format: {7}",
                        pageNumber, imageInfo.TotalPages, pdfInfo.BitsPerPixel, pdfInfo.Width, pdfInfo.Height, pdfInfo.XResolution, pdfInfo.YResolution, pdfInfo.Format);
                     Debug.WriteLine("-----------------------");

                     // Load this page with its original parameters
                     codecs.Options.RasterizeDocument.Load.XResolution = pdfInfo.XResolution;
                     codecs.Options.RasterizeDocument.Load.YResolution = pdfInfo.YResolution;
                     codecs.Options.Pdf.Load.DisplayDepth = pdfInfo.BitsPerPixel;

                     using (RasterImage pageImage = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile), 0, CodecsLoadByteOrder.BgrOrGray, pageNumber, pageNumber))
                     {
                        Debug.WriteLine(
                           "Page {0} of {1} loaded:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}",
                           pageNumber, imageInfo.TotalPages, pageImage.BitsPerPixel, pageImage.Width, pageImage.Height, pageImage.XResolution, pageImage.YResolution);
                        Debug.WriteLine("-----------------------");

                        // Setup the PDF save options
                        codecs.Options.Pdf.Save.UseImageResolution = true;
                        codecs.Options.Pdf.Save.Version = pdfInfo.Version;

                        // Save this page to a separate file
                        string pagePdfFileName = string.Format(pagesPdfFileNames, pageNumber);
                        StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(pagePdfFileName);
                        await codecs.SaveAsync(pageImage, LeadStreamFactory.Create(saveFile), pdfInfo.Format, pdfInfo.BitsPerPixel);
                        pagesSaved++;
                     }
                  }
               }
            }
         }

         // We are done, now show the info of the generated files
         for (int i = 0; i < pagesSaved; i++)
         {
            int pageNumber = i + 1;
            string pagePdfFileName = string.Format(pagesPdfFileNames, pageNumber);

            StorageFile saveFile = await Tools.AppLocalFolder.GetFileAsync(pagePdfFileName);
            CodecsRasterPdfInfo pdfInfo = await codecs.GetRasterPdfInfoAsync(LeadStreamFactory.Create(saveFile), 1);
            Debug.WriteLine(
               "Page {0} of {1} info:\n Bits/Pixel: {2}\n Size: {3} by {4}\n Resolution: {5} by {6}\n Format: {7}",
               pageNumber, pagesSaved, pdfInfo.BitsPerPixel, pdfInfo.Width, pdfInfo.Height, pdfInfo.XResolution, pdfInfo.YResolution, pdfInfo.Format);
            Debug.WriteLine("-----------------------");
         }
      }
   }
   catch (Exception ex)
   {
      string error="";
      RasterException rasterException = RasterException.FromHResult(ex.HResult);
      if (rasterException != null)
         error = rasterException.Message;
      else
         error = ex.Message;
      Debug.WriteLine(error);
      Assert.Fail(error);
   }
}

public async Task CreateMultiPageRasterPdfFile(string pdfFileName)
{
   string sourceFile = @"Assets\Image1.cmp";

   using (RasterCodecs codecs = new RasterCodecs())
   {
      // Save to PDF v1.4
      codecs.Options.Pdf.Save.Version = CodecsRasterPdfVersion.V14;
      // Save using image resolution
      codecs.Options.Pdf.Save.UseImageResolution = true;

      // Load the source file to use for each page
      StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(sourceFile);
      using (RasterImage pageImage = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile), 0, CodecsLoadByteOrder.BgrOrGray, 1, 1))
      {
         Debug.WriteLine(
            "Original image dimension:\n Size: {0} by {1}\n Resolution: {2} by {3}",
            pageImage.Width, pageImage.Height, pageImage.XResolution, pageImage.YResolution);

         // Array of bits/pixel and compression to use when saving the pages
         int[] bitsPerPixel =
           {
              1,
              8,
              24
           };
         RasterImageFormat[] formats =
           {
              RasterImageFormat.RasPdfG4,
              RasterImageFormat.RasPdfLzw,
              RasterImageFormat.RasPdfJpeg422
           };

         int pageCount = bitsPerPixel.Length;
         StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(pdfFileName);
         ILeadStream stream = LeadStreamFactory.Create(saveFile);
         for (int i = 0; i < pageCount; i++)
         {
            // Append this page with given format
            Debug.WriteLine("Saving page {0} of {1} using {2} at {3}", i + 1, pageCount, bitsPerPixel[i], formats[i]);
            await codecs.SaveAsync(pageImage, stream, formats[i], bitsPerPixel[i], 1, 1, -1, CodecsSavePageMode.Append);
         }
      }

      Debug.WriteLine("-----------------------");
   }
}
Requirements

Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also

Reference

CodecsRasterPdfInfo Members
Leadtools.Codecs Namespace
Implementing PDF Plug in Features

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2012 All Rights Reserved. LEAD Technologies, Inc.