Sample code for 30+ languages & platforms
Tcl Requires Chilkat v11.7.0+

Deflate Compression Level When Optimizing a PDF

See more PDF Optimization Examples

Demonstrates compressionLevel, which is the deflate level (1 to 9, 9 by default) used for every stream the optimizer re-encodes. Level 9 is the smallest and the slowest; level 1 is the quickest. The difference is usually a percent or two, so level 9 is the right default for a file that will be downloaded many times, and a lower level is worth considering only when a server optimizes PDFs on the fly. A value outside 1 to 9 is an error.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

#  This example requires the Chilkat API to have been previously unlocked.
#  See Global Unlock Sample for sample code.

#  The PDF used in this example is available at watersense_accomplishments.pdf

set fac [new_CkFileAccess]

set json [new_CkJsonObject]

set jsonOut [new_CkJsonObject]

set pdf1 [new_CkPdf]

set success [CkPdf_LoadFile $pdf1 "qa_data/pdf/watersense_accomplishments.pdf"]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf1]
    delete_CkFileAccess $fac
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    delete_CkPdf $pdf1
    exit
}

CkJsonObject_UpdateInt $json "compressionLevel" 1
set success [CkPdf_Optimize $pdf1 "optimize" $json $jsonOut]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf1]
    delete_CkFileAccess $fac
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    delete_CkPdf $pdf1
    exit
}

set success [CkPdf_WriteFile $pdf1 "qa_output/watersense_level1.pdf"]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf1]
    delete_CkFileAccess $fac
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    delete_CkPdf $pdf1
    exit
}

puts "level 1: [CkFileAccess_FileSize $fac qa_output/watersense_level1.pdf]"

set pdf9 [new_CkPdf]

set success [CkPdf_LoadFile $pdf9 "qa_data/pdf/watersense_accomplishments.pdf"]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf9]
    delete_CkFileAccess $fac
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    delete_CkPdf $pdf1
    delete_CkPdf $pdf9
    exit
}

CkJsonObject_UpdateInt $json "compressionLevel" 9
set success [CkPdf_Optimize $pdf9 "optimize" $json $jsonOut]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf9]
    delete_CkFileAccess $fac
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    delete_CkPdf $pdf1
    delete_CkPdf $pdf9
    exit
}

set success [CkPdf_WriteFile $pdf9 "qa_output/watersense_level9.pdf"]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf9]
    delete_CkFileAccess $fac
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    delete_CkPdf $pdf1
    delete_CkPdf $pdf9
    exit
}

puts "level 9: [CkFileAccess_FileSize $fac qa_output/watersense_level9.pdf]"

#  A level outside 1..9 fails, and LastErrorText says why.
set pdfBad [new_CkPdf]

set success [CkPdf_LoadFile $pdfBad "qa_data/pdf/watersense_accomplishments.pdf"]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdfBad]
    delete_CkFileAccess $fac
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    delete_CkPdf $pdf1
    delete_CkPdf $pdf9
    delete_CkPdf $pdfBad
    exit
}

CkJsonObject_UpdateInt $json "compressionLevel" 12
set success [CkPdf_Optimize $pdfBad "optimize" $json $jsonOut]
if {$success == 0} then {
    puts "compressionLevel 12 was refused, as it should be."
}


delete_CkFileAccess $fac
delete_CkJsonObject $json
delete_CkJsonObject $jsonOut
delete_CkPdf $pdf1
delete_CkPdf $pdf9
delete_CkPdf $pdfBad