Hello, we added support for this recently with CodecsRasterPdfInfo and RasterCodecs.GetRasterPdfInfo.
Make sure you have the latest version of Leadtools.Codecs.dll: At least 16.5.5.22 or 17.0.0.9.
This example code is straight out of the documentation. It creates a multi-page PDF with several bits/pixel and compression value, then uses the above methods/classes to split the PDF into multiple single page files with original bits/pixel, resolution, size and compression.
private static void CodecsRasterPdfInfoExample()
{
string multiPageRasterPdfFileName = @"C:\Users\Public\Documents\LEADTOOLS Images\MultiPageRasterPdf.pdf";
string pagesPdfFileNames = @"C:\Users\Public\Documents\LEADTOOLS Images\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())
{
// Enable using our own resolution when loading PDF files
codecs.Options.RasterizeDocument.Load.Enabled = true;
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 = @"C:\Users\Public\Documents\LEADTOOLS Images\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("-----------------------");
}
}