Seite 1 von 1

JavaScript in Anweisung in Datei auslagern

Verfasst: Di 13. Apr 2021, 09:39
von techM

Hallo,
ist es möglich z.B. JavaScript aus der Anweisung in eine separate Datei auszulagern?

\documentclass{scrartcl}
\usepackage{hyperref}

\begin{document}
\begin{Form}

\TextField[name=textfeld, calculate={}]{Textfeld}
% \TextField[name=textfeld, calculate={\input{beispiel.js}}]{Textfeld}

\end{Form}
\end{document}

Re: JavaScript in Anweisung in Datei auslagern

Verfasst: Di 13. Apr 2021, 09:53
von gast.

Deine Frage ist leider nicht so ganz eindeutig.

Falls du bezwecken willst, dass der JavaScript-Code zur Laufzeit, also erst von PDF-Viewer nachgeladen wird, sei darauf hingewiesen, dass man dann das Nachladen in JavaScript selbst implementieren müsste, ich dem aber keine großen Erfolgschancen beimesse, weil Adobe aus Sicherheitsgründen JavaScript in PDFs mehr und mehr einschränkt. Bei anderen Viewern sehe ich ohnehin schwarz.

Wenn er zur Compilierzeit, also während des LaTeX-Laufs nachgeladen werden soll, könntest du ihn beispielsweise verbatim in ein Makro laden und dieses dann verwenden. Ich kann das aber leider nicht testen, da ich derzeit über keinen passenden Viewer verfüge, der calculate überhaupt ausführen würde.


Re: JavaScript in Anweisung in Datei auslagern

Verfasst: Di 13. Apr 2021, 10:39
von techM

Ich möchte gerne \input{} in einer Anweisung benutzen bzw. suche ich nach einer Alternative dafür, weil das nicht funktioniert. Keine IDE die ich kenne, kommt beim "highlighting" bzw. beim Formatieren mit .tex und .js in einem Dokument zurecht.

https://www.adobe.com/content/dam/acom/ ... erence.pdf


Re: JavaScript in Anweisung in Datei auslagern

Verfasst: Di 13. Apr 2021, 15:49
von u_fischer

Nun, wie schon gesagt: du kannst ein Macro verwenden. Das insdljs Paket (Teile des acrotex bundle) bietet auch ein paar ausgefeiltere Befehle um Code zu speichern, inklusiver der Möglichkeit Document Level JavaScript einzubinden. Die Definitionen kannst du dann natürlich auch in einer externen Datei auslagern und per \input laden.

\documentclass{article}
\usepackage{hyperref}
\begin{document}
\Form

% dies kann in externer Datei sein:
\newcommand\testJS{var a =100; var b= 200; event.value = a/b;}
%

\TextField[name=textfeld, calculate={\testJS}]{Textfeld}
\end{document}

Re: JavaScript in Anweisung in Datei auslagern

Verfasst: Di 13. Apr 2021, 17:52
von techM

Erstmal Danke für die Antworten.

Also könnte ich JavaScript nur in einer .tex-Datei auslagern, die mindestens ein \newcommand\testJS{...} enthält?


Re: JavaScript in Anweisung in Datei auslagern

Verfasst: Mi 14. Apr 2021, 15:32
von KOMA

»Mindestens« ist nicht zwingend. Man kann auch nur den JavaScript-Code in der externen Datei haben. Wie gast bereits erwähnt hat, muss man dann eben die Datei zunächst verbatim einlesen, beispielsweise:

% Die hier geschriebene Datei kann natürlich auch bereits vorhanden sein.
% Ich mache das hier eigentlich nur, um ein vollständiges Minimalbeispiel
% zu erhalten.
\begin{filecontents*}{\jobname.js}
var a =100; 
var b= 200; 
event.value = a/b;
\end{filecontents*}
\documentclass{article}
\usepackage{hyperref}
\makeatletter
\newread\@jsfile
\newcommand*{\@jsline}{}
\newcommand*{\readjsfileto}[2]{%
  \let\reserved@a\@empty
  \begingroup
    \endlinechar=-1% Zeilenenden ignorieren/wegwerfen
    \immediate\openin\@jsfile{#1}%
    \@whilesw\unless\ifeof\@jsfile\fi{%
      \immediate\readline\@jsfile to \@jsline
      \expandafter\g@addto@macro\expandafter\reserved@a\expandafter{\@jsline\space}%
    }%
    \immediate\closein\@jsfile
  \endgroup
  \let#2\reserved@a
}
\makeatother
\begin{document}
\Form

% dies kann in externer Datei sein:

\readjsfileto{\jobname.js}{\jsFile}
\TextField[name=textfeld, calculate={\jsFile}]{Textfeld}

\jsFile
\end{document}

Wobei ich absichtlich, die Zeilenenden weggeworfen habe. Man kann also in dem Fall keine //-Kommentare in der JavaScript-Datei verwenden! Das Lesen wurde so aber deutlich vereinfacht. Dafür habe ich aber jeweils am Zeilenende ein space-Token eingefügt. Ob das sinnvoll ist, sei dahin gestellt. Ob es auch mit Zeilenenden funktionieren würde, kann ich nicht sagen, weil auch ich keinen PDF-Viewer habe, der das korrekt verarbeiten würde. JavaScript in PDFs mit etwas anderem als Original-Adobe-Software ist so eine Sache … :roll:


Re: JavaScript in Anweisung in Datei auslagern

Verfasst: Do 15. Apr 2021, 13:25
von techM

Ok. Ich hatte das "verbatim einlesen" nicht verstanden. Nochmal vielen Dank für die Antworten.