von Jaffet » Mo 4. Jan 2021, 18:18
Hallo Latex-Community,
ich habe bei der Auswertung von Formularfeldern mit Javascript fortschritte gemacht, wie das Minimalbeispiel zeigt.
\documentclass[12pt,a4paper,oneside,ngerman,addpoints]{exam}
%Listening Package
\usepackage{listings}
%Formularelemente
\usepackage{hyperref}
%Javascript
\usepackage{insdljs}
%Farbpaket
\usepackage{xcolor}
\begin{insDLJS}[]{test}{test}
function check1() {
var field1 = this.getField("field1");
if(field1.value == "1"){
field1.fillColor = color.green;
}else{
field1.fillColor = color.red;
}
}
\end{insDLJS}
\begin{document}
\begin{Form}
\textbf{Aufgaben}
\begin{questions}
\question Vervollständigen Sie das abgebildete Programm, sodass es während der Laufzeit alle natürlichen Zahlen zwischen 1 und 10 in aufsteigender Reihenfolge ausgibt. Geben Sie Ihre Lösung ohne Leerzeichen an.\\
\begin{lstlisting}[basicstyle=\small\rmfamily, numbers=left, stepnumber=1,xleftmargin=15pt,escapeinside={(!}{!)}]
for(int i=(!\TextField[name=field1,width=0.5cm,bordercolor=black]{}!); i<11;i++){
Console.WriteLine("{0}",i);
}
\end{lstlisting}
\begin{minipage}[t]{0.3\textwidth}
\fboxsep=0pt
\colorbox{gray}{%
\PushButton[
name=btn1,
onclick={check1();},
borderwidth=0.5pt,
bordercolor=black,
]{\textcolor{black}{\strut überprüfen}}}
\end{minipage}
\begin{minipage}[t]{0.3\textwidth}
\TextField[name=info_field1,width=10cm, value=Die Eingabe ist korrekt, hidden=true]{}
\end{minipage}
\end{questions}
\end{Form}
\end{document}
Wenn man das PDF-Dokument mit dem Adobe Acrobat Reader öffnet, einen Wert in die Code-Zeile 1 eingibt und danach auf prüfen klickt, wird das Eingabefeld rot markiert, falls die Eingabe falsch ist und grün, wenn sie korrekt ist.
Geholfen hat mir dabei der Guid https://www.adobe.com/content/dam/acom/ ... _guide.pdf.
Dort steht unter anderem, dass man auf die Hintergrundfarbe eines Formularelementes über die fillColor-Eigenschaft zugreift:
var field4 = this.getField("field4");
field4.fillColor = color.green;
Etwas enttäuscht bin ich darüber, dass das alles nur unter Adobe Acrobat Reader DC funktioniert. Wenn ich die PDF z. B. mit Firefox, Chrom oder einem anderen PDF-Reader öffne passiert nichts mehr. Kein Javascript, oder muss man das irgendwo aktivieren?
Vielleicht hat jemand hierzu noch Ideen oder Lösungsvorschläge.
Viele Grüße
Hallo Latex-Community,
ich habe bei der Auswertung von Formularfeldern mit Javascript fortschritte gemacht, wie das Minimalbeispiel zeigt.
[code]\documentclass[12pt,a4paper,oneside,ngerman,addpoints]{exam}
%Listening Package
\usepackage{listings}
%Formularelemente
\usepackage{hyperref}
%Javascript
\usepackage{insdljs}
%Farbpaket
\usepackage{xcolor}
\begin{insDLJS}[]{test}{test}
function check1() {
var field1 = this.getField("field1");
if(field1.value == "1"){
field1.fillColor = color.green;
}else{
field1.fillColor = color.red;
}
}
\end{insDLJS}
\begin{document}
\begin{Form}
\textbf{Aufgaben}
\begin{questions}
\question Vervollständigen Sie das abgebildete Programm, sodass es während der Laufzeit alle natürlichen Zahlen zwischen 1 und 10 in aufsteigender Reihenfolge ausgibt. Geben Sie Ihre Lösung ohne Leerzeichen an.\\
\begin{lstlisting}[basicstyle=\small\rmfamily, numbers=left, stepnumber=1,xleftmargin=15pt,escapeinside={(!}{!)}]
for(int i=(!\TextField[name=field1,width=0.5cm,bordercolor=black]{}!); i<11;i++){
Console.WriteLine("{0}",i);
}
\end{lstlisting}
\begin{minipage}[t]{0.3\textwidth}
\fboxsep=0pt
\colorbox{gray}{%
\PushButton[
name=btn1,
onclick={check1();},
borderwidth=0.5pt,
bordercolor=black,
]{\textcolor{black}{\strut überprüfen}}}
\end{minipage}
\begin{minipage}[t]{0.3\textwidth}
\TextField[name=info_field1,width=10cm, value=Die Eingabe ist korrekt, hidden=true]{}
\end{minipage}
\end{questions}
\end{Form}
\end{document}[/code]
Wenn man das PDF-Dokument mit dem Adobe Acrobat Reader öffnet, einen Wert in die Code-Zeile 1 eingibt und danach auf prüfen klickt, wird das Eingabefeld rot markiert, falls die Eingabe falsch ist und grün, wenn sie korrekt ist.
Geholfen hat mir dabei der Guid [url]https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_developer_guide.pdf[/url].
Dort steht unter anderem, dass man auf die Hintergrundfarbe eines Formularelementes über die fillColor-Eigenschaft zugreift:
[code]
var field4 = this.getField("field4");
field4.fillColor = color.green;
[/code]
Etwas enttäuscht bin ich darüber, dass das alles nur unter Adobe Acrobat Reader DC funktioniert. Wenn ich die PDF z. B. mit Firefox, Chrom oder einem anderen PDF-Reader öffne passiert nichts mehr. Kein Javascript, oder muss man das irgendwo aktivieren?
Vielleicht hat jemand hierzu noch Ideen oder Lösungsvorschläge.
Viele Grüße