|
|
Yes. Please look at following code Code:
void Main(string[] args)
{
PdfCommon.Initialize();
Image tiff = null;
using (var doc = PdfDocument.Load(@"d:\0\test_big.pdf"))
{
int dpi = 96;
int i = 1;
foreach (var page in doc.Pages)
{
int width = (int)(page.Width / 72.0 * dpi);
int height = (int)(page.Height / 72.0 * dpi);
using (var bitmap = new PdfBitmap(width, height, true))
{
bitmap.FillRect(0, 0, width, height, Color.White);
page.Render(bitmap, 0, 0, width, height, PageRotate.Normal, RenderFlags.FPDF_LCD_TEXT);
if (tiff == null)
tiff = CreateTiffFromBitmap(bitmap.Image, @"d:\0\test_big.tif");
else
AddFrameToTiff(tiff, bitmap.Image);
}
page.Dispose();
Console.WriteLine(string.Format("Process page {0}", i++));
}
if (tiff != null)
FlushTiff(tiff);
}
}
public Image CreateTiffFromBitmap(Image bitmap, string pathToTiff)
{
//Start with the first bitmap by save the bitmap to memory as tiff
using (MemoryStream byteStream = new MemoryStream())
{
bitmap.Save(byteStream, ImageFormat.Tiff);
//Put Tiff into another Image object
Image tiff = Image.FromStream(byteStream);
//Prepare encoders:
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
EncoderParameters encoderParams = new EncoderParameters(2);
EncoderParameter parameter = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionLZW);
encoderParams.Param[0] = parameter;
parameter = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
encoderParams.Param[1] = parameter;
var ret = new MemoryStream();
//Save to file
tiff.Save(pathToTiff, encoderInfo, encoderParams);
return tiff;
}
}
public void AddFrameToTiff(Image tiff, Image bitmap)
{
//For subsequent pages, prepare encoders:
EncoderParameters EncoderParams = new EncoderParameters(3);
EncoderParameter SaveEncodeParam = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
EncoderParameter CompressionEncodeParam = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionLZW);
EncoderParameter QualityEncodeParam = new EncoderParameter(Encoder.Quality, 100L);
EncoderParams.Param[0] = CompressionEncodeParam;
EncoderParams.Param[1] = SaveEncodeParam;
EncoderParams.Param[2] = QualityEncodeParam;
tiff.SaveAdd(bitmap, EncoderParams);
}
public void FlushTiff(Image tiff)
{
//Finally flush the file:
EncoderParameter SaveEncodeParam = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.Flush);
var EncoderParams = new EncoderParameters(1);
EncoderParams.Param[0] = SaveEncodeParam;
tiff.SaveAdd(EncoderParams);
}
|
|
|
I need to be able to save a Pdf file as a Tiff file. Is this doable with the SDK?
|