AVAILABLE NOW: Spring 2025 Release

Optimize a PDF in C# and Java

By Apryse | 2025 Apr 08

Sanity Image
Read time

5 min

Depending on your needs and data type, the term "optimize" can have several meanings. It can mean to optimize the size of the PDF file, or it can mean to organize the data within the PDF file for a specific purpose such as web viewing. Thankfully, Apryse does both, with the following code sample both compressing and linearizing PDF files.

Optimize the file size of PDF files

Copied to clipboard

The following C# and Java code snippets optimize the PDF compression. It bases the compression type on the data type.

C# Code:

using System; 

 

using pdftron; 

using pdftron.Common; 

using pdftron.SDF; 

using pdftron.PDF; 

 

namespace OptimizerTest 

{ 

   class Class1 

   { 

      static Class1() { } 

 

      static void Main(string[] args) 

      { 

         PDFNet.Initialize(PDFTronLicense.Key); 

 

         string input_path = @"file path to input pdf file"; 

         string output_path = @"file path to output pdf file"; 

 

         try 

         { 

            using (PDFDoc doc = new PDFDoc(input_path)) 

            { 

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

         	image_settings.SetDownsampleMode(Optimizer.ImageSettings.DownsampleMode.e_default); 

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

 

               //monochrome image settings and default settings for color and grayscale images. 

               Optimizer.MonoImageSettings mono_image_settings = new Optimizer.MonoImageSettings(); 

 

               mono_image_settings.SetCompressionMode(Optimizer.MonoImageSettings.CompressionMode.e_jbig2); 

               mono_image_settings.ForceRecompression(true); 

               mono_image_settings.SetDownsampleMode(Optimizer.MonoImageSettings.DownsampleMode.e_default); 

 

               opt_settings.SetMonoImageSettings(mono_image_settings); 

 

               Optimizer.Optimize(doc, opt_settings); 

 

               doc.Save(output_path, SDFDoc.SaveOptions.e_linearized); 

            } 

         } 

         catch (PDFNetException e) 

         { 

            Console.WriteLine(e.Message); 

         } 

 

         PDFNet.Terminate(); 

      } 

   } 

} 

Java Code:

import com.pdftron.pdf.*; 

import com.pdftron.sdf.SDFDoc; 

 

public class OptimizerTest { 

  

  public static void main(String[] args) { 

    String input_path = "file path to input pdf file"; 

    String output_path = "file path to output pdf file"; 

 

    PDFNet.initialize(PDFTronLicense.Key()); 

 

    try (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.e_jpeg); 

      image_settings.setQuality(1); 

      image_settings.SetDownsampleMode(Optimizer.ImageSettings.DownsampleMode.e_default); 

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

 

      Optimizer.OptimizerSettings opt_settings = new Optimizer.OptimizerSettings(); 

      opt_settings.setColorImageSettings(image_settings); 

      opt_settings.setGrayscaleImageSettings(image_settings); 

 

      Optimizer.MonoImageSettings mono_image_settings = new Optimizer.MonoImageSettings(); 

      mono_image_settings.SetCompressionMode(Optimizer.MonoImageSettings.CompressionMode.e_jbig2); 

      mono_image_settings.ForceRecompression(true); 

      mono_image_settings.SetDownsampleMode(Optimizer.MonoImageSettings.DownsampleMode.e_default); 

 

      Optimizer.optimize(doc, opt_settings); 

 

      doc.save(output_path + input_filename3, SDFDoc.SaveMode.LINEARIZED, null); 

    } catch (Exception e) { 

      e.printStackTrace(); 

      return; 

    } 

 

    PDFNet.terminate(); 

  } 

} 

Learn More

Copied to clipboard

To find out more about compressing and optimizing PDF files using Apryse SDK, check out our documentation. 

Sanity Image

Apryse

Share this post

email
linkedIn
twitter