PDF Optimizer
Dokumentation & Codebeispiele
Windows Client
MacOS
Linux
Windows Server
API
Watched folder (Windows only)
Shell tool (command line)
C/C++
.NET Core
C#
Java
Entwicklerhandbücher & Referenzen
Code-Beispiele
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1// Create the optimizer
2pOptimizer = PdfOptimizeCreateObject();
3
4// Set extract fonts and images
5PdfOptimizeSetExtractFonts(pOptimizer, 1);