9.5. JavaScript extrahieren

Das Hilfsprogramm ExtractJavaScript extrahiert JavaScript aus einem PDF-Dokument und erstellt daraus eine Textdatei. Das Kapitel 3.16: „JavaScript“ beschreibt, wie die Datei in Tests verwendet werden kann.

Aufruf

::
:: Extract JavaScript from a PDF document into a text file.
::

@echo off
setlocal
set CLASSPATH=./lib/aspectj-1.8.7/*;%CLASSPATH%
set CLASSPATH=./lib/bouncycastle-jdk15on-153/*;%CLASSPATH%
set CLASSPATH=./lib/commons-logging-1.2/*;%CLASSPATH%
set CLASSPATH=./lib/pdfbox-2.0.0/*;%CLASSPATH%
set CLASSPATH=./lib/pdfunit-2016.05/*;%CLASSPATH%

set TOOL=com.pdfunit.tools.ExtractJavaScript
set OUT_DIR=./tmp
set IN_FILE=javaScriptForFields.pdf
set PASSWD=

java  %TOOL%  %IN_FILE%  %OUT_DIR%  %PASSWD%
endlocal

Eingabe

Die Datei javaScriptForFields.pdf, die schon im vorhergehenden Kapitel 9.4: „Feldeigenschaften nach XML extrahieren“ als Beispiel herhalten musste, enthält für die Felder nameField, ageField und comment auch JavaScript.

Innerhalb des Java-Programms, mit dem das PDF-Dokument erstellt wird, sieht der JavaScript-Code für das Feld ageField so aus:

String scriptCodeCheckAge = "var ageField = this.getField('ageField');"
       + "ageField.setAction('Validate','checkAge()');"
       + ""
       + "function checkAge() {"
       + "  if(event.value < 12) {"
       + "    app.alert('Warning! Applicant\\'s age can not be younger than 12.');"
       + "    event.value = 12;"
       + "  }"
       + "}"
;

Ausgabe

Die erstellte Datei heißt _javascript_javaScriptForFields.out.txt und enthält den folgenden JavaScript-Code:

var nameField = this.getField('nameField');nameField.setAction('Keystroke', ...
var ageField = ...;function checkAge() {  if(event.value < 12) {...
var commentField = this.getField('commentField');commentField.setAction(...

Sie können die Datei gerne neu formatieren, damit sie besser lesbar wird. Hinzugefügte Whitespaces beeinflussen einen PDFUnit-Test nicht.

Hinweis

JavaScript wird auch für die Umsetzung der Dokumenten-Aktionen OPEN, CLOSE, PRINT und SAVE verwendet. Das hier beschriebene Hilfsprogramm extrahiert aber kein JavaScript, das an Aktionen gebunden ist. Dafür wird es in zukünftigen Releases ein neues Hilfsprogramm geben.