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); } |