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

Audit a PDF First, Optimize Only If It Is Worth It

See more PDF Optimization Examples

Demonstrates deciding whether to rewrite a PDF at all. "audit" costs a fraction of a second and changes nothing, so a batch job can audit every file and optimize only those where enough would be saved. Here the threshold is a tenth of the file; a file already as small as it can be is left alone.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
long li_Success
oleobject loo_Pdf
oleobject loo_Json
oleobject loo_JsonOut
long li_FileSize
long li_Estimated

li_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

loo_Pdf = create oleobject
li_rc = loo_Pdf.ConnectToNewObject("Chilkat.Pdf")
if li_rc < 0 then
    destroy loo_Pdf
    MessageBox("Error","Connecting to COM object failed")
    return
end if
li_Success = loo_Pdf.LoadFile("qa_data/pdf/watersense_accomplishments.pdf")
if li_Success = 0 then
    Write-Debug loo_Pdf.LastErrorText
    destroy loo_Pdf
    return
end if

loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

loo_JsonOut = create oleobject
li_rc = loo_JsonOut.ConnectToNewObject("Chilkat.JsonObject")

li_Success = loo_Pdf.Optimize("audit",loo_Json,loo_JsonOut)
if li_Success = 0 then
    Write-Debug loo_Pdf.LastErrorText
    destroy loo_Pdf
    destroy loo_Json
    destroy loo_JsonOut
    return
end if

li_FileSize = loo_JsonOut.IntOf("fileSize")
li_Estimated = loo_JsonOut.IntOf("estimatedSavings.total")
Write-Debug "fileSize:  " + string(li_FileSize)
Write-Debug "estimated: " + string(li_Estimated)

//  Only bother when at least a tenth of the file would go.
if li_Estimated > (li_FileSize / 10) then
    Write-Debug "Worth optimizing."
    li_Success = loo_Pdf.Optimize("optimize",loo_Json,loo_JsonOut)
    if li_Success = 0 then
        Write-Debug loo_Pdf.LastErrorText
        destroy loo_Pdf
        destroy loo_Json
        destroy loo_JsonOut
        return
    end if

    li_Success = loo_Pdf.WriteFile("qa_output/watersense_optimized.pdf")
    if li_Success = 0 then
        Write-Debug loo_Pdf.LastErrorText
        destroy loo_Pdf
        destroy loo_Json
        destroy loo_JsonOut
        return
    end if

    Write-Debug "bytesSaved: " + string(loo_JsonOut.IntOf("bytesSaved"))
else
    Write-Debug "Already small enough; left as it is."
end if



destroy loo_Pdf
destroy loo_Json
destroy loo_JsonOut