Skip to content
ComPDF
DemoSampleAPI ReferenceFAQ

PDF Generation Template Editor

Open-source visual PDF generation engine with customizable templates and developer-friendly APIs.

View on GitHub

Execute Document Compression

Basic Compression Example

Use the WriteOptimizeToFilePath() method to execute compression and save the document:

java
CPDFDocument document = new CPDFDocument();
document.open("test.pdf");
CPDFOptimizeOption optimizeOption = document.GetOptimizeOption();

// Configure optimization options
int flags = 
    CPDFOptimizeOption.OPTIMIZE_FLAG_RMNOTUSE |
    CPDFOptimizeOption.OPTIMIZE_FLAG_BCOMPRESSIMAGE |
    CPDFOptimizeOption.OPTIMIZE_FLAG_USEFLATE;
optimizeOption.setOptimizeFlags(flags);

// Configure image compression
optimizeOption.setImageQuality(60.0f);

// Execute compression and save
// Parameter fontSubset: true means enable font subsetting
bool success = document.optimizeSaveAsCopy("output_optimized.pdf", true);

if (success)
{
    System.out.println("Document compression successful");
}

Comprehensive Compression Example

Below is a complete document compression example that demonstrates how to combine various optimization options:

java
public void CompressDocument(string inputPath, string outputPath)
{
    // Open document
    CPDFDocument document = new CPDFDocument();
    document.open("test.pdf");
    if (document == null)
    {
        return;
    }

    // Get original file size
    File originalFile = new File(inputPath);
    long originalSize = originalFile.length();

    // Get optimization options
    CPDFOptimizeOptions optimizeOption = document.getOptimizeOptions();
    if (optimizeOption == null)
    {
        return;
    }

    // Configure optimization flags - comprehensive optimization
    int flags =
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMNOTUSE |           // Remove unused resources
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMEPTOBJ |           // Remove empty objects
        CPDFOptimizeOptions.OPTIMIZE_FLAG_BCOMPRESSIMAGE |     // Enable image compression
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMDOCINFO |          // Remove document information
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMMEDTADATA |        // Remove metadata
        CPDFOptimizeOptions.OPTIMIZE_FLAG_USEFLATE |           // Use Flate compression
        CPDFOptimizeOptions.OPTIMIZE_FLAG_OPTIMIZEPAGECONTENT; // Optimize page content
    optimizeOption.setOptimizeFlags(flags);

    // Configure image compression options
    CPDFImageOptimizeOptions imageOption = new CPDFImageOptimizeOptions();
    imageOption.upperPpi = 225;
    imageOption.targetPpi = 150;
    imageOption.compressAlgorithm = CPDFCompressAlgorithm.JPEG2000;
    imageOption.quality = 50;
    optimizeOption.setColorImageOptions(imageOption);

    // Apply the configuration back to the document
    boolean setOk = document.setOptimizeOptions(optimizeOption);
    if (!setOk) {
        document.close();
        return;
    }

    // Perform compression
    bool success = document.optimizeSaveAsCopy(outputPath, true);

    if (success) {
        // Calculate compression ratio
        File compressedFile = new File(outputPath);
        long compressedSize = compressedFile.length();
        double compressionRatio = (1.0 - (double) compressedSize / originalSize) * 100.0;

        System.out.println("Compression completed!");
        System.out.printf("Original size: %.2f KB%n", originalSize / 1024.0);
        System.out.printf("Compressed size: %.2f KB%n", compressedSize / 1024.0);
        System.out.printf("Compression ratio: %.1f%%%n", compressionRatio);
    } else {
        System.out.println("Compression failed");
    }

    // Release resources
    document.close();
}