DataFlex Requires Chilkat v11.7.0+
DataFlex
PDF Object Streams: generate, preserve or disable
See more PDF Optimization Examples
Demonstrates the objectStreams option. An object stream packs many small objects (dictionaries, not stream data) into one compressed stream, which is usually a worthwhile saving in a document with many pages or tags. "generate" (the default) packs them and writes a cross-reference stream; "preserve" keeps the file as it is -- packed if it already was, not packed if it was not; "disable" writes every object on its own with a classic cross-reference table, which is what a PDF 1.4 reader needs. Object streams require PDF 1.5 and are skipped for PDF/A-1.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoFac
Variant vJson
Handle hoJson
Variant vJsonOut
Handle hoJsonOut
Handle hoPdf1
Handle hoPdf2
Handle hoPdf3
String sTemp1
Integer iTemp1
Integer iTemp2
Move False To iSuccess
// 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
Get Create (RefClass(cComCkFileAccess)) To hoFac
If (Not(IsComObjectCreated(hoFac))) Begin
Send CreateComObject of hoFac
End
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonOut
If (Not(IsComObjectCreated(hoJsonOut))) Begin
Send CreateComObject of hoJsonOut
End
// generate: pack the objects (the default).
Get Create (RefClass(cComChilkatPdf)) To hoPdf1
If (Not(IsComObjectCreated(hoPdf1))) Begin
Send CreateComObject of hoPdf1
End
Get ComLoadFile Of hoPdf1 "qa_data/pdf/grand_canyon_hiking_guide.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf1 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComUpdateString Of hoJson "objectStreams" "generate" To iSuccess
Get pvComObject of hoJson to vJson
Get pvComObject of hoJsonOut to vJsonOut
Get ComOptimize Of hoPdf1 "optimize" vJson vJsonOut To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf1 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComWriteFile Of hoPdf1 "qa_output/grand_canyon_objstm_generate.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf1 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComFileSize Of hoFac "qa_output/grand_canyon_objstm_generate.pdf" To iTemp1
Get ComIntOf Of hoJsonOut "actions.objectStreams.count" To iTemp2
Showln "generate: " iTemp1 " bytes, objects packed: " iTemp2
// disable: every object on its own, with a classic cross-reference table.
Get Create (RefClass(cComChilkatPdf)) To hoPdf2
If (Not(IsComObjectCreated(hoPdf2))) Begin
Send CreateComObject of hoPdf2
End
Get ComLoadFile Of hoPdf2 "qa_data/pdf/grand_canyon_hiking_guide.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf2 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComUpdateString Of hoJson "objectStreams" "disable" To iSuccess
Get pvComObject of hoJson to vJson
Get pvComObject of hoJsonOut to vJsonOut
Get ComOptimize Of hoPdf2 "optimize" vJson vJsonOut To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf2 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComWriteFile Of hoPdf2 "qa_output/grand_canyon_objstm_disable.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf2 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComFileSize Of hoFac "qa_output/grand_canyon_objstm_disable.pdf" To iTemp1
Showln "disable: " iTemp1 " bytes"
// preserve: leave the file's own structure alone. Use it when the output must stay readable by
// whatever reads the input today.
Get Create (RefClass(cComChilkatPdf)) To hoPdf3
If (Not(IsComObjectCreated(hoPdf3))) Begin
Send CreateComObject of hoPdf3
End
Get ComLoadFile Of hoPdf3 "qa_data/pdf/grand_canyon_hiking_guide.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf3 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComUpdateString Of hoJson "objectStreams" "preserve" To iSuccess
Get pvComObject of hoJson to vJson
Get pvComObject of hoJsonOut to vJsonOut
Get ComOptimize Of hoPdf3 "optimize" vJson vJsonOut To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf3 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComWriteFile Of hoPdf3 "qa_output/grand_canyon_objstm_preserve.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf3 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComFileSize Of hoFac "qa_output/grand_canyon_objstm_preserve.pdf" To iTemp1
Showln "preserve: " iTemp1 " bytes"
End_Procedure