B4X Requires Chilkat v11.7.0+
B4X
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
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"))