PDF Optimizer

Documentation & code samples

C/C++
.NET Core
C#
Java

Code samples

Optimizing

Optimize PDF document for archiving

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Choose the optimization profile for archiving
5    optimizer.Profile = PDFOptimizationProfile.eOptimizationProfileArchive;
6
7    // Open input file
8    if (!optimizer.Open(inputPath, ""))
9        throw new Exception(String.Format("Input file {0} cannot be opened. " +
10            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
11
12    // Save output file
13    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
14        throw new Exception(String.Format("Output file {0} cannot be created. " +
15            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
16
17    // Close input file
18    if (!optimizer.Close())
19        throw new Exception(String.Format("Input file {0} cannot be closed. " +
20            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
21}
22
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Choose the optimization profile for archiving
5optimizer.setProfile(PdfOptimize.OPTIMIZATIONPROFILE.eOptimizationProfileArchive);
6
7// Open input file
8if (!optimizer.open(inputPath, "")) 
9    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
10        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
11
12// Save output file
13if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption)) 
14    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
15        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
16
17// Close input file
18if (!optimizer.close())
19    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
20        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
21
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Choose the optimization profile for archiving
5PdfOptimizeSetProfile(pOptimizer, eOptimizationProfileArchive);
6
7// Open input file
8if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
9{
10    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
11        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
12    iReturnValue = 1;
13    goto cleanup;
14}
15
16// Save output file
17if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
18{
19    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath,
20        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
21    iReturnValue = 1;
22    goto cleanup;
23}
24
25// Close input amd output files
26if (!PdfOptimizeClose(pOptimizer))
27{
28    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath,
29        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
30    iReturnValue = 1;
31    goto cleanup;
32}
33
Download code samples for

Optimize PDF document with Mixed Raster Content (MRC)

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Choose the optimization profile for MRC
5    optimizer.Profile = PDFOptimizationProfile.eOptimizationProfileMRC;
6
7    // Set MRC foreground and background layer resolution
8    optimizer.MrcLayerResolutionDPI = resolution;
9
10    // Open input file
11    if (!optimizer.Open(inputPath, ""))
12        throw new Exception(String.Format("Input file {0} cannot be opened. " + 
13            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
14
15    // Save output file
16    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
17        throw new Exception(String.Format("Output file {0} cannot be created. " + 
18            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
19
20    // Close input file
21    if (!optimizer.Close())
22        throw new Exception(String.Format("Input file {0} cannot be closed. " + 
23            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
24}
25
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Choose the optimization profile for MRC
5optimizer.setProfile(PdfOptimize.OPTIMIZATIONPROFILE.eOptimizationProfileMRC);
6
7// Set MRC foreground and background layer resolution
8optimizer.setMrcLayerResolutionDPI(resolution);
9
10// Open input file
11if (!optimizer.open(inputPath, ""))
12    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
13        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
14
15// Save output file 
16if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption))
17    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
18        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
19
20// Close input file
21if (!optimizer.close())
22    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
23        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
24
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Choose the optimization profile for MRC
5PdfOptimizeSetProfile(pOptimizer, eOptimizationProfileMRC);
6
7// Set MRC foreground and background layer resolution
8PdfOptimizeSetMrcLayerResolutionDPI(pOptimizer, fResolution);
9
10// Open input file
11if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
12{
13    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
14        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
15    iReturnValue = 1;
16    goto cleanup;
17}
18
19// Save output file
20if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
21{
22    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath,
23        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
24    iReturnValue = 1;
25    goto cleanup;
26}
27
28// Close input file
29if (!PdfOptimizeClose(pOptimizer))
30{
31    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath,
32        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
33    iReturnValue = 1;
34    goto cleanup;
35}
36
Download code samples for

Merge and subset fonts from PDF document

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Choose subset and merge embedded fonts
5    optimizer.SubsetFonts = true;
6    optimizer.MergeEmbeddedFonts = true;
7
8    // Convert Type1 font programs to CFF (compact font format)
9    optimizer.ConvertToCFF = true;
10
11    // Open input file
12    if (!optimizer.Open(inputPath, ""))
13        throw new Exception(String.Format("Input file {0} cannot be opened. " + 
14            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
15
16    // Save output file
17    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
18        throw new Exception(String.Format("Output file {0} cannot be created. " + 
19            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
20
21    // Close input file
22    if (!optimizer.Close())
23        throw new Exception(String.Format("Input file {0} cannot be closed. " + 
24            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
25}
26
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Choose subset and merge embedded fonts
5optimizer.setSubsetFonts(true);
6optimizer.setMergeEmbeddedFonts(true);
7
8// Convert Type1 font programs to CFF (compact font format)
9optimizer.setConvertToCFF(true);
10
11// Open input file
12if (!optimizer.open(inputPath, ""))
13    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
14        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
15
16// Save output file 
17if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption))
18    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
19        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
20
21// Close input file
22if (!optimizer.close())
23    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
24        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
25
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Choose subset and merge embedded fonts
5PdfOptimizeSetSubsetFonts(pOptimizer, 1);
6PdfOptimizeSetMergeEmbeddedFonts(pOptimizer, 1);
7
8// Convert Type1 font programs to CFF (compact font format)
9PdfOptimizeSetConvertToCFF(pOptimizer, 1);
10
11// Open input file
12if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
13{
14    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
15        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
16    iReturnValue = 1;
17    goto cleanup;
18}
19
20// Save output file
21if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
22{
23    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath,
24        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
25    iReturnValue = 1;
26    goto cleanup;
27}
28
29// Close input file
30if (!PdfOptimizeClose(pOptimizer))
31{
32    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath,
33        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
34    iReturnValue = 1;
35    goto cleanup;
36}
37
Download code samples for

Optimize images of PDF document

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Set candidate compression types
5    optimizer.BitonalCompressions = PDFComprAttempt.eComprAttemptGroup4 | 
6        PDFComprAttempt.eComprAttemptJBIG2 | PDFComprAttempt.eComprAttemptSource;
7    optimizer.ContinuousCompressions = PDFComprAttempt.eComprAttemptJPEG | 
8        PDFComprAttempt.eComprAttemptJPEG2000 | PDFComprAttempt.eComprAttemptSource;
9    optimizer.IndexedCompressions = PDFComprAttempt.eComprAttemptFlate | 
10        PDFComprAttempt.eComprAttemptLZW | PDFComprAttempt.eComprAttemptSource;
11
12    // Set target resolution for down-sampling
13    optimizer.ResolutionDPI = resolution;
14
15    // Down-sample images if their resolution is greater than 130% of the target resolution
16    optimizer.ThresholdDPI = (float)1.3 * optimizer.ResolutionDPI;
17
18    // Apply a higher resolution to bi-tonal images
19    optimizer.BitonalResolutionDPI = (float)1.2 * resolution;
20    optimizer.BitonalThresholdDPI = (float)1.3 * optimizer.BitonalResolutionDPI;
21
22    // Set image quality (for lossy compression types)
23    optimizer.ImageQuality = quality;
24
25    // Clip invisible parts of images
26    optimizer.ClipImages = true;
27
28    // Convert images' color spaces to the least complex possible
29    optimizer.ReduceColorComplexity = true;
30
31    // Open input file
32    if (!optimizer.Open(inputPath, ""))
33        throw new Exception(String.Format("Input file {0} cannot be opened. " + 
34            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
35
36    // Save output file
37    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
38        throw new Exception(String.Format("Output file {0} cannot be created. " + 
39            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
40
41    // Close input file
42    if (!optimizer.Close())
43        throw new Exception(String.Format("Input file {0} cannot be closed. " + 
44            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
45}
46
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Set candidate compression types
5optimizer.setBitonalCompressions(NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptGroup4 | 
6    NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptJBIG2 | 
7    NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptSource);
8optimizer.setContinuousCompressions(NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptJPEG | 
9    NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptJPEG2000 | 
10    NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptSource);
11optimizer.setIndexedCompressions(NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptFlate | 
12    NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptLZW | 
13    NativeLibrary.COMPRESSIONATTEMPT.eComprAttemptSource);
14
15// Set target resolution for down-sampling
16optimizer.setResolutionDPI(resolution);
17
18// Down-sample images if their resolution is greater than 130% of the target resolution 
19optimizer.setThresholdDPI((float)1.3 * resolution);
20
21// Apply a higher resolution to bitonal images
22optimizer.setBitonalResolutionDPI((float)1.2 * resolution);
23optimizer.setBitonalThresholdDPI((float)1.3 * optimizer.getBitonalResolutionDPI());
24
25// Set image quality (for lossy compression type)
26optimizer.setImageQuality(quality);
27
28// Clip invisible parts of images
29optimizer.setClipImages(true);
30
31// Convert images' color spaces to the least complex possible
32optimizer.setReduceColorComplexity(true);
33
34// Open input file
35if (!optimizer.open(inputPath, ""))
36    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
37        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
38
39// Save output file 
40if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption))
41    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
42        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
43
44// Close input file
45if (!optimizer.close())
46    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
47        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
48
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Set candidate compression type
5PdfOptimizeSetBitonalCompressions(pOptimizer, eComprAttemptGroup4 | eComprAttemptJBIG2 | 
6    eComprAttemptSource);
7PdfOptimizeSetContinuousCompressions(pOptimizer, eComprAttemptJPEG | eComprAttemptJPEG2000 | 
8    eComprAttemptSource);
9PdfOptimizeSetIndexedCompressions(pOptimizer, eComprAttemptFlate | eComprAttemptLZW | 
10    eComprAttemptSource);
11
12// Set target resolution for down-sampling
13PdfOptimizeSetResolutionDPI(pOptimizer, fResolution);
14
15// Down-sample images if their resolution exceeds 130% of the target resolution
16PdfOptimizeSetThresholdDPI(pOptimizer, 1.3f * PdfOptimizeGetResolutionDPI(pOptimizer));
17
18// Apply a 20% higher resolution to bi-tonal images
19PdfOptimizeSetBitonalResolutionDPI(pOptimizer, 1.2f * fResolution);
20PdfOptimizeSetBitonalThresholdDPI(pOptimizer, 
21    1.3f * PdfOptimizeGetBitonalResolutionDPI(pOptimizer));
22
23// Set image quality (for lossy compression types)
24PdfOptimizeSetImageQuality(pOptimizer, iQuality);
25
26// Clip invisible parts of images
27PdfOptimizeSetClipImages(pOptimizer, 1);
28
29// Convert images' color spaces to the least complex possible
30PdfOptimizeSetReduceColorComplexity(pOptimizer, 1);
31
32// Open input file
33if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
34{
35    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
36        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
37    iReturnValue = 1;
38    goto cleanup;
39}
40
41// Save output file
42if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
43{
44    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath,
45        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
46    iReturnValue = 1;
47    goto cleanup;
48}
49
50// Close input file
51if (!PdfOptimizeClose(pOptimizer))
52{
53    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath, 
54        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
55    iReturnValue = 1;
56    goto cleanup;
57}
58
Download code samples for

Optimize PDF document for printing

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Choose the optimization profile for printing
5    optimizer.Profile = PDFOptimizationProfile.eOptimizationProfilePrint;
6
7    // Open input file
8    if (!optimizer.Open(inputPath, ""))
9        throw new Exception(String.Format("Input file {0} cannot be opened. " + 
10            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
11
12    // Save output file
13    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
14        throw new Exception(String.Format("Output file {0} cannot be created. {1} " + 
15                "(ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
16
17    // Close input file
18    if (!optimizer.Close())
19        throw new Exception(String.Format("Input file {0} cannot be closed. {1} " + 
20                "(ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
21}
22
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Choose the optimization profile for printing 
5optimizer.setProfile(PdfOptimize.OPTIMIZATIONPROFILE.eOptimizationProfilePrint);
6
7// Open input file
8if (!optimizer.open(inputPath, ""))
9    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
10        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
11
12// Save output file 
13if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption))
14    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
15        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
16
17// Close input file
18if (!optimizer.close())
19    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
20        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
21
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Choose the optimization profile for printing
5PdfOptimizeSetProfile(pOptimizer, eOptimizationProfilePrint);
6
7// Open input file
8if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
9{
10    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
11        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
12    iReturnValue = 1;
13    goto cleanup;
14}
15
16// Save output file
17if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
18{
19    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath,
20        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
21    iReturnValue = 1;
22    goto cleanup;
23}
24
25// Close input file
26if (!PdfOptimizeClose(pOptimizer))
27{
28    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath,
29        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
30    iReturnValue = 1;
31    goto cleanup;
32}
33
Download code samples for

Optimize PDF document for web

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Choose the optimization profile for web/e-mail
5    optimizer.Profile = PDFOptimizationProfile.eOptimizationProfileWeb;
6
7    // Disable auto-linearization
8    optimizer.AutoLinearize = false;
9
10    // Set linearization
11    optimizer.Linearize = linearize;
12
13    // Open input file
14    if (!optimizer.Open(inputPath, ""))
15        throw new Exception(String.Format("Input file {0} cannot be opened. " +
16            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
17
18    // Save output file
19    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
20        throw new Exception(String.Format("Output file {0} cannot be created. " +
21            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
22
23    // Close input file
24    if (!optimizer.Close())
25        throw new Exception(String.Format("Input file {0} cannot be closed. " +
26            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
27}
28
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Choose the optimization profile for web/e-mail
5optimizer.setProfile(PdfOptimize.OPTIMIZATIONPROFILE.eOptimizationProfileWeb);
6
7// Disable auto-linearization
8optimizer.setAutoLinearize(false);
9
10// Set linearization
11optimizer.setLinearize(linearize);
12
13// Open input file
14if (!optimizer.open(inputPath, ""))
15    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
16        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
17
18// Save output file 
19if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption))
20    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
21        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
22
23// Close input file
24if (!optimizer.close())
25    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
26        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
27
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Choose the optimization profile for web/e-mail
5PdfOptimizeSetProfile(pOptimizer, eOptimizationProfileWeb);
6
7// Disable auto-linearization
8PdfOptimizeSetAutoLinearize(pOptimizer, 0);
9
10// Set linearization
11PdfOptimizeSetLinearize(pOptimizer, bLinearize);
12
13// Open input file
14if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
15{
16    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
17        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
18    iReturnValue = 1;
19    goto cleanup;
20}
21
22// Save output file
23if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
24{
25    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath,
26        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
27    iReturnValue = 1;
28    goto cleanup;
29}
30
31// Close input file
32if (!PdfOptimizeClose(pOptimizer))
33{
34    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath,
35        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
36    iReturnValue = 1;
37    goto cleanup;
38}
39
Download code samples for

Removing

Flatten annotations of PDF document

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Flatten and remove annotations and form fields
5    optimizer.Strip = PDFStripType.eStripAnnots | PDFStripType.eStripFormsAnnots;
6
7    // Open input file
8    if (!optimizer.Open(inputPath, ""))
9        throw new Exception(String.Format("Input file {0} cannot be opened. " +
10            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
11
12    // Save output file
13    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
14        throw new Exception(String.Format("Output file {0} cannot be created. " +
15            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
16
17    // Close input file
18    if (!optimizer.Close())
19        throw new Exception(String.Format("Input file {0} cannot be closed. " +
20            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
21}
22
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Flatten and remove annotations and form fields 
5optimizer.setStrip(NativeLibrary.STRIPTYPE.eStripAnnots | 
6    NativeLibrary.STRIPTYPE.eStripFormsAnnots);
7
8// Open input file
9if (!optimizer.open(inputPath, "")) 
10    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
11        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
12
13// Save output file
14if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption)) 
15    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
16        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
17
18// Close input file
19if (!optimizer.close())
20    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
21        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
22
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Flatten and remove annotations and form fields
5PdfOptimizeSetStrip(pOptimizer, eStripAnnots | eStripFormsAnnots);
6
7// Open input file
8if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
9{
10    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath, 
11        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
12    iReturnValue = 1;
13    goto cleanup;
14}
15
16// Save output file
17if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
18{
19    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath, 
20        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
21    iReturnValue = 1;
22    goto cleanup;
23}
24
25// Close input file
26if (!PdfOptimizeClose(pOptimizer))
27{
28    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath, 
29        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
30    iReturnValue = 1;
31    goto cleanup;
32}
33
Download code samples for

Remove additional information of PDF

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Configure which additional information to remove
5    optimizer.Strip = PDFStripType.eStripAlternates | PDFStripType.eStripMetadata | 
6        PDFStripType.eStripOutputIntents | PDFStripType.eStripStructTree | PDFStripType.eStripThumb;
7
8    // Open input file
9    if (!optimizer.Open(inputPath, ""))
10        throw new Exception(String.Format("Input file {0} cannot be opened. " + 
11            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
12
13    // Save output file
14    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
15        throw new Exception(String.Format("Output file {0} cannot be created. " + 
16            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
17
18    // Close input file
19    if (!optimizer.Close())
20        throw new Exception(String.Format("Input file {0} cannot be closed. " + 
21            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
22}
23
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Configure which additional information to remove
5optimizer.setStrip(NativeLibrary.STRIPTYPE.eStripAlternates | 
6    NativeLibrary.STRIPTYPE.eStripMetadata | NativeLibrary.STRIPTYPE.eStripOutputIntents | 
7    NativeLibrary.STRIPTYPE.eStripStructTree | NativeLibrary.STRIPTYPE.eStripThumb);
8
9// Open input file
10if (!optimizer.open(inputPath, ""))
11    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
12        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
13
14// Save output file 
15if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption))
16    throw new IOException(String.format("Output file %s cannot be created. %s (ErrorCode: 0x%08x).",
17        outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
18
19// Close input file
20if (!optimizer.close())
21    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
22        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
23
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Remove additional information at one's option
5PdfOptimizeSetStrip(pOptimizer, eStripAlternates | eStripMetadata | eStripOutputIntents | 
6    eStripStructTree | eStripThumb);
7
8// Open input file
9if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
10{
11    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
12        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
13    iReturnValue = 1;
14    goto cleanup;
15}
16
17// Save output file
18if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption))
19{
20    _tprintf(_T("Output file %s cannot be created. %s (ErrorCode: 0x%08x).\n"), szOutputPath,
21        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
22    iReturnValue = 1;
23    goto cleanup;
24}
25
26// Close input file
27if (!PdfOptimizeClose(pOptimizer))
28{
29    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath,
30        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
31    iReturnValue = 1;
32    goto cleanup;
33}
34
Download code samples for

Features and Configuration

Encrypt document with user or owner password

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Open input file
5    if (!optimizer.Open(inputPath, ""))
6        throw new Exception(String.Format("Input file {0} cannot be opened. " +
7            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
8
9    // Save output file, provide user and owner password
10    if (!optimizer.SaveAs(outputPath, userPassword, ownerPassword, PDFPermission.ePermAnnotate))
11        throw new Exception(String.Format("Output file {0} cannot be created. " +
12            "{1} (ErrorCode: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
13
14    // Close input file
15    if (!optimizer.Close())
16        throw new Exception(String.Format("Input file {0} cannot be closed. " +
17            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
18}
19
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Open input file
5if (!optimizer.open(inputPath, "")) 
6    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
7        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
8
9// Save output file, provide user and owner password
10if (!optimizer.saveAs(outputPath, userPassword, ownerPassword,
11    NativeLibrary.PERMISSION.ePermAnnotate)) throw new IOException(String.format("Output file %s " +
12        "cannot be created. %s (ErrorCode: 0x%08x).", outputPath, optimizer.getErrorMessage(),
13        optimizer.getErrorCode()));
14
15// Close input file
16if (!optimizer.close())
17    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
18        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
19
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Open input file
5if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
6{
7    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath,
8        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
9    iReturnValue = 1;
10    goto cleanup;
11}
12
13// Save output file, provide user and owner password
14if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(szUserPassword), _T(szOwnerPassword),
15    ePermAnnotate))
16{
17    _tprintf(_T("Output file %s cannot be created.  %s (ErrorCode: 0x%08x).\n"), szOutputPath,
18        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
19    iReturnValue = 1;
20    goto cleanup;
21}
22
23// Close input file
24if (!PdfOptimizeClose(pOptimizer))
25{
26    _tprintf(_T("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).\n"), szInputPath, 
27        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
28    iReturnValue = 1;
29    goto cleanup;
30}
31
Download code samples for

Extract images and font files from PDF

1// Create the optimizer
2using (Optimizer optimizer = new Optimizer())
3{
4    // Set extract fonts and images
5    optimizer.ExtractFonts = true;
6    optimizer.ExtractImages = true;
7
8    // Open input file
9    if (!optimizer.Open(inputPath, ""))
10        throw new Exception(String.Format("Input file {0} cannot be opened. " +
11            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
12
13    // Extract fonts and images
14    if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption))
15        throw new Exception(String.Format("Fonts and images could not be extracted. " +
16            "{0} (ErrorCode: 0x{1:x}).", optimizer.ErrorMessage, optimizer.ErrorCode));
17
18    // Close input file
19    if (!optimizer.Close())
20        throw new Exception(String.Format("Input file {0} cannot be closed. " +
21            "{1} (ErrorCode: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode));
22}
23
Download code samples for
1// Create the optimizer
2optimizer = new PdfOptimize();
3
4// Set extract fonts and images
5optimizer.setExtractFonts(true);
6optimizer.setExtractImages(true);
7
8// Open input file
9if (!optimizer.open(inputPath, "")) 
10    throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).",
11        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
12
13// Extract fonts and images
14if (!optimizer.saveAs(outputPath, "", "", NativeLibrary.PERMISSION.ePermNoEncryption)) 
15    throw new IOException(String.format("Fonts and images could not be extracted. %s " +
16        "(ErrorCode: 0x%08x).", outputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
17
18// Close input file
19if (!optimizer.close())
20    throw new IOException(String.format("Input file %s cannot be closed. %s (ErrorCode: 0x%08x).",
21        inputPath, optimizer.getErrorMessage(), optimizer.getErrorCode()));
22
Download code samples for
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Set extract fonts and images
5PdfOptimizeSetExtractFonts(pOptimizer, 1);
6PdfOptimizeSetExtractImages(pOptimizer, 1);
7
8// Open input file
9if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T("")))
10{
11    _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath, 
12        PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer));
13    iReturnValue = 1;
14    goto cleanup;
15}
16
17// Extract fonts and images