set_option("searchpath={" . $searchpath . "}"); /* Use the "errorpolicy" parameter to define an appropriate error * policy. * * With "errorpolicy=exception" an exception will be thrown when an * error condition is detected. However, the output document will be * unusable after an exception. This can be used for lazy programming * without any error conditionals at the expense of sacrificing the * output document even for problems which may be fixable by the * application. * * With "errorpolicy=return" when an error condition is detected, the * respective function will return with a -1 (in PHP: 0) error value * regardless of any warning parameters or options. The application * developer must check the return value to identify problems, and must * react on the problem in whatever way is appropriate for the * application. This is the recommended approach since it allows a * unified approach to error handling. */ /* ------------------------------------------------------------------ * First example: * Set the "errorpolicy" to "return" for all function calls. * This means we must check the return values of load_font() etc. for * -1 (in PHP: 0). * ------------------------------------------------------------------ */ $p->set_option("errorpolicy=return"); if ($p->begin_document($outfile, "") == 0) throw new Exception("Error: " . $p->get_errmsg()); $p->set_info("Creator", "PDFlib Cookbook"); $p->set_info("Title", $title); /* Start page */ $p->begin_page_ext(0, 0, "width=a4.height height=a4.width"); /* Try to load a special font which might not be available. */ $font = $p->load_font("MyFontName", "unicode", ""); /* Check the return value of load_font() */ if ($font == 0) { /* font handle is invalid; find out what happened */ $errmsg = $p->get_errmsg(); /* Try a different font */ $font = $p->load_font("NotoSerif-Regular", "unicode", ""); /* font handle is also invalid; give up */ if ($font == 0) { throw new Exception("Error: " . $p->get_errmsg()); } /* Output the error message to the PDF. This is not pretty * realistic but it is intended to show how you can proceed after * a failed function call without having damaged the PDF. */ $p->setfont($font, 20); $p->fit_textline($errmsg, 50, 400, ""); } /* ------------------------------------------------------------------- * Second example: * Set the "errorpolicy" to "exception". Change it to "return" only if * you want to check the return value of a particular function call. * ------------------------------------------------------------------- */ $p->set_option("errorpolicy=exception"); /* Output some descriptive text */ $p->setfont($font, 20); $p->fit_textline("Error policy can be exception or return.", 50, 500, ""); /* Set the "errorpolicy" parameter to "return" to check the return * value of load_image(). Then set the parameter back to "exception" * again. If the image to be loaded does not exist a replacement text * will be output. * * Alternatively, the "errorpolicy=return" option of load_image() can be * used which changes the error policy just for the respective function * call. */ $p->set_option("errorpolicy=return"); /* Load the image */ $image = $p->load_image("auto", $imagefile, ""); /* Set the "errorpolicy" parameter to "exception" again */ $p->set_option("errorpolicy=exception"); /* Output some replacement text if image is not available */ if ($image == 0) { $p->setcolor("fillstroke", "rgb", 1, 0, 0, 0); $x=50; $y=200; $w=200; $h=100; $p->rect($x, $y, $w, $h); $p->stroke(); $p->setfont($font, 10); $p->fit_textline("Replacement text for unavailable image", $x + 5, $y + 5, "boxsize={" . ($w - 10) . " " . ($h - 10) . "}"); } else { /* Place the image */ $p->fit_image($image, 20, 20, "scale=0.5"); } $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=error_handling.pdf"); print $buf; } catch (PDFlibException $e){ echo("PDFlib exception occurred:\n" . "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " . $e->get_errmsg() . "\n"); exit(1); } catch (Throwable $e) { echo("PHP exception occurred: " . $e->getMessage() . "\n"); exit(1); } $p = 0; ?>