set_option("errorpolicy=return"); $p->set_option("searchpath={" . $searchpath . "}"); 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.width height=a4.height"); /* フォントをロードする */ $font = $p->load_font("NotoSerif-Regular", "unicode", ""); if ($font == 0) throw new Exception("Error: " . $p->get_errmsg()); $p->setfont($font, 12); /* フォント名の取得: "api"を使用して、PDFlib で使用されるフォント名を取得する。 * (Acrobat フォント名は"acrobat"を使用し、完全なフォント名を取得する場合は * "full"を使用する) */ $p->fit_textline("fontname (api):", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "fontname", "api"); if ($info > -1) { $fontname = $p->get_string($info, ""); $p->fit_textline($fontname, $xindent, $y, ""); } /* フォントアウトラインファイルのファイル名を取得する。 * この例ではフォントファイル名がフォント名と同じ場合に取得できる。 * その他のケースでは、set_option() と "FontOutline" リソース カテゴリを使用して * 設定されている場合にフォントファイル名を取得できる。 */ $p->fit_textline("fontfile:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "fontfile", ""); if ($info > -1) { $tmpname = explode("/", $p->get_string($info, "")); $fontname = $tmpname[count($tmpname)-1]; $p->fit_textline($fontname, $xindent, $y, ""); } /* フォントのエンコーディングを取得する: * PDFlib で指定されているエンコーディング名を取得するには、"api"を使用する * (フォントに実際に使用されるエンコーディングの名前を取得する場合は"actual"を * 使用する) */ $p->fit_textline("encoding (api):", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "encoding", "api"); if ($info > -1) { $fontname = $p->get_string($info, ""); $p->fit_textline($fontname, $xindent, $y, ""); } /* フォントがホストフォントか? */ $p->fit_textline("hostfont:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "hostfont", ""); $p->fit_textline($info, $xindent, $y, ""); /* フォントが記号フォントか? */ $p->fit_textline("symbolfont:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "symbolfont", ""); $p->fit_textline($info, $xindent, $y, ""); /* フォントのサブセットが作成されるか? */ $p->fit_textline("willsubset:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "willsubset", ""); $p->fit_textline($info, $xindent, $y, ""); /* フォントが埋め込まれるか? */ $p->fit_textline("willembed:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "willembed", ""); $p->fit_textline($info, $xindent, $y, ""); /* フォントのイタリック角度*/ $p->fit_textline("italicangle:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "italicangle", ""); $p->fit_textline(sprintf("%.1f",$info), $xindent, $y, ""); /* フォントの太さ(100 〜 900 の範囲); 400=標準、700=ボールド */ $p->fit_textline("weight:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "weight", ""); $p->fit_textline($info, $xindent, $y, ""); /* フォント内のグリフの数 */ $p->fit_textline("numglyphs:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "numglyphs", ""); $p->fit_textline($info, $xindent, $y, ""); /* フォント内のカーニングペアの数 */ $p->fit_textline("kerningpairs:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "kerningpairs", ""); $p->fit_textline($info, $xindent, $y, ""); /* フォントのアセンダー (サイズ:1000) */ $p->fit_textline("ascender:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "ascender", "fontsize=1000"); $p->fit_textline(sprintf("%.1f", $info), $xindent, $y, ""); /* フォントのディセンダー (サイズ:1000) */ $p->fit_textline("descender:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "descender", "fontsize=1000"); $p->fit_textline(sprintf("%.1f", $info), $xindent, $y, ""); /* 行間のメトリック値 (サイズ:1000) */ $p->fit_textline("linegap:", $x, $y-=$yoffset, ""); $info = $p->info_font($font, "linegap", "fontsize=1000"); $p->fit_textline(sprintf("%.1f", $info), $xindent, $y, ""); /* ページの終了 */ $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=font_info.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; ?>