Hyper-compress PDF documents
With a Professional or higher license, Nutrient Document Converter Services (DCS) enables hyper-compression during PDF conversions.
Hyper-compression includes:
-
JPEG2000 compression
-
JBIG2 compression
-
Color detection
-
Mixed raster content (MRC)
-
Content optimization by removing unnecessary elements
This guide explains how to apply hyper-compression settings using the DCS simple object access protocol (SOAP)-based API. The sample code below uses the OpenService
and CloseService
methods from the DocumentConverterServiceClient
.
Sample code for applying hyper-compression using the API
To apply hyper-compression, add a CompressionSettings
instance to the ConversionSettings
object before initiating the conversion as shown in the code sample below:
/// <summary> /// PDF conversion, including compression. /// </summary> /// <param name="sourceFileName">Source file path</param> /// <param name="targetFolder">Path to target folder</param> static void PDFConversionCompression(string sourceFileName, string targetFolder) { DocumentConverterServiceClient client = null; try { // If the target folder does not exist, create it. if (!Directory.Exists(targetFolder)) { Directory.CreateDirectory(targetFolder); } // Determine the source file and read it into a byte array. byte[] sourceFile = File.ReadAllBytes(sourceFileName); // Open the service and configure the bindings. client = OpenService(ServiceURL); // Set the absolute minimum open options. OpenOptions openOptions = new OpenOptions(); openOptions.OriginalFileName = Path.GetFileName(sourceFileName); openOptions.FileExtension = Path.GetExtension(sourceFileName); // Set the absolute minimum conversion settings. ConversionSettings conversionSettings = new ConversionSettings(); conversionSettings.Fidelity = ConversionFidelities.Full; conversionSettings.Quality = ConversionQuality.OptimizeForPrint; // Set compression settings. CompressionSettings compressionSettings = new CompressionSettings(); // Enable JPEG2000 compression. compressionSettings.EnableJPEG2000 = BooleanEnum.True; // Enable JBIG2 compression. compressionSettings.EnableJBIG2 = BooleanEnum.True; compressionSettings.JBIG2PMSThreshold = 85; // Enable color detection. compressionSettings.EnableColorDetection = BooleanEnum.True; // Mixed raster compression. compressionSettings.EnableMRC = BooleanEnum.True; // Remove unneeded content. compressionSettings.RemoveAnnotations = BooleanEnum.True; compressionSettings.RemoveBlankPages = BooleanEnum.True; compressionSettings.RemoveBookmarks = BooleanEnum.True; compressionSettings.RemoveEmbeddedFiles = BooleanEnum.True; compressionSettings.RemoveFormFields = BooleanEnum.True; compressionSettings.RemoveHyperlinks = BooleanEnum.True; compressionSettings.RemoveJavaScript = BooleanEnum.True; compressionSettings.RemoveMetadata = BooleanEnum.True; compressionSettings.RemovePageThumbnails = BooleanEnum.True; // Carry out the conversion. byte[] convFile = client.Convert(sourceFile, openOptions, conversionSettings); // Write the converted file back to the file system with a PDF extension. string destinationFileName = Path.Combine(targetFolder, Path.GetFileNameWithoutExtension(sourceFileName) + "." + conversionSettings.Format); using (FileStream fs = File.Create(destinationFileName)) { fs.Write(convFile, 0, convFile.Length); fs.Close(); } Console.WriteLine("File converted to " + destinationFileName); } catch (FaultException<WebServiceFaultException> ex) { Console.WriteLine($"FaultException occurred: ExceptionType: {ex.Detail.ExceptionType.ToString()}"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { if (client != null) { CloseService(client); } } }