Thanks.... PDF::Reuse works to some degree, but it can handle only functions in the documents level script. I want some of the code there to be executed once the document is opened, and PDF::Reuse doesn't provide that capability. My template PDF did have such code, but PDF::Reuse simply deletes it (it doesn't recognize any JS code that isn't a function).
So I'm still looking for a better solution. Any ideas? Maybe I can somehow locate that stream object, using CAM::PDF, and manually edit its content?
| [reply] [Watch: Dir/Any] |
| [reply] [Watch: Dir/Any] |
Okay, there is a way to modify document-level JS with CAM::PDF. I created a PDF with document-level JS, and below is how I replace it with a new JS code. Note that your template may work differently. For example, the JS code is stored in a pdf object, which may contain its length, or alternatively contain a reference to another pdf object that contains the length.
my $pdf = CAM::PDF->new($file);
my $p3 = $pdf->getObjValue($pdf->getObjValue($pdf->getObjValue($pdf->g
+etRootDict()->{Names}{value}{JavaScript}{value})->{Names}{value}[1]{v
+alue})->{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};;
For some reason, I'm not sure that's the way CAM::PDF was meant to be used... | [reply] [Watch: Dir/Any] [d/l] |