pdfua/form_fields_pdfua1
Create accessible form field according to PDF/UA.
Download PHP Code Switch to Java Code Show Output
<?php
/*
* Create accessible form fields according to PDF/UA
* Each call to create_field() generates the required OBJR structure element
* automatically. The corresponding "Form" element and auxiliary structure
* elements must be created by the user.
* The nesting of Part, Div, Caption, P and Form follows the recommendations
* in the document "Tagged PDF Best Practice Guide".
*
* Required software: PDFlib/PDFlib+PDI/PPS 10
* Required data: font file
*/
/* This is where the data files are. Adjust as necessary. */
$searchpath = dirname(__FILE__,3)."/input";
/*
* Search path for extra resources, put "ErlerDingbats.ttf" or
* "ZapfDingbats.ttf" here.
*/
$extra_searchpath = dirname(dirname(dirname(__FILE__)))."/extra_input";
$title = "Tagged form fields";
try {
$x1=50; $x2=150; $y=750;
$fieldheight=24; $fieldwidth=200; $fieldsmall=12;
$p = new pdflib();
/*
* errorpolicy=exception means that program will stop
* if one of the API function runs into a problem.
*/
$p->set_option("errorpolicy=exception searchpath={{" . $searchpath
. "} {" . $extra_searchpath . "}}");
$p->begin_document("",
"pdfua=PDF/UA-1 lang=en tag={tagname=Document Title={" . $title . "}}") ;
$p->set_info("Creator", "PDFlib Cookbook");
$p->set_info("Title", $title);
/* Automatically create spaces between chunks of text */
$p->set_option("autospace=true");
$p->begin_page_ext(0, 0,
"width=a4.width height=a4.height taborder=structure");
$id_Part = $p->begin_item("Part", "");
$font = $p->load_font("NotoSerif-Regular", "winansi", "simplefont nosubsetting");
$p->setfont($font, 24.0);
$p->fit_textline("Kraxi paper planes order form",
$x1, $y, "tag={tagname=H1}");
$p->create_bookmark("Kraxi paper planes order form", "");
$p->setfont($font, 12.0);
/* =================== Text field ======================== */
$id_Div = $p->begin_item("Div", "");
$y -= 3 * $fieldheight;
$labeltext = "Enter name:";
$p->fit_textline($labeltext, $x1, $y + 0.5 * $fieldheight, "
tag={tagname=Caption tag={tagname=P}}");
$optlist = "tag={tagname=P tag={tagname=Form}} tooltip={" . $labeltext . "} " .
"bordercolor={gray 0} font=" . $font;
$p->create_field($x2, $y, $x2 + $fieldwidth, $y + $fieldheight,
"name", "textfield", $optlist);
$p->end_item($id_Div);
/* =================== Combo box ======================== */
$id_Div = $p->begin_item("Div", "");
$y -= 3 * $fieldheight;
$labeltext = "Select size:";
$p->fit_textline($labeltext, $x1, $y + 0.5 * $fieldheight,
"tag={tagname=Caption tag={tagname=P}}");
/* Create a form field of type "combobox".
* Set the values for the combobox items (itemnamelist={0 1 2 3 4}).
* Set the labels for the combobox items (itemtextlist={...}).
* Set the focus on the last item (currentvalue=XXL).
* Allow the user to change an item (editable=true)
*/
$optlist = "tag={tagname=P tag={tagname=Form}} tooltip={" . $labeltext . "} " .
"font=" . $font . " fontsize=12 backgroundcolor={gray 0.9} " .
"bordercolor={gray 0.7} itemnamelist={0 1 2 3 4} " .
"currentvalue=XXL itemtextlist={S M L XL XXL} editable=true";
$p->create_field($x2, $y, $x2 + $fieldwidth, $y + $fieldheight,
"size", "combobox", $optlist);
$p->end_item($id_Div);
/* =================== List box ======================== */
$id_Div = $p->begin_item("Div", "");
$y -= 4 * $fieldheight;
$labeltext = "Select model:";
$p->fit_textline($labeltext, $x1, $y, "tag={tagname=Caption tag={tagname=P}}");
/* Create a form fiels of type "listbox".
* Set the values for the list items (itemnamelist={0 1 2 3}).
* Set the labels for the list items (itemtextlist={...}).
* Set the focus on the first item (currentvalue=0).
*/
$optlist = "tag={tagname=P tag={tagname=Form}} tooltip={" . $labeltext . "} " .
"font=" . $font . " fontsize=12 backgroundcolor={gray 0.9} " .
"bordercolor={gray 0.7} itemnamelist={0 1 2 3} currentvalue=0 " .
"itemtextlist={{Long Distance Glider} {Giant Wing} " .
"{Cone Head Rocket} {Super Dart}}";
$y -= 2.5 * $fieldheight;
$p->create_field($x2, $y, $x2 + $fieldwidth, $y + 3 * $fieldheight,
"model", "listbox", $optlist);
$p->end_item($id_Div);
/* =================== Check boxes ======================== */
$id_Div = $p->begin_item("Div", "");
$y -= 2 * $fieldheight;
$labeltext = "Select extras:";
$p->fit_textline($labeltext, $x1, $y, "tag={tagname=Caption tag={tagname=P}}");
/* The nested Div element encloses the check boxes */
$id_Div2 = $p->begin_item("Div", "");
/* Create several form fields of type "checkbox" */
$optlist = "buttonstyle=cross bordercolor={gray 0} " .
"backgroundcolor={rgb 0.95 0.95 1} fillcolor={rgb 0.25 0 0.95}";
/* Emit the Caption text before the field because logically it comes first. */
$labeltext = "glossy paper";
$p->fit_textline($labeltext, $x2 + 2 * $fieldsmall, $y, "tag={tagname=Caption tag={tagname=P}}");
$p->create_field($x2, $y, $x2 + $fieldsmall, $y + $fieldsmall,
$labeltext, "checkbox",
$optlist . " tag={tagname=P tag={tagname=Form}} tooltip={" . $labeltext . "}");
$y -= $fieldheight;
$labeltext = "rainbow colors";
$p->fit_textline($labeltext, $x2 + 2 * $fieldsmall, $y, "tag={tagname=Caption tag={tagname=P}}");
$p->create_field($x2, $y, $x2 + $fieldsmall, $y + $fieldsmall,
$labeltext, "checkbox",
$optlist . " tag={tagname=P tag={tagname=Form}} tooltip={" . $labeltext . "}");
$p->end_item($id_Div2);
$p->end_item($id_Div);
/* =================== radio buttons ======================== */
$id_Div = $p->begin_item("Div", "");
$y -= 3 * $fieldheight;
$labeltext= "Select color:";
$p->fit_textline($labeltext, $x1, $y, "tag={tagname=Caption tag={tagname=P}}");
/* The nested Div element encloses the buttons */
$id_Div2 = $p->begin_item("Div", "");
/* First create a form field group called "colors" */
$p->create_fieldgroup("colors",
"fieldtype=radiobutton tooltip={" . $labeltext . "}");
/* Create several form fields of type "radiobutton".
* All fields belong to the "colors" field group. Indicate this
* relationship by providing each radiobutton field name with the
* prefix "colors.".
* Activate the first radio button (currentvalue={On}).
* The tooltip is always shared by the group.
*/
$optlist = "buttonstyle=circle bordercolor={gray 0.8}";
/* Emit the Caption text before the field because logically it comes first. */
$labeltext = "standard";
$p->fit_textline($labeltext, $x2 + 2 * $fieldsmall, $y,
"tag={tagname=Caption tag={tagname=P}}");
$p->create_field($x2, $y, $x2 + $fieldsmall, $y + $fieldsmall,
"colors." . $labeltext, "radiobutton",
$optlist . " currentvalue={On} tag={tagname=P tag={tagname=Form}}");
$y -= $fieldheight;
$labeltext = "yellow";
$p->fit_textline($labeltext, $x2 + 2 * $fieldsmall, $y,
"tag={tagname=Caption tag={tagname=P}}");
$p->create_field($x2, $y, $x2 + $fieldsmall, $y + $fieldsmall,
"colors." . $labeltext, "radiobutton",
$optlist . " tag={tagname=P tag={tagname=Form}}");
$y -= $fieldheight;
$labeltext = "blue";
$p->fit_textline($labeltext, $x2 + 2 * $fieldsmall, $y,
"tag={tagname=Caption tag={tagname=P}}");
$p->create_field($x2, $y, $x2 + $fieldsmall, $y + $fieldsmall,
"colors.". $labeltext, "radiobutton",
$optlist . " tag={tagname=P tag={tagname=Form}}");
$p->end_item($id_Div2);
$p->end_item($id_Div);
/* =================== Push button ======================== */
/* Create a print field of type "pushbutton". */
/* Create an action for executing the Acrobat command File/Print */
$printaction = $p->create_action("Named", "menuname=Print");
$y -= 3 * $fieldheight;
$optlist = "bordercolor={rgb 0.25 0 0.95} " .
"backgroundcolor={rgb 0.95 0.95 1} " .
"fillcolor={rgb 0.25 0 0.95} font=" . $font . " fontsize=14";
$labeltext = "Print form" ;
/* For the Div-->Caption-->P-->Form nesting we use quadruple abbreviated tagging */
$p->create_field($x2, $y, $x2 + 0.5*$fieldwidth, $y + $fieldheight,
"print", "pushbutton",
$optlist . " caption={" . $labeltext . "} action={up " . $printaction .
"} tag={tagname=Div tag={tagname=Caption " .
"tag={tagname=P tag={tagname=Form}}}} tooltip={" . $labeltext . "}");
$p->end_item($id_Part);
$p->end_page_ext("");
$p->end_document("");
$buf = $p->get_buffer();
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=tagged_form_fields.pdf");
print $buf;
}
catch (PDFlibException $e) {
echo("PDFlib exception occurred in tagged_form_fields sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
exit(1);
}
catch (Throwable $e) {
echo($e);
exit(1);
}
$p = 0;
?>