pdfua/starter_pdfua1
Create PDF/UA-1 document with various content types including structure elements, artifacts and interactive elements.
Download PHP Code Switch to Java Code Show Output
<?php
/*
* PDF/UA-1 starter:
* Create PDF/UA-1 document with various content types including structure
* elements, artifacts, and interactive elements.
*
* Required software: PDFlib/PDFlib+PDI/PPS 10
* Required data: font file, image
*/
/* This is where the data files are. Adjust as necessary. */
$searchpath = dirname(__FILE__,3)."/input";
$imagefile = "lionel.jpg";
$p = null;
try {
$p = new pdflib();
/*
* errorpolicy=exception means that the program will stop
* if one of the API functions runs into a problem.
*/
$p->set_option("errorpolicy=exception searchPath={" . $searchpath . "}");
/* all strings are expected as utf8 */
$p->begin_document("",
"pdfua=PDF/UA-1 lang=en " .
"tag={tagname=Document Title={PDFlib PDF/UA-1 demo}}") ;
$p->set_info("Creator", "starter_pdfua1");
$p->set_info("Title", "PDFlib PDF/UA-1 demo");
/* 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");
$p->create_bookmark("PDF/UA-1 demo", "");
$font = $p->load_font("NotoSerif-Regular", "unicode", "");
$p->setfont($font, 24.0);
/* =================== Simple text ======================== */
/* Use abbreviated tagging with the "tag" option */
$p->fit_textline("Introduction to Paper Planes",
50, 700, "tag={tagname=H1 Title={Introduction}} fontsize=24");
$p->fit_textline(
"Paper planes can be made from any kind of paper.",
50, 675, "tag={tagname=P} fontsize=12");
$p->fit_textline("Most paper planes don't have an engine.",
50, 650, "tag={tagname=P} fontsize=12");
/* =================== Interactive Link ======================== */
/* Open both P and Link elements in a single call */
$id = $p->begin_item("P", "tag={tagname=Link Title={Kraxi on the Web}}");
/* Create visible content which represents the link */
$p->fit_textline("Learn more on the Kraxi website.",
50, 625,
"matchbox={name={kraxi.com}} fontsize=12 " .
"strokecolor=blue fillcolor=blue underline");
/* Create URI action */
$action = $p->create_action("URI", "url={http://www.kraxi.com}");
/* Create Link annotation on named matchbox "kraxi.com".
* This automatically creates an OBJR (object reference) element.
*/
$optlist = "linewidth=0 usematchbox={kraxi.com} " .
"contents={Link to Kraxi Inc. Web site} " .
"action={activate=" . $action. " } ";
$p->create_annotation(0, 0, 0, 0, "Link", $optlist);
$p->end_item($id);
/* =================== Image ======================== */
/* A grouping element is required as container for Figure and Caption */
$id = $p->begin_item("Sect", "");
$image = $p->load_image("auto", $imagefile, "");
/* The "Placement" attribute is recommended for Figure elements
* as children of grouping elements.
*/
$p->fit_image($image, 50, 400,
"tag={tagname=Figure Placement=Block Alt={Image of Kraxi waiting for customers.}} " .
"scale=0.5");
$p->close_image($image);
/* Caption text below the image; Caption element follows Figure.
* Since Caption doesn't allow direct content in PDF 1.7 we create
* an additional P element.
*/
$p->fit_textline("Kraxi waiting for customers.",
50, 375,
"tag={tagname=Caption tag={tagname=P}} fontsize=12 ");
$p->end_item($id);
/* =================== Artifact ======================== */
$p->fit_textline("Page 1", 250, 100,
"tag={tagname=Artifact} fontsize=12");
$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=starter_pdfua1.pdf");
print $buf;
}
catch (PDFlibException $e) {
echo("PDFlib exception occurred in starter_pdfua1 sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
exit(1);
}
catch (Throwable $e) {
echo($e);
exit(1);
}
$p = 0;
?>