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

Remove a PDF's Old Revisions

See more PDF Optimization Examples

Demonstrates dropOldRevisions. A PDF that has been edited and saved several times carries every earlier revision: the superseded objects are still in the file, reachable through the older cross-reference sections. The audit reports them as "oldRevisions", and dropping them is often the single largest saving in a real document. Dropping them requires a full rewrite, which is why it invalidates existing digital signatures.

Chilkat B4X Downloads

B4X
Dim success As Boolean = False

'  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 grand_canyon_hiking_guide.pdf

Dim pdf As ChilkatPdf
pdf.Initialize("pdf")
success = pdf.LoadFile("qa_data/pdf/grand_canyon_hiking_guide.pdf")
If success = False Then
    Log(pdf.LastErrorText)
    Return
End If


'  How much of this file is superseded revisions?
Dim json As ChilkatJsonObject
json.Initialize
Dim jsonOut As ChilkatJsonObject
jsonOut.Initialize
success = pdf.Optimize("audit", json, jsonOut)
If success = False Then
    Log(pdf.LastErrorText)
    Return
End If


Log("fileSize:     " & jsonOut.IntOf("fileSize"))
Log("oldRevisions: " & jsonOut.IntOf("usage.oldRevisions.bytes"))

'  Drop them, and nothing else, so that the saving is attributable.
json.UpdateBool("compressUncompressed", False)
json.UpdateBool("recompressFlate", False)
json.UpdateBool("replaceLegacyFilters", False)
json.UpdateBool("imagePredictors", False)
json.UpdateBool("dedupeStreams", False)
json.UpdateBool("dedupeObjects", False)
json.UpdateBool("removeUnreferenced", False)
json.UpdateBool("removeUnusedResources", False)
json.UpdateBool("removeUnusedLayers", False)
json.UpdateBool("coalesceContent", False)
json.UpdateBool("tidyContent", False)
json.UpdateBool("subsetFonts", False)
json.UpdateBool("dropOldRevisions", True)

success = pdf.Optimize("optimize", json, jsonOut)
If success = False Then
    Log(pdf.LastErrorText)
    Return
End If


success = pdf.WriteFile("qa_output/grand_canyon_one_revision.pdf")
If success = False Then
    Log(pdf.LastErrorText)
    Return
End If


'  The saving is an estimate: what the old revisions occupied is known exactly, but the writer
'  decides the final layout.  Measure the written file for the real number.
Dim fac As ChilkatFileAccess
fac.Initialize
Log("bytesSaved (reported): " & jsonOut.IntOf("bytesSaved"))
Log("written file:          " & fac.FileSize("qa_output/grand_canyon_one_revision.pdf"))