set_option("errorpolicy=return"); $p->set_option("searchpath={" . $searchpath . "}"); /* We do not create any output document, so no call to * begin_document() is required. */ /* Open the input document */ $doc = $p->open_pdi_document($pdfinput, $docoptlist); if ($doc == 0) { echo("Error: " . $p->get_errmsg()); exit(1); } /* --------- general information (always available) */ $pcosmode = $p->pcos_get_string($doc, "pcosmodename"); printf(" File name: %s\n", $pdfinput); printf(" PDF version: %s\n", $p->pcos_get_string($doc, "pdfversionstring")); printf(" Encryption: %s\n", $p->pcos_get_string($doc, "encrypt/description")); printf(" Master pw: %s\n", (($p->pcos_get_number($doc, "encrypt/master") != 0) ? "yes":"no")); printf(" User pw: %s\n", (($p->pcos_get_number($doc, "encrypt/user") != 0) ? "yes" : "no")); printf("Text copying: %s\n", (($p->pcos_get_number($doc, "encrypt/nocopy") != 0) ? "no":"yes")); printf(" Linearized: %s\n\n", (($p->pcos_get_number($doc, "linearized") != 0) ? "yes" : "no")); if ($pcosmode == "minimum") { printf("Minimum mode: no more information available\n\n"); $p = 0; exit(0); } /* --------- more details (requires at least user password) */ printf("PDF/X status: %s\n", $p->pcos_get_string($doc, "pdfx")); printf("PDF/A status: %s\n", $p->pcos_get_string($doc, "pdfa")); $xfa_present = $p->pcos_get_number($doc, "type:/Root/AcroForm/XFA") != 0; printf(" XFA data: %s\n", $xfa_present ? "yes" : "no"); printf(" Tagged PDF: %s\n", (($p->pcos_get_number($doc, "tagged") != 0) ? "yes" : "no")); printf("No. of pages: %s\n", $p->pcos_get_number($doc, "length:pages")); printf(" Page 1 size: width=%.3f, height=%.3f\n", $p->pcos_get_number($doc, "pages[0]/width"), $p->pcos_get_number($doc, "pages[0]/height")); $count = $p->pcos_get_number($doc, "length:fonts"); printf("No. of fonts: %s\n", $count); for ($i=0; $i < $count; $i++) { $fonts = "fonts[" . $i . "]/embedded"; if ($p->pcos_get_number($doc, $fonts) != 0) print("embedded "); else print("unembedded "); $fonts = "fonts[" . $i . "]/type"; print($p->pcos_get_string($doc, $fonts) . " font "); $fonts = "fonts[" . $i . "]/name"; printf("%s\n", $p->pcos_get_string($doc, $fonts)); } printf("\n"); $plainmetadata = $p->pcos_get_number($doc, "encrypt/plainmetadata") != 0; if ($pcosmode == "restricted" && !$plainmetadata && $p->pcos_get_number($doc, "encrypt/nocopy") != 0) { print("Restricted mode: no more information available"); $p = 0; exit(0); } /* ----- document $info keys and XMP metadata (requires master pw) */ $count = $p->pcos_get_number($doc, "length:/Info"); for ($i=0; $i < $count; $i++) { $info = "type:/Info[" . $i . "]"; $objtype = $p->pcos_get_string($doc, $info); $info = "/Info[" . $i . "].key"; $key = $p->pcos_get_string($doc, $info); $len = 12 - strlen($key); while ($len-- > 0) print(" "); print($key . ": "); /* $info entries can be stored as string or name objects */ if ($objtype == "name" || $objtype == "string") { $info = "/Info[" . $i . "]"; printf("'" . $p->pcos_get_string($doc, $info) . "'\n"); } else { $info = "type:/Info[" . $i . "]"; printf("(" . $p->pcos_get_string($doc, $info) . " object)\n"); } } print("\n" . "XMP metadata: "); $objtype = $p->pcos_get_string($doc, "type:/Root/Metadata"); if ($objtype == "stream") { $contents = $p->pcos_get_stream($doc, "", "/Root/Metadata"); print(strlen($contents) . " UTF-8 bytes "); } else { printf("not present"); } $p->close_pdi_document($doc); } catch (PDFlibException $e) { echo("PDFlib exception occurred in starter_pcos sample:\n" . "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " . $e->get_errmsg() . "\n"); exit(1); } catch (Throwable $e) { echo($e); exit(1); } $p = 0; ?>