Recompress existing PDFs using MRC compression in VB.NET

Mixed raster content (MRC) compression is useful for compressing complex PDF documents to reduce their file size. This example shows how to recompress existing PDF documents, benefiting from the enhanced MRC compression mechanism.


VB.NET
'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

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.