JavaScript in Anweisung in Datei auslagern Thema ist als GELÖST markiert

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


techM
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Di 5. Nov 2019, 12:47

JavaScript in Anweisung in Datei auslagern

Beitrag 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}

gast.

Re: JavaScript in Anweisung in Datei auslagern

Beitrag 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.


techM
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Di 5. Nov 2019, 12:47

Re: JavaScript in Anweisung in Datei auslagern

Beitrag 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


Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Re: JavaScript in Anweisung in Datei auslagern

Beitrag 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}

techM
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Di 5. Nov 2019, 12:47

Re: JavaScript in Anweisung in Datei auslagern

Beitrag 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?


Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: JavaScript in Anweisung in Datei auslagern

Beitrag 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:


techM
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Di 5. Nov 2019, 12:47

Re: JavaScript in Anweisung in Datei auslagern

Beitrag von techM »

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


Antworten