PDF Generation Template Editor
Open-source visual PDF generation engine with customizable templates and developer-friendly APIs.
Open-source visual PDF generation engine with customizable templates and developer-friendly APIs.
Use the WriteOptimizeToFilePath() method to execute compression and save the document:
CPDFDocument document = CPDFDocument.InitWithFilePath("input.pdf");
CPDFOptimizeOption optimizeOption = document.GetOptimizeOption();
// Configure optimization options
CPDF_OPTIMIZE_FLAG flags =
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_RMNOTUSE |
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_BCOMPRESSIMAGE |
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_USEFLATE;
optimizeOption.SetFlag(flags);
// Configure image compression
optimizeOption.SetImageQuality(60.0f);
// Execute compression and save
// Parameter fontSubset: true means enable font subsetting
bool success = document.WriteOptimizeToFilePath("output_optimized.pdf", true);
if (success)
{
Console.WriteLine("Document compression successful");
}Use SetGetPageIndexDelegate() to set a progress callback delegate:
CPDFDocument document = CPDFDocument.InitWithFilePath("input.pdf");
CPDFOptimizeOption optimizeOption = document.GetOptimizeOption();
// Configure optimization flags
optimizeOption.SetFlag(
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_BCOMPRESSIMAGE |
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_OPTIMIZEPAGECONTENT
);
// Set progress callback
optimizeOption.SetGetPageIndexDelegate((pageIndex) =>
{
int totalPages = document.PageCount;
int currentPage = pageIndex + 1;
double progress = (double)currentPage / totalPages * 100;
Console.WriteLine($"Processing page {currentPage}/{totalPages} ({progress:F1}%)");
return 0;
});
// Execute compression
bool success = document.WriteOptimizeToFilePath("output_with_progress.pdf", true);You can call OptimizeCancel() to cancel the operation during compression:
// Cancel compression in another thread or async operation
bool cancelled = optimizeOption.OptimizeCancel();
if (cancelled)
{
Console.WriteLine("Compression operation cancelled");
}Here is a complete document compression example showing how to combine various optimization options:
public void CompressDocument(string inputPath, string outputPath)
{
// Open document
CPDFDocument document = CPDFDocument.InitWithFilePath(inputPath);
if (document == null || document.IsLocked)
{
Console.WriteLine("Cannot open document");
return;
}
// Get original file size
FileInfo originalFile = new FileInfo(inputPath);
long originalSize = originalFile.Length;
// Get optimization options
CPDFOptimizeOption optimizeOption = document.GetOptimizeOption();
if (!optimizeOption.IsValid())
{
Console.WriteLine("Cannot get optimization options");
return;
}
// Configure optimization flags - comprehensive optimization
CPDF_OPTIMIZE_FLAG flags =
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_RMNOTUSE | // Remove unused resources
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_RMEPTOBJ | // Remove empty objects
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_BCOMPRESSIMAGE | // Enable image compression
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_RMDOCINFO | // Remove document info
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_RMMEDTADATA | // Remove metadata
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_USEFLATE | // Use Flate compression
CPDF_OPTIMIZE_FLAG.OPTIMIZE_FLAG_OPTIMIZEPAGECONTENT; // Optimize page content
optimizeOption.SetFlag(flags);
// Configure image compression options
CPDFOptimizeImageOption imageOption = new CPDFOptimizeImageOption();
imageOption.UperPpi = 225;
imageOption.TargetPpi = 150;
imageOption.CompAlg = CPDF_COMP_ALG.COMP_ALG_JPEG;
imageOption.Quality = 50;
optimizeOption.SetImageOption(imageOption);
// Set progress callback
optimizeOption.SetGetPageIndexDelegate((pageIndex) =>
{
Console.WriteLine($"Processing progress: {pageIndex + 1}/{document.PageCount}");
return 0;
});
// Execute compression
bool success = document.WriteOptimizeToFilePath(outputPath, true);
if (success)
{
// Calculate compression ratio
FileInfo compressedFile = new FileInfo(outputPath);
long compressedSize = compressedFile.Length;
double compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Compression complete!");
Console.WriteLine($"Original size: {originalSize / 1024.0:F2} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024.0:F2} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F1}%");
}
else
{
Console.WriteLine("Compression failed");
}
// Release resources
document.Release();
}