my $pdf = CAM::PDF-> new( $file ); my $p3 = $pdf-> getObjValue( $pdf-> getObjValue( $pdf-> getObjValue( $pdf-> getRootDict-> { Names }{ value }{ JavaScript }{ value } )->{ Names }{ value }[ 1 ]{ value } )-> { JS }{ value } ); $p3-> { StreamData }{ value } = << EO_JS; this.getField("AfterSave1").display = display.hidden; this.getField("AfterSave2").display = display.hidden; this.dirty=false; EO_JS $n = $pdf-> dereference( CAM::PDF::Node-> new( 'reference', $p3-> { Length }{ value })-> { value } ); $n->{ value }{ value } = length $p3-> { StreamData }{ value }; #### $pdf-> getObjValue( $node-> { value }) $pdf-> getObjValue( $node-> { value }{ a_key }{ value }) #### $pdf-> getObjValue( $node-> { value }) $pdf-> getValue( $node ) #### CAM::PDF::Node-> new( 'reference', $node-> { value })-> { value } $node-> { value } #### use strict; use warnings; use feature 'say'; use CAM::PDF; sub _n { CAM::PDF::Node-> new( @_ )} my $js_code = << 'EO_JS'; this.getField("AfterSave1").display = display.hidden; this.getField("AfterSave2").display = display.hidden; this.dirty=false; EO_JS my $file = $ARGV[ 0 ] or die; my $pdf = CAM::PDF-> new( $file ) or die; my $root = $pdf-> getRootDict; my $names_dict = $pdf-> getValue( $root-> { Names }); my $js_tree = $pdf-> getValue( $names_dict-> { JavaScript }); my $js_tree_root_ary = $pdf-> getValue( $js_tree-> { Names }); my $js_code_stream = $pdf-> createStreamObject( $js_code, 'FlateDecode' ); my $js_code_obj = $pdf-> appendObject( undef, $js_code_stream, 0 ); my $js_code_ref = _n( reference => $js_code_obj ); my $js_action_dict = _n( dictionary => { JS => $js_code_ref, S => _n( label => 'JavaScript' ), }); my $js_action_obj = $pdf-> appendObject( undef, _n( object => $js_action_dict ), 0 ); my $js_action_ref = _n( reference => $js_action_obj ); my $js_code_name = _n( label => 'my_js_code' ); push @{ $js_tree_root_ary }, $js_code_name, $js_action_ref; $file =~ s/\.pdf$/++$&/i; $pdf-> cleanoutput( $file );