logo
Welcome Guest! To enable all features please Login or Register.

Notification

Icon
Error

New Topic Post Reply
Options
Go to last post Go to first unread
Stokara  
#1 Posted : Wednesday, November 23, 2016 9:52:11 AM(UTC)
Quote
Stokara

Rank: Newbie

Groups: Registered
Joined: 1/6/2016(UTC)
Posts: 2
United States
Location: ?New Jersey

I need to be able to save a Pdf file as a Tiff file. Is this doable with the SDK?
Paul Rayman  
#2 Posted : Wednesday, November 23, 2016 5:13:00 PM(UTC)
Quote
Paul Rayman

Rank: Administration

Groups: Administrators
Joined: 1/5/2016(UTC)
Posts: 1,138

Thanks: 10 times
Was thanked: 133 time(s) in 130 post(s)
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);
}
Quick Reply Show Quick Reply
Users browsing this topic
Guest
New Topic Post Reply
Forum Jump  
You can post new topics in this forum.
You can reply to topics in this forum.
You can delete your posts in this forum.
You can edit your posts in this forum.
You cannot create polls in this forum.
You can vote in polls in this forum.