set_option("searchpath={" . $searchpath . "}"); /* ------------------------------------------------------------------ * 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). * ------------------------------------------------------------------ */ /* * errorpolicy "パラメータを使用して、適切なエラーポリシーを定義します。 * * デフォルト設定"errorpolicy=legacy"は、 PDFlib の旧版との互換性を保証 * するもので、この場合例外とエラー戻り値は fontwarning・imagewarning 等の * パラメータやオプションで制御されます。 * これは、PDFlib 6 とのソースコード互換性を必要とするアプリケーション * のみに推奨します。 * * errorpolicy=exception にして、エラー状態が検出されると、例外が発生しますが、 * その時出力文書は使用できなくなります。 * * これは、エラー条件のない遅延プログラミングに使用することができます。 * アプリケーションで修正可能な問題であっても、出力文書を犠牲にすることになります。 * * errorpolicy=return "では、エラー状態が検出されると、警告パラメータやオプションに * 関係なく、それぞれの関数が-1(PHPでは0)のエラー値で返されます。 * * アプリケーションの開発者は、この返り値をチェックして問題を特定し、アプリケー * ションに適した方法で問題に対処しなければなりません。 * これは、エラー処理を統一的に行うために推奨される方法です。 */ /* ------------------------------------------------------------------ * 1 番目の例: * すべての関数呼び出しに対して、"errorpolicy"を"return"に設定する。 * つまり、load_font()などの戻り値をチェックする必要がある。 * 戻り値:-1 (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); /* ページを始める */ $p->begin_page_ext(0, 0, "width=a4.height height=a4.width"); /* 利用できない可能性のある特殊なフォントを読み込む */ $font = $p->load_font("MyFontName", "unicode", ""); /* load_font() の戻り値をチェックする */ if ($font == 0) { /* フォントハンドルが無効。原因を調べる */ $errmsg = $p->get_errmsg(); /* 別のフォントを試す */ $font = $p->load_font("NotoSerif-Regular", "unicode", ""); /* フォントハンドルも無効 */ if ($font == 0) { throw new Exception("Error: " . $p->get_errmsg()); } /* エラーメッセージをPDFに出力する。 * これはあまり現実的ではないが、失敗した関数呼び出しの後、 * PDF を破損することなく、どのように進めるかを示すことを意図 * しています。 */ $p->setfont($font, 20); $p->fit_textline($errmsg, 50, 400, ""); } /* ------------------------------------------------------------------- * 2番目の例: * "errorpolicy"を "exception"に設定する。特定の関数呼び出しの戻り値を * チェックしたい場合のみ、"return "に変更する。 * ------------------------------------------------------------------- */ $p->set_option("errorpolicy=exception"); /* 説明テキストを出力する */ $p->setfont($font, 20); $p->fit_textline("Error policy can be exception or return.", 50, 500, ""); /* "errorpolicy" パラメータに "return" を設定し、load_image() の戻り値を * 確認する。 * その後、再び "exception "に戻してください。読み込むべき画像が存在しない場合、 * 代替テキストが出力される。 * * また、load_image()のオプションとして "errorpolicy=return "を使用することも * 可能である。このオプションは、各関数の呼び出しに対してのみエラーポリシー * を変更する。 * * なお、このオプションに正しく対応しているのは PDFlib 7.0.3 以降のみ */ $p->set_option("errorpolicy=return"); /* 画像をロードする */ $image = $p->load_image("auto", $imagefile, ""); /* "errorpolicy"パラメーターを "exception"に設定し直す。 */ $p->set_option("errorpolicy=exception"); /* 画像がない場合、代替テキストを出力する */ 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 { /* 画像を配置する */ $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; ?>