Reference Guide
Programming / PDF / Using MRC compression to re-compress existing PDF documents
In This Topic
    Using MRC compression to re-compress existing PDF documents
    In This Topic

    Mixed Raster Content (MRC) Compression can be very useful for compressing complex PDF documents to reduce their file size. You can read more about this powerful tool on our blog. Below is an example of how to re-compress existing PDF documents benefiting from the enhanced MRC Compression mechanism. 

    Copy Code
    'We assume that GdPicture has been correctly installed and unlocked.
    Using pdf As GdPicturePDF = New GdPicturePDF()
        Dim status As GdPictureStatus = pdf.LoadFromFile("source.pdf", False)
        If status = GdPictureStatus.OK Then
            'Setting MRC options.
            pdf.SetMRCImageBackgroundResolution(100)
            'You can set it to true to obtain a better quality rendering, but it produces a bigger file.
            pdf.SetMRCPreserveSmoothing(False)
            'You can also set the compression values for images here, for example:
            pdf.SetCompressionForBitonalImage(PdfCompression.PdfCompressionJBIG2)
            pdf.SetCompressionForColorImage(PdfCompression.PdfCompressionJPEG2000)
            'Using the negative value permits to specify better quality factor versus a compression rate.
            pdf.SetJpeg2000Quality(-60) 
            Dim pageCount As Integer = pdf.GetPageCount()
            status = pdf.GetStat()
            Dim pageNo As Integer = 1 
            While (pageNo <= pageCount) AndAlso (status = GdPictureStatus.OK)
                status = pdf.SelectPage(pageNo)
                If status = GdPictureStatus.OK Then
                    'We can ignore hiddent text in the example.
                    Dim isPageImage As Boolean = pdf.IsPageImage(True)
                    status = pdf.GetStat()
                    If status = GdPictureStatus.OK Then
                        If isPageImage Then
                            'As the page is image-based, the image number is 1 and we can extract this image.
                            Dim imageID As Integer = pdf.ExtractPageImage(1)
                            status = pdf.GetStat()
                            If status = GdPictureStatus.OK Then
                                'Getting the resource name of the extracted image, the index of the image to be used here is 0.
                                Dim imageResName As String = pdf.GetPageImageResName(0)
                                status = pdf.GetStat()
                                If status = GdPictureStatus.OK Then
                                    'The original image is replaced with the compressed image on the whole page surface here.
                                    status = pdf.ReplaceImageMRC(imageResName, imageID)
                                    'You need to dispose of the used image resource here.
                                    GdPictureDocumentUtilities.DisposeImage(imageID)
                                End If
                            End If
                        End If
                    End If
                End If
                pageNo += 1
            End While
            If status = GdPictureStatus.OK Then
                status = pdf.SaveToFile("dest.pdf", True)
                If status = GdPictureStatus.OK Then
                    MessageBox.Show("The example has been followed successfully and the file has been saved.", "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Else
                    MessageBox.Show("The example has been followed successfully, but the file can't be saved. Status: " + status.ToString(), "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                End If
            Else
                MessageBox.Show("The example has NOT been followed successfully. Status: " + status.ToString(), "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.[Error])
            End If
        Else
            MessageBox.Show("The file can't be loaded. Status: " + status.ToString(), "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.[Error])
        End If
    End Using
    Copy Code
    //We assume that GdPicture has been correctly installed and unlocked.
    using (GdPicturePDF pdf = new GdPicturePDF())
    {
        GdPictureStatus status = pdf.LoadFromFile("source.pdf", false);
        if (status == GdPictureStatus.OK)
        {
            //Setting MRC options.
            pdf.SetMRCImageBackgroundResolution(100);
            //You can set it to true to obtain a better quality rendering, but it produces a bigger file.
            pdf.SetMRCPreserveSmoothing(false);
            //You can also set the compression values for images here, for example:
            pdf.SetCompressionForBitonalImage(PdfCompression.PdfCompressionJBIG2);
            pdf.SetCompressionForColorImage(PdfCompression.PdfCompressionJPEG2000);
            //Using the negative value permits to specify better quality factor versus a compression rate.
            pdf.SetJpeg2000Quality(-60);
            int pageCount = pdf.GetPageCount();
            status = pdf.GetStat();
            for (int pageNo = 1; (pageNo <= pageCount) && (status == GdPictureStatus.OK); pageNo++)
            {
                status = pdf.SelectPage(pageNo);
                if (status == GdPictureStatus.OK)
                {
                    //We can ignore hiddent text in the example.
                    bool isPageImage = pdf.IsPageImage(true);
                    status = pdf.GetStat();
                    if (status == GdPictureStatus.OK)
                    {
                        if (isPageImage)
                        {
                            //As the page is image-based, the image number is 1 and we can extract this image.
                            int imageID = pdf.ExtractPageImage(1);
                            status = pdf.GetStat();
                            if (status == GdPictureStatus.OK)
                            {
                                //Getting the resource name of the extracted image, the index of the image to be used here is 0.
                                string imageResName = pdf.GetPageImageResName(0);
                                status = pdf.GetStat();
                                if (status == GdPictureStatus.OK)
                                {
                                    //The original image is replaced with the compressed image on the whole page surface here.
                                    status = pdf.ReplaceImageMRC(imageResName, imageID);
                                    //You need to dispose the used image resource here.
                                    GdPictureDocumentUtilities.DisposeImage(imageID);
                                }                                        
                            }
                        }
                    }
                }
            }
            if (status == GdPictureStatus.OK)
            {
                status = pdf.SaveToFile("dest.pdf", true);
                if (status == GdPictureStatus.OK)
                    MessageBox.Show("The example has been followed successfully and the file has been saved.", "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                    MessageBox.Show("The example has been followed successfully, but the file can't be saved. Status: " + status.ToString(), "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
                MessageBox.Show("The example has NOT been followed successfully. Status: " + status.ToString(), "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else
            MessageBox.Show("The file can't be loaded. Status: " + status.ToString(), "MRC Compression Example", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }