From 892abc5ee931e5dd22dad90d07844ca5ad6cc6ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20St=C3=B6hr?= Date: Mon, 27 Apr 2015 02:56:25 +0200 Subject: [PATCH] pdfform.module: new module to create PDF forms - PDF-form.lyx: example file describing the module No special package is required since the PDF form features are provided by hyperref. --- lib/Makefile.am | 2 + lib/examples/PDF-form.lyx | 2342 ++++++++++++++++++++++++++++++++++++ lib/layouts/pdfform.module | 176 +++ 3 files changed, 2520 insertions(+) create mode 100644 lib/examples/PDF-form.lyx create mode 100644 lib/layouts/pdfform.module diff --git a/lib/Makefile.am b/lib/Makefile.am index 68bbd9cb11..f989bb7d66 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -328,6 +328,7 @@ dist_examples_DATA = \ examples/MultilingualCaptions.lyx \ examples/noweb2lyx.lyx \ examples/PDF-comment.lyx \ + examples/PDF-form.lyx \ examples/powerdot-example.lyx \ examples/recipebook.lyx \ examples/R-S-statements.lyx \ @@ -2088,6 +2089,7 @@ dist_layouts_DATA =\ layouts/numrevtex.inc \ layouts/paper.layout \ layouts/pdfcomment.module \ + layouts/pdfform.module \ layouts/powerdot.layout \ layouts/RJournal.layout \ layouts/recipebook.layout \ diff --git a/lib/examples/PDF-form.lyx b/lib/examples/PDF-form.lyx new file mode 100644 index 0000000000..4bc159c21e --- /dev/null +++ b/lib/examples/PDF-form.lyx @@ -0,0 +1,2342 @@ +#LyX 2.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 474 +\begin_document +\begin_header +\textclass scrartcl +\begin_preamble +% to be able to use custom colors +\usepackage[svgnames,rgb]{xcolor} + +\usepackage[pdftex]{insdljs} +\pdfcatalog{/AA \the\pdflastobj\space 0 R} +\begin{insDLJS}[exaaae]{exaaae}{JavaScript} + function validateTime(){ + this.delay = true; + if((event.value == "u") || (event.value == "unlimited")) { + this.getField("from").display = display.hidden; + this.getField("to").display = display.hidden; + } else { + this.getField("from").display = display.visible; + this.getField("to").display = display.visible; + this.getField("from").setFocus(); + } + this.delay = false; + } +\end{insDLJS} + +% if pdflatex is used +\usepackage{ifpdf} +\ifpdf + +% set fonts for nicer pdf view +\IfFileExists{lmodern.sty} + {\usepackage{lmodern}}{} + +\fi % end if pdflatex is used +\end_preamble +\options BCOR8mm,pagesize +\use_default_options false +\begin_modules +pdfform +\end_modules +\maintain_unincluded_children false +\language english +\language_package default +\inputencoding auto +\fontencoding global +\font_roman default +\font_sans default +\font_typewriter default +\font_math auto +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command bibtex +\index_command default +\paperfontsize 12 +\spacing single +\use_hyperref true +\pdf_title "Description of the module pdfcomment" +\pdf_author "Uwe Stöhr" +\pdf_subject "PDF form" +\pdf_keywords "LyX, PDF forms, hyperref" +\pdf_bookmarks true +\pdf_bookmarksnumbered true +\pdf_bookmarksopen true +\pdf_bookmarksopenlevel 2 +\pdf_breaklinks false +\pdf_pdfborder false +\pdf_colorlinks false +\pdf_backref false +\pdf_pdfusetitle false +\pdf_quoted_options "linkcolor=black, citecolor=black, urlcolor=blue, filecolor=blue, pdfpagelayout=OneColumn, pdfnewwindow=true, pdfstartview=XYZ, plainpages=false, urlbordercolor={1 0 0}" +\papersize a4paper +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 0 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 0 +\use_package stmaryrd 0 +\use_package undertilde 0 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date true +\justification true +\use_refstyle 0 +\notefontcolor #0000ff +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 2 +\paragraph_separation skip +\defskip medskip +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Begin PDF Form +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +action=mailto:forms@lyx.test?subject={The submitted PDF form},method=post +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Title +Description of the module PDF Form +\end_layout + +\begin_layout Author +Uwe Stöhr +\end_layout + +\begin_layout Standard +By loading the module PDF +\begin_inset space ~ +\end_inset + +Form the whole document or a part of it can be made a PDF form. + You can add all possible form elements like text fields buttons etc. + This document describes how this is done. +\end_layout + +\begin_layout Section +Preparation +\begin_inset CommandInset label +LatexCommand label +name "sec:Preparation" + +\end_inset + + +\end_layout + +\begin_layout Standard +At first load the module PDF +\begin_inset space ~ +\end_inset + +Form in the document settings of your file. + To make the whole document a form, insert the environment +\family sans + Begin +\begin_inset space ~ +\end_inset + +PDF +\begin_inset space ~ +\end_inset + +Form +\family default + from LyX's dropdown menu at the beginning of the document. + If only a part of the document should be a form, add +\family sans +Begin +\begin_inset space ~ +\end_inset + +PDF +\begin_inset space ~ +\end_inset + +Form +\family default + at the position where the form should start. +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + It is only possible to have one form in a PDF file! +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +If the form data should be submitted to a server or the like, then you must + specify the URL to where it should be submitted as parameter of the +\family sans +Begin +\begin_inset space ~ +\end_inset + +PDF +\begin_inset space ~ +\end_inset + +Form +\family default + environment. + This is done by using the menu +\family sans +Insert\SpecialChar \menuseparator +PDF +\begin_inset space ~ +\end_inset + +form +\begin_inset space ~ +\end_inset + +parameters +\family default +. + For example in this document the following was inserted to the parameter + inset: +\begin_inset Newline newline +\end_inset + + +\series bold +action=mailto:forms@lyx.test?subject={The submitted PDF form},method=post +\series default + +\begin_inset Newline newline +\end_inset + +This sends the form data as email to +\emph on +forms@lyx.test +\emph default +. + the email subject is +\begin_inset Quotes eld +\end_inset + +The submitted PDF form +\begin_inset Quotes erd +\end_inset + + and the HTML method is +\series bold +post +\series default +. + (The other possible method would be +\series bold +get +\series default +.) +\end_layout + +\begin_layout Section +Form fields +\end_layout + +\begin_layout Standard +There are 6 +\begin_inset space ~ +\end_inset + +possible types of fields in a PDF form: +\end_layout + +\begin_layout Subsection +Text field +\end_layout + +\begin_layout Standard +A text field is added by inserting the custom inset +\family sans +TextField +\family default + using the menu +\family sans +Insert\SpecialChar \menuseparator +Custom +\begin_inset space ~ +\end_inset + +Insets +\family default +. + Write inside the inset the label for the text field that will be printed + in the PDF output before the field. + Here is an example: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex TextField +status open + +\begin_layout Plain Layout + +Enter your name here: +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +All form fields can be customized by adding a parameter inset to them. + To do this, set the cursor into the field inset and use the menu +\family sans +Insert\SpecialChar \menuseparator +PDF +\begin_inset space ~ +\end_inset + +form +\begin_inset space ~ +\end_inset + +parameters +\family default +. +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + All braces and brackets in form parameters must be inserted as TeX code! +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Here is a customized text field with a width of 5 +\begin_inset space \thinspace{} +\end_inset + +cm and a proposed content: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex TextField +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=name, width=5cm, bordercolor={0.5 1 0.5}, borderstyle=U, value={Testman} +\end_layout + +\end_inset + +Enter your name here: +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + It is highly recommended to use a uniform layout of all fields in your + form. + See sec. +\begin_inset space \thinspace{} +\end_inset + + +\begin_inset CommandInset ref +LatexCommand ref +reference "sec:Form-field-and" + +\end_inset + + for how this is done. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Check box +\end_layout + +\begin_layout Standard +A check box is added by inserting the custom inset +\family sans +CheckBox +\family default +. + Write inside the inset the label for the box. + Here is an example: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex CheckBox +status open + +\begin_layout Plain Layout + +Are you older than 18 years? +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Choice menu +\end_layout + +\begin_layout Standard +A choice menu is added by inserting the custom inset +\family sans +ChoiceMenu +\family default +. + The label is inserted into the +\family sans +Label +\family default + inset. + The choices are inserted to the inset as comma-separated list. + There are 3 +\begin_inset space ~ +\end_inset + +choice menu types: +\end_layout + +\begin_layout Description +Radio Only one choice can be selected +\end_layout + +\begin_layout Description +Combo The choices are listed in a combo box (dropdown list) but the user + is allowed to choose something that is not in the predefined list. +\end_layout + +\begin_layout Description +Popdown All choices are listed below each other. + It the filed is not high enough a scroll bar is automatically added to + the field. +\begin_inset Newline newline +\end_inset + + +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + For the popdown type you must also specify a field name! For example write + +\series bold +popdown, name=country +\series default + (where +\series bold +country +\series default + is the field name). +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +To determine the choice menu type, set the cursor into the inset and use + the menu +\family sans +Insert\SpecialChar \menuseparator +PDF +\begin_inset space ~ +\end_inset + +form +\begin_inset space ~ +\end_inset + +parameters +\family default +. + There insert the parameter +\series bold +radio +\series default +, +\series bold +combo +\series default + or +\series bold +popdown +\series default +. +\end_layout + +\begin_layout Standard +Here is an example for the radio type: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +radio +\end_layout + +\end_inset + +male=m, female=f +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Sex: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Here is an example for the combo type: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +combo +\end_layout + +\end_inset + +Albania=Al, Armenia=Ar, Azerbaidschan=Az +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Country: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Here is an example for the popdown type: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +popdown, name=country +\end_layout + +\end_inset + +Albania=Al, Armenia=Ar, Azerbaidschan=Az +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Country: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +It is recommended to add a short name for every choice to be able to access + them and to know which one was chosen by the user- This is done by adding + +\series bold +=name +\series default + behind each choice. + For example the radio type example contains this choice list: +\series bold + male=m, female=f +\series default +. + If the user chose +\begin_inset Quotes eld +\end_inset + +male +\begin_inset Quotes erd +\end_inset + + you know that he chose the choice +\begin_inset Quotes eld +\end_inset + +m +\begin_inset Quotes erd +\end_inset + +. + By specifying names you can also preset/propose e.g. +\begin_inset space \space{} +\end_inset + +the choice +\begin_inset Quotes eld +\end_inset + +male +\begin_inset Quotes erd +\end_inset + + by adding the parameter +\series bold +default=m +\series default +. + Here is an example: +\end_layout + +\begin_layout Standard +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +radio, name=sex, default=m +\end_layout + +\end_inset + +male=m, female=f +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Sex: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Description +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + Due to a bug in the LaTeX package +\series bold +hyperref +\series default + it is currently only possible the set the first choice as default. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Push button +\end_layout + +\begin_layout Standard +A push button is added by inserting the custom inset +\family sans +PushButton +\family default +. + Write inside the inset the label for the button. + Here is an example: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex PushButton +status open + +\begin_layout Plain Layout + +Don't click on this button or your fridge will be destroyed!!! +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The action that is triggered by pressing the button is specified by JavaScript + code. + To specify it, set the cursor into the inset and use the menu +\family sans +Insert\SpecialChar \menuseparator +PDF +\begin_inset space ~ +\end_inset + +form +\begin_inset space ~ +\end_inset + +parameters +\family default +. + There insert the parameter +\series bold +onclick={} +\series default + and write the JavaScript code between the braces. +\end_layout + +\begin_layout Standard +\begin_inset Flex PushButton +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +onclick={app.alert("What the hell? Now you destroyed your fridge. + Congratulations.")} +\end_layout + +\end_inset + +Don't click on this button or your fridge will be destroyed!!! +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +For info about JavaScript, see its documentation, +\begin_inset CommandInset citation +LatexCommand cite +key "JavaScript" + +\end_inset + +. +\end_layout + +\begin_layout Standard +A common usage for pus buttons is to open a weblink. + Such a button is created by inserting the command +\series bold + +\backslash +href +\series default + into the button inset. + +\series bold + +\backslash +href +\series default + is used in the scheme +\begin_inset Newline newline +\end_inset + + +\series bold + +\backslash +href{link target}{text} +\end_layout + +\begin_layout Standard +In the following button this code was used: +\begin_inset Newline newline +\end_inset + + +\series bold + +\backslash +href{http://wiki.lyx.org}{Information how to fill out this form} +\end_layout + +\begin_layout Standard +\begin_inset Flex PushButton +status open + +\begin_layout Plain Layout + + +\backslash +href{http://wiki.lyx.org}{Information how to fill out this form} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +To get rid of the frame for weblinks add this to the additional options + in the document settings under +\family sans +PDF properties +\family default +: +\end_layout + +\begin_layout Standard + +\series bold +urlbordercolor={1 0 0} +\end_layout + +\begin_layout Standard +if your push button border color is red (the default), otherwise use the + same color definition as for your push button border color. +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Subsection +Submit button +\end_layout + +\begin_layout Standard +A submit button is used to submit the form data to a server. + It is added by inserting the custom inset +\family sans +SubmitButton +\family default +. + Write inside the inset the label for the button. + Here is an example: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex SubmitButton +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=submit1 +\end_layout + +\end_inset + +Send your data via email +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + You can only use a submit button if you specified the submit method and + target in the PDF form environment options! See sec. +\begin_inset space \thinspace{} +\end_inset + + +\begin_inset CommandInset ref +LatexCommand ref +reference "sec:Preparation" + +\end_inset + + for the description. + If there are no specifications you will get LaTeX errors! +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + If you have more than one submit button in your document you must specify + a name for each of them to avoid LaTeX errors! For example write +\series bold +name=submit1 +\series default + (where +\series bold +submit1 +\series default + is the button name). +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Reset button +\end_layout + +\begin_layout Standard +A reset button is used to reset all form fields to the initial state. + It is added by inserting the custom inset +\family sans +ResetButton +\family default +. + Write inside the inset the label for the button. + Here is an example: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex ResetButton +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=reset1 +\end_layout + +\end_inset + +Reset the form +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + If you have more than one reset button in your document you must specify + a name for each of them to avoid LaTeX errors! For example write +\series bold +name=submit1 +\series default + (where +\series bold +submit1 +\series default + is the button name). +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +PDF viewer action buttons +\end_layout + +\begin_layout Standard +One often needs basic actions to be done by the PDF viewer program. + For example to print the form. + Such PDF program-specific actions can be triggered by adding inserting + the custom inset +\family sans +PDFAction +\family default +. + The PDF viewer programs +\emph on +Acrobat +\emph default + and +\emph on +Adobe Reader +\emph default + can handle all possible actions while other PDF viewers might only support + some of them. + However, all PDF viewer programs support the basic things like printing, + save +\begin_inset space ~ +\end_inset + +as, view in fullscreen etc.. +\end_layout + +\begin_layout Standard +To specify the action insert its name to the +\family sans +Action +\family default + inset. + A list with possible actions can be found in sec. +\begin_inset space \thinspace{} +\end_inset + +5 +\begin_inset Quotes eld +\end_inset + +Acrobat-specific behavior +\begin_inset Quotes erd +\end_inset + + of the documentation of the LaTeX package +\series bold +hyperref +\series default +, +\begin_inset CommandInset citation +LatexCommand cite +key "hyperref" + +\end_inset + +. +\end_layout + +\begin_layout Standard +Here are some examples: +\end_layout + +\begin_layout Description +Printing: +\begin_inset Flex PDFAction +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +Print +\end_layout + +\end_inset + +Print the document +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Description +Save +\begin_inset space ~ +\end_inset + +as: +\begin_inset Flex PDFAction +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +SaveAs +\end_layout + +\end_inset + +Save document as +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Description +View +\begin_inset space ~ +\end_inset + +in +\begin_inset space ~ +\end_inset + +fullscreen: +\begin_inset Flex PDFAction +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +FullScreen +\end_layout + +\end_inset + +View the form in fullscreen +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Form field and button customization +\begin_inset CommandInset label +LatexCommand label +name "sec:Form-field-and" + +\end_inset + + +\end_layout + +\begin_layout Standard +Since all form elements should look uniform, one can determine their layout + using the following styles: +\end_layout + +\begin_layout Description +Text +\begin_inset space ~ +\end_inset + +Field +\begin_inset space ~ +\end_inset + +Style +\end_layout + +\begin_layout Description +Check +\begin_inset space ~ +\end_inset + +Box +\begin_inset space ~ +\end_inset + +Style +\end_layout + +\begin_layout Description +List +\begin_inset space ~ +\end_inset + +Box +\begin_inset space ~ +\end_inset + +Style affects all choice menu types +\end_layout + +\begin_layout Description +Combo +\begin_inset space ~ +\end_inset + +Box +\begin_inset space ~ +\end_inset + +Style affects only the combo box style +\end_layout + +\begin_layout Description +Popdown +\begin_inset space ~ +\end_inset + +Box +\begin_inset space ~ +\end_inset + +Style affects only the popdown box style +\end_layout + +\begin_layout Description +Radio +\begin_inset space ~ +\end_inset + +Box +\begin_inset space ~ +\end_inset + +Style affects only the radio box style +\end_layout + +\begin_layout Description +Push +\begin_inset space ~ +\end_inset + +Button +\begin_inset space ~ +\end_inset + +Style +\end_layout + +\begin_layout Description +Submit +\begin_inset space ~ +\end_inset + +Button +\begin_inset space ~ +\end_inset + +Style +\end_layout + +\begin_layout Description +Reset +\begin_inset space ~ +\end_inset + +Button +\begin_inset space ~ +\end_inset + +Style +\end_layout + +\begin_layout Text Field Style + +\end_layout + +\begin_layout Standard +The content of the styles is a comma-separated list of parameters. + The possible parameters are listed in sec. +\begin_inset space \thinspace{} +\end_inset + +6.2 +\begin_inset Quotes eld +\end_inset + +Forms optional parameters +\begin_inset Quotes erd +\end_inset + + of the documentation of the LaTeX package +\series bold +hyperref +\series default +, +\begin_inset CommandInset citation +LatexCommand cite +key "hyperref" + +\end_inset + +. + It is important that the parameter print is always part of the definition, + otherwise the fields won't appear in the PDF output. + The defined style is applied to all fields following the definition. +\end_layout + +\begin_layout Subsubsection* +Here are some examples: +\end_layout + +\begin_layout Text Field Style + +print, bordercolor={red},borderstyle=U, backgroundcolor=lightgray, color=lime +\end_layout + +\begin_layout Check Box Style + +print, borderstyle=S, checkboxsymbol= +\backslash +ding{55} +\end_layout + +\begin_layout Combo Box Style + +print, bordercolor={0.33 0.66 0.33}, borderstyle=D +\end_layout + +\begin_layout Popdown Box Style + +print, menulength=2 +\end_layout + +\begin_layout Radio Box Style + +print, borderstyle=I, radiosymbol=6 +\end_layout + +\begin_layout Push Button Style + +print, borderstyle=B, bordercolor={lime} +\end_layout + +\begin_layout Submit Button Style + +print, borderwidth=0 +\end_layout + +\begin_layout Reset Button Style + +print, bordercolor={lime} +\end_layout + +\begin_layout Standard +Text field with gray background, lime text color and a red border only below + the field: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex TextField +status open + +\begin_layout Plain Layout + +Enter your name here: +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The +\series bold +borderstyle +\series default + can be +\series bold +U +\series default + (underlined), +\series bold +S +\series default + (solid), +\series bold +D +\series default + (dashed), +\series bold +B +\series default + (bevel), or +\series bold +I +\series default + (inverted bevel). +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note +\series default + that the +\series bold +value +\series default + has only an effect for text fields if a +\series bold +name +\series default + was specified. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Check box with normal border and symbol +\backslash +ding{55}: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex CheckBox +status open + +\begin_layout Plain Layout + +Are you older than 18 years? +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The symbol is either specified as number or with the command +\begin_inset Newline newline +\end_inset + + +\series bold + +\backslash +ding{number} +\series default + +\begin_inset Newline newline +\end_inset + +where +\series bold +number +\series default + is one of the possible numbers listed in Table +\begin_inset space ~ +\end_inset + +2 of +\begin_inset CommandInset citation +LatexCommand cite +key "pifont" + +\end_inset + +. +\end_layout + +\begin_layout Standard +Combo box with dashed, colored border: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +combo, default=Az +\end_layout + +\end_inset + +Albania=Al, Armenia=Ar, Azerbaidschan=Az +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Country: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Popdown box where only 2 +\begin_inset space ~ +\end_inset + +entries are shown and where the last entry is preselected: +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +popdown, name=country2, value=Az +\end_layout + +\end_inset + +Albania=Al, Armenia=Ar, Azerbaidschan=Az +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Country: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note +\series default + that the +\series bold +borderstyle B +\series default + and +\series bold +I +\series default + and also +\series bold +color +\series default + has no effect for popdown boxes. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Radio box with inverted bevel border and symbol number +\begin_inset space ~ +\end_inset + +6 as checkmark: +\begin_inset Newline newline +\end_inset + + +\begin_inset Newline newline +\end_inset + + +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +radio +\end_layout + +\end_inset + +male=m, female=f +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Sex: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Push button with a bevel border and colored text: +\end_layout + +\begin_layout Standard +\begin_inset Flex PushButton +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +onclick={app.alert("Why do you click this?")} +\end_layout + +\end_inset + + +\backslash +colorbox{lime}{ +\backslash +textcolor{red}{Don't click on this button or your fridge will be destroyed!!!}} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note +\series default + that the +\series bold +backgroundcolor +\series default + and +\series bold + color +\series default + has no effect for push, submit and reset buttons. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +As workaround use the command +\series bold + +\backslash +colorbox +\series default + as described in sec. +\begin_inset space \thinspace{} +\end_inset + + 5.7 +\begin_inset Quotes eld +\end_inset + +Colored Boxes +\begin_inset Quotes erd +\end_inset + + in LyX's +\emph on +EmbeddedObjects +\emph default + manual and +\series bold + +\backslash +textcolor +\series default + that is used is used in the scheme +\begin_inset Newline newline +\end_inset + + +\series bold + +\backslash +textcolor{color}{characters to color} +\series default + +\begin_inset Newline newline +\end_inset + +In the button above this code was used: +\begin_inset Newline newline +\end_inset + + +\family sans + +\backslash +colorbox{lime}{ +\backslash +textcolor{red}{Don't click on this button or your fridge will be destroyed!!!}} +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note +\series default + that the +\series bold +height +\series default +has no effect for push, submit and reset buttons. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +As workaround use +\series bold + +\backslash +raisebox +\series default + as described in sec. +\begin_inset space \thinspace{} +\end_inset + + 5.6.2 +\begin_inset Quotes eld +\end_inset + +Vertical Alignment +\begin_inset Quotes erd +\end_inset + + in LyX's +\emph on +EmbeddedObjects +\emph default + manual. + In the button below this code was used: +\begin_inset Newline newline +\end_inset + + +\family sans + +\backslash +raisebox{-0.8cm}{} +\backslash +raisebox{1cm}{}Send your data via mail +\end_layout + +\begin_layout Standard +\begin_inset Note Greyedout +status open + +\begin_layout Plain Layout + +\series bold +Note +\series default + that the +\series bold +width +\series default +has no effect for push, submit and reset buttons. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +As workaround use +\series bold + +\backslash +makebox +\series default + as described in sec. +\begin_inset space \thinspace{} +\end_inset + + 5.6.2 +\begin_inset Quotes eld +\end_inset + +Vertical Alignment +\begin_inset Quotes erd +\end_inset + + in LyX's +\emph on +EmbeddedObjects +\emph default + manual. + In the reset button below this code was used: +\begin_inset Newline newline +\end_inset + + +\family sans + +\backslash +makebox[7cm]{Reset the form} +\end_layout + +\begin_layout Standard +\begin_inset Flex SubmitButton +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=submit2 +\end_layout + +\end_inset + + +\backslash +colorbox{cyan}{ +\backslash +raisebox{-0.8cm}{} +\backslash +raisebox{1cm}{}Send your data via mail} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Flex ResetButton +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=reset2 +\end_layout + +\end_inset + + +\backslash +makebox[7cm]{Reset the form} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Dynamic form fields +\end_layout + +\begin_layout Standard +It is also possible to have dynamic form fields. + This means that depending on the actions of the user fields can (dis)appear + or change their appearance. + To use this feature, add these lines to your document preamble: +\end_layout + +\begin_layout Standard + +\series bold + +\backslash +usepackage[pdftex]{insdljs} +\begin_inset Newline newline +\end_inset + + +\backslash +pdfcatalog{/AA +\backslash +the +\backslash +pdflastobj +\backslash +space 0 R} +\end_layout + +\begin_layout Standard +Then ad the necessary JavaScript code to your preamble or as TeX code to + your document. + For info about JavaScript, see its documentation, +\begin_inset CommandInset citation +LatexCommand cite +key "JavaScript" + +\end_inset + +. +\end_layout + +\begin_layout Standard +In the following example this code was used: +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=TeX" +inline false +status open + +\begin_layout Plain Layout + + +\backslash +begin{insDLJS}[exaaae]{exaaae}{JavaScript} +\end_layout + +\begin_layout Plain Layout + + function validateTime(){ +\end_layout + +\begin_layout Plain Layout + + this.delay = true; +\end_layout + +\begin_layout Plain Layout + + if((event.value == "u") || (event.value == "unlimited")) { +\end_layout + +\begin_layout Plain Layout + + this.getField("from").display = display.hidden; +\end_layout + +\begin_layout Plain Layout + + this.getField("to").display = display.hidden; +\end_layout + +\begin_layout Plain Layout + + } else { +\end_layout + +\begin_layout Plain Layout + + this.getField("from").display = display.visible; +\end_layout + +\begin_layout Plain Layout + + this.getField("to").display = display.visible; +\end_layout + +\begin_layout Plain Layout + + this.getField("from").setFocus(); +\end_layout + +\begin_layout Plain Layout + + } +\end_layout + +\begin_layout Plain Layout + + this.delay = false; +\end_layout + +\begin_layout Plain Layout + + } +\end_layout + +\begin_layout Plain Layout + + +\backslash +end{insDLJS} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Flex ChoiceMenu +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=contract,radio,value=tl,validate={validateTime();} +\end_layout + +\end_inset + +term-limited=tl, unlimited=u +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +Job contract: +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Flex TextField +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=from,width=10em +\end_layout + +\end_inset + +From: +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Flex TextField +status open + +\begin_layout Plain Layout + +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +name=to,width=10em +\end_layout + +\end_inset + +To: +\end_layout + +\end_inset + + +\end_layout + +\begin_layout End PDF Form +\begin_inset Note Note +status open + +\begin_layout Plain Layout +keep this emtpy +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +General hints +\end_layout + +\begin_layout Itemize +To be able to use all kinds of colors and color definitions you must load + the LaTeX package +\series bold +xcolor +\series default + in the document preamble this way: +\begin_inset Newline newline +\end_inset + + +\series bold + +\backslash +usepackage[svgnames,rgb]{xcolor} +\end_layout + +\begin_layout Itemize +To see in +\emph on +Adobe Reader +\emph default + and +\emph on +Acrobat +\emph default + custom background colors you must disable in these programs to highlight + the available form fields in the PDF. +\end_layout + +\begin_layout Bibliography +\begin_inset CommandInset bibitem +LatexCommand bibitem +key "JavaScript" + +\end_inset + + +\begin_inset CommandInset href +LatexCommand href +name "JavaScript reference" +target "https://developer.mozilla.org/en/docs/Web/JavaScript/Reference" + +\end_inset + + +\end_layout + +\begin_layout Bibliography +\begin_inset CommandInset bibitem +LatexCommand bibitem +key "hyperref" + +\end_inset + + +\begin_inset CommandInset href +LatexCommand href +name "Documentation" +target "http://mirrors.ctan.org/macros/latex/contrib/hyperref/doc/manual.pdf" + +\end_inset + + of the LaTeX package +\series bold +hyperref +\series default +. +\end_layout + +\begin_layout Bibliography +\begin_inset CommandInset bibitem +LatexCommand bibitem +key "pifont" + +\end_inset + + +\begin_inset CommandInset href +LatexCommand href +name "Documentation" +target "http://mirrors.ctan.org/macros/latex/required/psnfss/psnfss2e.pdf" + +\end_inset + + of the LaTeX package +\series bold +pifont +\series default +. +\end_layout + +\end_body +\end_document diff --git a/lib/layouts/pdfform.module b/lib/layouts/pdfform.module new file mode 100644 index 0000000000..2a9bccc63c --- /dev/null +++ b/lib/layouts/pdfform.module @@ -0,0 +1,176 @@ +#\DeclareLyXModule{PDF Form} +#DescriptionBegin +#Provides various kinds of annotations for the PDF output. The module uses +#the hyperref package. Please consult LyX example file PDF-form.lyx and the +#package documentation for details. +#DescriptionEnd +# Author: Uwe Stöhr + +Format 54 + +# +# the form environment +# + +Style "Begin PDF Form" + Margin Dynamic + LatexType Command + LatexName begin{Form} + Category "PDF form" + KeepEmpty 1 + ParSkip 0.4 + Align Block + LabelSep xx + LabelType Static + LabelString "Begin PDF Form" + Argument 1 + MenuString "PDF form parameters" + LabelString "Params" + Tooltip "Insert PDF form parameters here" + EndArgument + LabelFont + Series Bold + Color Green + EndFont + Requires hyperref +End + +Style "End PDF Form" + CopyStyle "Begin PDF Form" + LatexName end{Form} + LabelString "End PDF Form" +End + +# +# form fields +# + +InsetLayout Flex:TextField + LyXType custom + LatexType command + Decoration classic + LatexName TextField + LabelString "TextField" + Argument 1 + MenuString "PDF form parameters" + LabelString "Params" + Tooltip "Insert PDF form parameters here" + EndArgument + PassThru 1 + LabelFont + Color magenta + Size Small + EndFont + Requires hyperref +End + +InsetLayout Flex:CheckBox + CopyStyle Flex:TextField + LatexName CheckBox + LabelString "CheckBox" +End + +InsetLayout Flex:ChoiceMenu + CopyStyle Flex:TextField + LatexName ChoiceMenu + LabelString "ChoiceMenu" + Argument 2 + LabelString "Label" + Mandatory 1 + AutoInsert 1 + ToolTip "Insert the label here" + EndArgument +End + +InsetLayout Flex:PushButton + CopyStyle Flex:TextField + LatexName PushButton + LabelString "PushButton" +End + +InsetLayout Flex:SubmitButton + CopyStyle Flex:TextField + LatexName Submit + LabelString "SubmitButton" +End + +InsetLayout Flex:ResetButton + CopyStyle Flex:TextField + LatexName Reset + LabelString "ResetButton" +End + +# +# PDF viewer-specific insets +# + +InsetLayout Flex:PDFAction + CopyStyle Flex:TextField + LatexName Acrobatmenu + LabelString "PDFAction" + Argument 1 + LabelString "Action" + Mandatory 1 + AutoInsert 1 + ToolTip "the name of the PDF action" + EndArgument +End + +# +# Form style layouts +# + +Style "Text Field Style" + CopyStyle "Begin PDF Form" + LatexName renewcommand*{\DefaultOptionsofText} + LabelString "Default text field style" + PassThru 1 +End + +Style "Submit Button Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofSubmit} + LabelString "Default submit button style" +End + +Style "Push Button Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofPushButton} + LabelString "Default push button style" +End + +Style "Check Box Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofCheckBox} + LabelString "Default check box style" +End + +Style "Reset Button Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofReset} + LabelString "Default reset button style" +End + +Style "List Box Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofListBox} + LabelString "Default list box style" +End + +Style "Combo Box Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofComboBox} + LabelString "Default combo box style" +End + +Style "Popdown Box Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofPopdownBox} + LabelString "Default popdown box style" +End + +Style "Radio Box Style" + CopyStyle "Text Field Style" + LatexName renewcommand*{\DefaultOptionsofRadio} + LabelString "Default radio box style" +End