This code demonstrates how to dramatically reduces a PDF file size by altering its embedded images.
Code: Select all
Const CONVERT_1BPP As Boolean = False 'Set true to convert all bitmap to black & white
Const SCALE_FACTOR As Single = 2.0 'Set 1 for no scale.
Const JPEG_QUALITY_COLOUR As Integer = 60 'between 1 and 100
Const JPEG_QUALITY_GRAY As Integer = 30 'between 1 and 100
Const SOURCE_PATH As String = "c:\test.pdf"
Const DEST_PATH As String = "c:\result.pdf"
Using gdPicturePDF As New GdPicturePDF
Dim oGdPictureImaging As New GdPictureImaging
If gdPicturePDF.LoadFromFile(SOURCE_PATH, False) = GdPictureStatus.OK Then
If gdPicturePDF.IsEncrypted() Then
If Not gdPicturePDF.SetPassword("") Then
MsgBox("password protected document")
Return
End If
End If
gdPicturePDF.SetCompressionForBitonalImage(PdfCompression.PdfCompressionJBIG2)
gdPicturePDF.SetCompressionForColorImage(PdfCompression.PdfCompressionJPEG)
For i As Integer = 1 To gdPicturePDF.GetPageCount()
gdPicturePDF.SelectPage(i)
Dim imageCount As Integer = gdPicturePDF.GetPageImageCount
If imageCount > 0 Then
For j As Integer = 0 To imageCount - 1
Dim ImageID As Integer = gdPicturePDF.ExtractPageImage(j + 1) 'Warning: 1-based
If ImageID <> 0 Then
If CONVERT_1BPP Then
oGdPictureImaging.ConvertTo1Bpp(ImageID)
End If
Dim bitDepth As Integer = oGdPictureImaging.GetBitDepth(ImageID)
If bitDepth > 8 Then
gdPicturePDF.SetJpegQuality(JPEG_QUALITY_COLOUR)
Else
If bitDepth = 8 Then
If oGdPictureImaging.IsGrayscale(ImageID) Then
gdPicturePDF.SetJpegQuality(JPEG_QUALITY_GRAY)
Else
gdPicturePDF.SetJpegQuality(JPEG_QUALITY_COLOUR)
End If
End If
End If
Dim imageResName As String = gdPicturePDF.GetPageImageResName(j)
If SCALE_FACTOR <> 1.0F Then
oGdPictureImaging.Scale(ImageID, 100 / SCALE_FACTOR, Drawing2D.InterpolationMode.HighQualityBicubic)
End If
gdPicturePDF.ReplaceImage(imageResName, ImageID, False, True)
Dim newImageResName As String = gdPicturePDF.AddImageFromGdPictureImage(ImageID, False, False)
oGdPictureImaging.ReleaseGdPictureImage(ImageID)
End If
Next
End If
Next
If gdPicturePDF.SaveToFile(DEST_PATH, True) = GdPictureStatus.OK Then
MsgBox("done")
Else
MsgBox("error saving file file: " + DEST_PATH + ". Status: " + gdPicturePDF.GetStat.ToString)
End If
gdPicturePDF.CloseDocument()
Else
MsgBox("Can't open file: " + SOURCE_PATH + ". Status: " + gdPicturePDF.GetStat.ToString)
End If
End Using