/* * フォントの設定: * フォントを設定して検索します。 * * 一番簡単なケースでは、Windows や Mac にあらかじめインストールされたフォントを * 使用します。さらに、SearchPath を使って、フォントが格納されているフォントフォ * ルダを指定します。次のケースは、フォント名に一致するフォントファイル名により * フォントを使用します。フォント名とフォントファイル名が同じでない場合は、Font * Outline を使って PDFlib によって使用されるフォント名を定義します。Type 1 フォ * ントでは、FontOutline および FontAFM または FontPFM により PDFlib で使用する * フォント名を定義します。また、info_font 関数によってフォント名とフォントファ * イルを得られます。 * * 必要な製品 : PDFlib/PDFlib+PDI/PPS 9 * 必要なデータ: 無し */ package com.pdflib.cookbook.pdflib.fonts; import com.pdflib.pdflib; import com.pdflib.PDFlibException; public class font_resources { public static void main(String argv[]) { /* 必要に応じてデータファイルがあるフォルダのパスを指定する */ String searchpath = "../input"; String outfile = "font_resources.pdf"; String title = "Font Resources"; pdflib p = null; int font; String fontname; int x = 20, y = 260; int exitcode = 0; try { p = new pdflib(); /* load_font() 等でエラーが起きた場合、-1を返す */ p.set_option("errorpolicy=return"); if (p.begin_document(outfile, "") == -1) 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=300 height=300"); /* 便利な方法:OS上にすでにフォントがインストールされていて、正確なフォ * ント名が分かっている場合は、フォント名でロードすることができる。 * (ホストフォントの正確な名前を調べる方法についてはチュートリアル参照) * 例えば"Verdana"フォントがOS上(MacまたはWindows)にインストールされて * いる場合、以下のようにロードすることができる。 */ /* * The following will only work on Mac or Windows, provided the font * Verdana is installed in the system. * * font = p.load_font("Verdana", "unicode", ""); * if (font == -1) * throw new Exception("Error: " + p.get_errmsg()); * * p.setfont(font, 10); * p.fit_textline("Font file is installed in the system", x, y, ""); * fontname = p.get_parameter("string", p.info_font(font, * "fontname", "api")); * p.fit_textline("Font name used in PDFlib: " * + fontname, x, y-=20, ""); */ /* ホストフォント(OS上にインストールされているフォント)を使わない場合は、 * 「Searchpath」 でフォントのあるフォルダを指定する。 * 必要があれば、さらに「SearchPath」に、フォントのあるフォルダを追加する。 * PDFlibは「SearchPath」で指定された全てのフォルダからフォントを検索する。 */ p.set_option("searchpath={" + searchpath + "}"); /* フォント名とフォントファイル名(".ttf", ".otf", ".pfb"などの拡張子は除外) * が同じ場合は、単純にフォントをロードすることができる。 */ /* * または、下記のように絶対パスを指定することもできる。 * * p.set_option("FontOutline=NotoSerif-Regular=/usr/fonts/NotoS-R.ttf"); * * この場合、検索パスは適用されず、フォントは上記で定義された場所から * ロードされる。 */ /* * フォント名 "NotoSerif-Regular" を使用してロードできる。 */ font = p.load_font("NotoSerif-Regular", "unicode", ""); if (font == -1) throw new Exception("Error: " + p.get_errmsg()); p.setfont(font, 10); p.fit_textline("Font file name: NotoSerif-Regular.ttf", x, y -= 40, ""); fontname = p.get_string((int) p.info_font(font, "fontname", "api"), ""); p.fit_textline("Font name used in PDFlib: " + fontname, x, y -= 20, ""); /* PostScript Type1 フォントの場合 、フォントのアウトラインファイル、メトリッ * クファイルの両方が必要となる。「FontOutline」で、フォントのアウトラインフ * ァイル(lcdxsr.pfa)とフォント名を紐付ける。さらに「FontAFM」(または「Font * PFM」)で、フォントのメトリックファイル(lcdxsr.afm)とフォント名を紐付ける。 */ p.set_option("FontOutline={LuciduxSans=lcdxsr.pfa}"); p.set_option("FontAFM={LuciduxSans=lcdxsr.afm}"); /* "LuciduxSans" フォントをロードし、埋め込む */ font = p.load_font("LuciduxSans", "unicode", "embedding"); if (font == -1) throw new Exception("Error: " + p.get_errmsg()); p.setfont(font, 10); p.fit_textline("Font file names: lcdxsr.pfa and lcdxsr.afm", x, y -= 40, ""); fontname = p.get_string((int) p.info_font(font, "fontname", "api"), ""); p.fit_textline("Font name used in PDFlib: " + fontname, x, y -= 20, ""); /* ページを終了する */ p.end_page_ext(""); p.end_document(""); } catch (PDFlibException e) { System.err.println("PDFlib exception occurred:"); System.err.println("[" + e.get_errnum() + "] " + e.get_apiname() + ": " + e.get_errmsg()); exitcode = 1; } catch (Exception e) { System.err.println(e); exitcode = 1; } finally { if (p != null) { p.delete(); } System.exit(exitcode); } } }