//--------------------------------------------------------------------------------------- // Copyright (c) 2001-2012 by PDFTron Systems Inc. All Rights Reserved. // Consult legal.txt regarding legal and license information. //--------------------------------------------------------------------------------------- using System; using System.IO; using pdftron; using pdftron.Common; using pdftron.Filters; using pdftron.SDF; using pdftron.PDF; namespace PDFNetSamples { class OptimizerSample { /// /// The following sample illustrates how to reduce PDF file size using the /// Optimizer class. /// /// 'pdftron.PDF.Optimizer' is an optional PDFNet Add-On utility class that can be /// used to optimize PDF documents by reducing the file size, removing redundant /// information, and compressing data streams using the latest in image compression /// technology. PDF Optimizer can compress and shrink PDF file size with the /// following operations: /// - Remove duplicated fonts, images, ICC profiles, and any other data stream. /// - Optionally convert high-quality or print-ready PDF files to small, efficient and web-ready PDF. /// - Optionally down-sample large images to a given resolution. /// - Optionally compress or recompress PDF images using JBIG2 and JPEG2000 compression formats. /// - Compress uncompressed streams and remove unused PDF objects. /// static void Main(string[] args) { PDFNet.Initialize(); string input_path = "../../../../TestFiles/"; string output_path = "../../../../TestFiles/Output/"; string input_filename = "newsletter.pdf"; //-------------------------------------------------------------------------------- // Example 1) Simple optimization of a pdf with default settings. // try { using (PDFDoc doc = new PDFDoc(input_path + input_filename)) { doc.InitSecurityHandler(); Optimizer.Optimize(doc); doc.Save(output_path + input_filename + "_opt1.pdf", SDFDoc.SaveOptions.e_linearized); } } catch (PDFNetException e) { Console.WriteLine(e.Message); } //-------------------------------------------------------------------------------- // Example 2) Reduce image quality and use jpeg compression for // non monochrome images. try { using (PDFDoc doc = new PDFDoc(input_path + input_filename)) { doc.InitSecurityHandler(); Optimizer.ImageSettings image_settings = new Optimizer.ImageSettings(); // low quality jpeg compression image_settings.SetCompressionMode(Optimizer.ImageSettings.CompressionMode.e_jpeg); image_settings.SetQuality(1); // Set the output dpi to be standard screen resolution image_settings.SetImageDPI(144,96); // this option will recompress images not compressed with // jpeg compression and use the result if the new image // is smaller. image_settings.ForceRecompression(true); // this option is not commonly used since it can // potentially lead to larger files. It should be enabled // only if the output compression specified should be applied // to every image of a given type regardless of the output image size //image_settings.ForceChanges(true); // use the same settings for both color and grayscale images Optimizer.OptimizerSettings opt_settings = new Optimizer.OptimizerSettings(); opt_settings.SetColorImageSettings(image_settings); opt_settings.SetGrayscaleImageSettings(image_settings); Optimizer.Optimize(doc, opt_settings); doc.Save(output_path + input_filename + "_opt2.pdf", SDFDoc.SaveOptions.e_linearized); } } catch (PDFNetException e) { Console.WriteLine(e.Message); } //-------------------------------------------------------------------------------- // Example 3) Use monochrome image settings and default settings // for color and grayscale images. try { using (PDFDoc doc = new PDFDoc(input_path + input_filename)) { doc.InitSecurityHandler(); Optimizer.MonoImageSettings mono_image_settings = new Optimizer.MonoImageSettings(); mono_image_settings.SetCompressionMode(Optimizer.MonoImageSettings.CompressionMode.e_jbig2); mono_image_settings.ForceRecompression(true); Optimizer.OptimizerSettings opt_settings = new Optimizer.OptimizerSettings(); opt_settings.SetMonoImageSettings(mono_image_settings); Optimizer.Optimize(doc, opt_settings); doc.Save(output_path + input_filename + "_opt3.pdf", SDFDoc.SaveOptions.e_linearized); } } catch (PDFNetException e) { Console.WriteLine(e.Message); } PDFNet.Terminate(); } } }