Zend_Pdf-Drawing.xml 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 15617 -->
  4. <sect1 id="zend.pdf.drawing">
  5. <title>描画</title>
  6. <sect2 id="zend.pdf.drawing.geometry">
  7. <title>ジオメトリ</title>
  8. <para>
  9. PDF は PostScript と同じジオメトリを使用します。ページの左下隅を基準とし、
  10. デフォルトではポイント数 (1 インチの 1/72) で場所を指定します。
  11. </para>
  12. <para>
  13. ページの大きさはページオブジェクトから取得できます。
  14. </para>
  15. <para>
  16. <programlisting language="php"><![CDATA[
  17. $width = $pdfPage->getWidth();
  18. $height = $pdfPage->getHeight();
  19. ]]></programlisting>
  20. </para>
  21. </sect2>
  22. <sect2 id="zend.pdf.drawing.color">
  23. <title>色</title>
  24. <para>
  25. PDF には、色を表現するためのさまざまな方法があります。<classname>Zend_Pdf</classname> では、
  26. グレイスケール、RGB および CMYK 色空間をサポートしています。
  27. <classname>Zend_Pdf_Color</classname> オブジェクトが要求される箇所では、
  28. これらのどれでも使用することができます。それぞれの色空間に対応する機能を提供するのが
  29. <classname>Zend_Pdf_Color_GrayScale</classname>、<classname>Zend_Pdf_Color_Rgb</classname> および
  30. <classname>Zend_Pdf_Color_Cmyk</classname> クラスです。
  31. </para>
  32. <programlisting language="php"><![CDATA[
  33. // $grayLevel (float 型の数値)。0.0 (黒) - 1.0 (白)
  34. $color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
  35. // $r, $g, $b (float 型の数値)。0.0 (最低の強度) - 1.0 (最大の強度)
  36. $color2 = new Zend_Pdf_Color_Rgb($r, $g, $b);
  37. // $c, $m, $y, $k (float 型の数値)。0.0 (最小の強度) - 1.0 (最大の強度)
  38. $color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k);
  39. ]]></programlisting>
  40. <para>
  41. HTML 形式の色指定も <classname>Zend_Pdf_Color_Html</classname> クラスで使用できます。
  42. </para>
  43. <programlisting language="php"><![CDATA[
  44. $color1 = new Zend_Pdf_Color_Html('#3366FF');
  45. $color2 = new Zend_Pdf_Color_Html('silver');
  46. $color3 = new Zend_Pdf_Color_Html('forestgreen');
  47. ]]></programlisting>
  48. </sect2>
  49. <sect2 id="zend.pdf.drawing.shape-drawing">
  50. <title>図形の描画</title>
  51. <para>
  52. 描画操作は、PDF のページに対して行われます。
  53. </para>
  54. <para>
  55. 基本図形のセットが <classname>Zend_Pdf_Page</classname> クラスで提供されています。
  56. </para>
  57. <programlisting language="php"><![CDATA[
  58. /**
  59. * x1,y1 から x2,y2 まで直線を描画します。
  60. *
  61. * @param float $x1
  62. * @param float $y1
  63. * @param float $x2
  64. * @param float $y2
  65. * @return Zend_Pdf_Page
  66. */
  67. public function drawLine($x1, $y1, $x2, $y2);
  68. ]]></programlisting>
  69. <programlisting language="php"><![CDATA[
  70. /**
  71. * 矩形を描画します。
  72. *
  73. * 描画方法
  74. * Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - 輪郭を描画して塗りつぶします (デフォルト)
  75. * Zend_Pdf_Page::SHAPE_DRAW_STROKE - 輪郭を描画します
  76. * Zend_Pdf_Page::SHAPE_DRAW_FILL - 矩形を塗りつぶします
  77. *
  78. * @param float $x1
  79. * @param float $y1
  80. * @param float $x2
  81. * @param float $y2
  82. * @param integer $fillType
  83. * @return Zend_Pdf_Page
  84. */
  85. public function drawRectangle($x1, $y1, $x2, $y2,
  86. $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
  87. ]]></programlisting>
  88. <programlisting language="php"><![CDATA[
  89. /**
  90. * 多角形を描画します。
  91. *
  92. * $fillType が Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE あるいは Zend_Pdf_Page::SHAPE_DRAW_FILL
  93. * の場合、多角形は自動的に閉じられます。このメソッドについての詳細は、
  94. * PDF のドキュメント (section 4.4.2 Path painting Operators, Filling)
  95. * を参照ください。
  96. *
  97. * @param array $x - float の配列 (頂点の X 座標)
  98. * @param array $y - float の配列 (頂点の Y 座標)
  99. * @param integer $fillType
  100. * @param integer $fillMethod
  101. * @return Zend_Pdf_Page
  102. */
  103. public function drawPolygon($x, $y,
  104. $fillType =
  105. Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  106. $fillMethod =
  107. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  108. ]]></programlisting>
  109. <programlisting language="php"><![CDATA[
  110. /**
  111. * 中心が x, y で半径が radius の円を描画します。
  112. *
  113. * 角度はラジアンで指定します。
  114. *
  115. * Method signatures:
  116. * drawCircle($x, $y, $radius);
  117. * drawCircle($x, $y, $radius, $fillType);
  118. * drawCircle($x, $y, $radius, $startAngle, $endAngle);
  119. * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
  120. *
  121. *
  122. * これは本当の円ではありません。PDF は 3 次ベジエ曲線しかサポートしていないからです。
  123. * とはいえ、本当の円にかなり近くなります。
  124. * 本当の円との誤差は、最大でも半径の 0.00026 倍にしかなりません
  125. * (角度が PI/8, 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 そして 15*PI/8 の場合)。
  126. * 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 そして 7*PI/4 の場合は、円の正確な接線となります。
  127. *
  128. * @param float $x
  129. * @param float $y
  130. * @param float $radius
  131. * @param mixed $param4
  132. * @param mixed $param5
  133. * @param mixed $param6
  134. * @return Zend_Pdf_Page
  135. */
  136. public function drawCircle($x,
  137. $y,
  138. $radius,
  139. $param4 = null,
  140. $param5 = null,
  141. $param6 = null);
  142. ]]></programlisting>
  143. <programlisting language="php"><![CDATA[
  144. /**
  145. * 指定した矩形に内接する楕円を描画します。
  146. *
  147. * Method signatures:
  148. * drawEllipse($x1, $y1, $x2, $y2);
  149. * drawEllipse($x1, $y1, $x2, $y2, $fillType);
  150. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  151. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle, $fillType);
  152. *
  153. * 角度はラジアンで指定します。
  154. *
  155. * @param float $x1
  156. * @param float $y1
  157. * @param float $x2
  158. * @param float $y2
  159. * @param mixed $param5
  160. * @param mixed $param6
  161. * @param mixed $param7
  162. * @return Zend_Pdf_Page
  163. */
  164. public function drawEllipse($x1,
  165. $y1,
  166. $x2,
  167. $y2,
  168. $param5 = null,
  169. $param6 = null,
  170. $param7 = null);
  171. ]]></programlisting>
  172. </sect2>
  173. <sect2 id="zend.pdf.drawing.text-drawing">
  174. <title>テキストの描画</title>
  175. <para>
  176. テキストに対する描画操作も、PDF のページに対して行われます。
  177. ベースラインの x 座標および y 座標を指定することで、
  178. ページ内の任意の場所にテキストを 1 行描画することができます。
  179. 現在のフォントおよびフォントサイズを使用して、描画操作が行われます
  180. (詳細は、以下を参照ください)。
  181. </para>
  182. <programlisting language="php"><![CDATA[
  183. /**
  184. * 指定した位置にテキストを描画します。
  185. *
  186. * @param string $text
  187. * @param float $x
  188. * @param float $y
  189. * @param string $charEncoding (オプション) ソーステキストの文字エンコーディング。
  190. * デフォルトは現在のロケールです。
  191. * @throws Zend_Pdf_Exception
  192. * @return Zend_Pdf_Page
  193. */
  194. public function drawText($text, $x, $y, $charEncoding = '');
  195. ]]></programlisting>
  196. <example id="zend.pdf.drawing.text-drawing.example-1">
  197. <title>ページ上への文字列の描画</title>
  198. <programlisting language="php"><![CDATA[
  199. ...
  200. $pdfPage->drawText('Hello world!', 72, 720);
  201. ...
  202. ]]></programlisting>
  203. </example>
  204. <para>
  205. デフォルトでは、現在のロケールのエンコーディングによって
  206. テキストの文字列が解釈されます。異なるエンコーディングを使用している場合
  207. (例えば、ディスク上のファイルから UTF-8 の文字列を読み込んだり
  208. レガシーなデータベースから MacRoman の文字列を取得したりなど) は、
  209. 描画の際に文字エンコーディングを指定することができます。
  210. そうすることで、<classname>Zend_Pdf</classname> が変換処理を行います。PHP の
  211. <code><ulink url="http://www.php.net/manual/function.iconv.php">iconv()</ulink></code>
  212. 関数がサポートしているエンコーディングなら、すべて入力として使用することが可能です。
  213. </para>
  214. <example id="zend.pdf.drawing.text-drawing.example-2">
  215. <title>UTF-8 でエンコードされた文字列をページに描画する</title>
  216. <programlisting language="php"><![CDATA[
  217. ...
  218. // UTF-8 エンコードされた文字列をディスクから読み込みます
  219. $unicodeString = fread($fp, 1024);
  220. // 文字列をページ上に描画します
  221. $pdfPage->drawText($unicodeString, 72, 720, 'UTF-8');
  222. ...
  223. ]]></programlisting>
  224. </example>
  225. </sect2>
  226. <sect2 id="zend.pdf.drawing.using-fonts">
  227. <title>フォントの使用</title>
  228. <para>
  229. <classname>Zend_Pdf_Page::drawText()</classname> は、
  230. 現在設定されているフォントおよびフォントサイズを使用します。
  231. これは <classname>Zend_Pdf_Page::setFont()</classname> メソッドで設定できます。
  232. </para>
  233. <programlisting language="php"><![CDATA[
  234. /**
  235. * 現在のフォントを設定します。
  236. *
  237. * @param Zend_Pdf_Resource_Font $font
  238. * @param float $fontSize
  239. * @return Zend_Pdf_Page
  240. */
  241. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  242. ]]></programlisting>
  243. <para>
  244. PDF ドキュメントは、PostScript Type 1 フォントおよび TrueType フォントだけでなく、
  245. PDF 用の特別な形式である Type 3 フォントや複合フォントもサポートしています。
  246. すべての PDF ビューアには、以下の 14 種類の標準 Type 1 フォントが組み込まれています。
  247. その内容は Courier (4 種類)、Helvetica (4 種類)、Times (4 種類)、Symbol
  248. そして Zapf Dingbats です。
  249. </para>
  250. <para>
  251. 現在 <classname>Zend_Pdf</classname> は、標準の 14 種類の PDF フォントだけでなく
  252. 独自の TrueType フォントもサポートしています。フォントオブジェクトを取得するには、
  253. 2 種類のファクトリーメソッドのいずれかを使用します。使用するメソッドは、
  254. 標準の 14 種類の PDF フォントの場合は <classname>Zend_Pdf_Font::fontWithName($fontName)</classname>、
  255. 独自のフォントの場合は <classname>Zend_Pdf_Font::fontWithPath($filePath)</classname> です。
  256. </para>
  257. <example id="zend.pdf.drawing.using-fonts.example-1">
  258. <title>標準フォントの作成</title>
  259. <programlisting language="php"><![CDATA[
  260. ...
  261. // 新しいフォントを作成します。
  262. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
  263. // フォントを適用します。
  264. $pdfPage->setFont($font, 36);
  265. ...
  266. ]]></programlisting>
  267. </example>
  268. <para>
  269. 14 種類の標準フォント名を表す定数は、<classname>Zend_Pdf_Font</classname> クラスで定義されています。
  270. <itemizedlist>
  271. <listitem>
  272. <para>Zend_Pdf_Font::FONT_COURIER</para>
  273. </listitem>
  274. <listitem>
  275. <para>Zend_Pdf_Font::FONT_COURIER_BOLD</para>
  276. </listitem>
  277. <listitem>
  278. <para>Zend_Pdf_Font::FONT_COURIER_ITALIC</para>
  279. </listitem>
  280. <listitem>
  281. <para>Zend_Pdf_Font::FONT_COURIER_BOLD_ITALIC</para>
  282. </listitem>
  283. <listitem>
  284. <para>Zend_Pdf_Font::FONT_TIMES</para>
  285. </listitem>
  286. <listitem>
  287. <para>Zend_Pdf_Font::FONT_TIMES_BOLD</para>
  288. </listitem>
  289. <listitem>
  290. <para>Zend_Pdf_Font::FONT_TIMES_ITALIC</para>
  291. </listitem>
  292. <listitem>
  293. <para>Zend_Pdf_Font::FONT_TIMES_BOLD_ITALIC</para>
  294. </listitem>
  295. <listitem>
  296. <para>Zend_Pdf_Font::FONT_HELVETICA</para>
  297. </listitem>
  298. <listitem>
  299. <para>Zend_Pdf_Font::FONT_HELVETICA_BOLD</para>
  300. </listitem>
  301. <listitem>
  302. <para>Zend_Pdf_Font::FONT_HELVETICA_ITALIC</para>
  303. </listitem>
  304. <listitem>
  305. <para>Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC</para>
  306. </listitem>
  307. <listitem>
  308. <para>Zend_Pdf_Font::FONT_SYMBOL</para>
  309. </listitem>
  310. <listitem>
  311. <para>Zend_Pdf_Font::FONT_ZAPFDINGBATS</para>
  312. </listitem>
  313. </itemizedlist>
  314. </para>
  315. <para>
  316. 任意の TrueType フォント (通常は '.ttf' という拡張子です) も使用できますし、
  317. TrueType アウトラインを含む OpenType フォント (拡張子は '.otf')
  318. を使用することも可能です。現在はまだサポートしていませんが、将来は
  319. Mac OS X の .dfont ファイルや Microsoft TrueType Collection
  320. (拡張子 '.ttc') ファイルもサポートする予定です。
  321. </para>
  322. <para>
  323. TrueType フォントを使用するには、フォントへのフルパスを指定しなければなりません。
  324. 何らかの理由でフォントが読み込めなかった場合、あるいはそれが TrueType
  325. フォントでなかった場合は、ファクトリーメソッドが例外をスローします。
  326. </para>
  327. <example id="zend.pdf.drawing.using-fonts.example-2">
  328. <title>TrueType フォントの作成</title>
  329. <programlisting language="php"><![CDATA[
  330. ...
  331. // 新しいフォントを作成します
  332. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF');
  333. // フォントを適用します
  334. $pdfPage->setFont($goodDogCoolFont, 36);
  335. ...
  336. ]]></programlisting>
  337. </example>
  338. <para>
  339. デフォルトでは、独自のフォントは PDF ドキュメントに埋め込まれます。
  340. そのため、閲覧者のシステムにそのフォントがインストールされていなくても、
  341. ページをきちんと閲覧できるようになります。ファイルの大きさが気になる場合は、
  342. ファクトリーメソッドのオプションで「フォントを埋め込まない」ことを指定することができます。
  343. </para>
  344. <example id="zend.pdf.drawing.using-fonts.example-3">
  345. <title>TrueType を作成するが、PDF ドキュメントには埋め込まない</title>
  346. <programlisting language="php"><![CDATA[
  347. ...
  348. // 新しいフォントを作成します
  349. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF',
  350. Zend_Pdf_Font::EMBED_DONT_EMBED);
  351. // フォントを適用します
  352. $pdfPage->setFont($goodDogCoolFont, 36);
  353. ...
  354. ]]></programlisting>
  355. </example>
  356. <para>
  357. PDF ファイルにフォントが埋め込まれていないけれども
  358. 閲覧者のシステムにはそのフォントがインストールされている場合は、ドキュメントは通常通りに閲覧できます。
  359. もし適切なフォントがインストールされていないは、PDF 閲覧アプリケーションが適切な代替フォントを選択します。
  360. </para>
  361. <para>
  362. 中には、PDF ドキュメントへの埋め込みを禁止するようなライセンスを使用しているフォントもあります。
  363. これをあなどってはいけません。もし埋め込めないフォントを利用しようとすると、
  364. ファクトリーメソッドは例外をスローします。
  365. </para>
  366. <para>
  367. このようなフォントを使用することも可能ですが、そのためには、
  368. 上で説明した「埋め込まない」フラグを使用するか、あるいは例外を抑制しなければなりません。
  369. </para>
  370. <example id="zend.pdf.drawing.using-fonts.example-4">
  371. <title>埋め込みが禁止されているフォントで、例外をスローさせないようにする</title>
  372. <programlisting language="php"><![CDATA[
  373. ...
  374. $font = Zend_Pdf_Font::fontWithPath(
  375. '/path/to/unEmbeddableFont.ttf',
  376. Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION
  377. );
  378. ...
  379. ]]></programlisting>
  380. </example>
  381. <para>
  382. 利用者にフォントを選択させる場合などは、この抑制方法を使用することをお勧めします。
  383. PDF ドキュメントに埋め込めるフォントなら埋め込むでしょうし、
  384. 埋め込めないフォントは埋め込まないでしょう。
  385. </para>
  386. <para>
  387. フォントのサイズは比較的大きく、中には 10 メガバイトに達するものもあります。
  388. デフォルトでは埋め込みフォントは Flate 圧縮され、平均して 50% ほどサイズを節約できます。
  389. 何らかの理由でフォントを圧縮したくない場合は、以下のオプションで圧縮を無効にすることができます。
  390. </para>
  391. <example id="zend.pdf.drawing.using-fonts.example-5">
  392. <title>埋め込みフォントを圧縮しない</title>
  393. <programlisting language="php"><![CDATA[
  394. ...
  395. $font = Zend_Pdf_Font::fontWithPath('/path/to/someReallyBigFont.ttf',
  396. Zend_Pdf_Font::EMBED_DONT_COMPRESS);
  397. ...
  398. ]]></programlisting>
  399. </example>
  400. <para>
  401. 最後に、必要に応じていくつかの埋め込みオプションをビット OR 演算子で連結することもできます。
  402. </para>
  403. <example id="zend.pdf.drawing.using-fonts.example-6">
  404. <title>フォントの埋め込みオプションを組み合わせる</title>
  405. <programlisting language="php"><![CDATA[
  406. ...
  407. $font = Zend_Pdf_Font::fontWithPath(
  408. $someUserSelectedFontPath,
  409. (Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION |
  410. Zend_Pdf_Font::EMBED_DONT_COMPRESS));
  411. ...
  412. ]]></programlisting>
  413. </example>
  414. </sect2>
  415. <sect2 id="zend.pdf.drawing.standard-fonts-limitations">
  416. <title>標準 PDF フォントの制限</title>
  417. <para>
  418. 標準 PDF フォントは、いくつかのシングルバイトエンコーディング
  419. (詳細は <ulink url="http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference_1-7.pdf">PDF Reference, Sixth Edition, version 1.7</ulink>
  420. の Appendix D を参照ください) を内部的に使用しています。
  421. これらは、ほぼ Latin1 文字セットと同じものです (Symbol フォントと ZapfDingbats
  422. フォントは例外です)。
  423. </para>
  424. <para>
  425. <classname>Zend_Pdf</classname> は、標準フォントでのテキストの描画時に CP1252 (WinLatin1) を使用します。
  426. </para>
  427. <para>
  428. 他のエンコーディングでもテキストは描画できますが、
  429. 現在のロケールと異なる場合はそれを指定する必要があります。
  430. 実際に描画されるのは WinLatin1 の文字のみです。
  431. </para>
  432. <example id="zend.pdf.drawing.using-fonts.example-7">
  433. <title>フォント埋め込みオプションの使用</title>
  434. <programlisting language="php"><![CDATA[
  435. ...
  436. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER);
  437. $pdfPage->setFont($font, 36)
  438. ->drawText('Euro sign - €', 72, 720, 'UTF-8')
  439. ->drawText('Text with umlauts - à è ì', 72, 650, 'UTF-8');
  440. ...
  441. ]]></programlisting>
  442. </example>
  443. </sect2>
  444. <sect2 id="zend.pdf.drawing.extracting-fonts">
  445. <title>フォントの抽出</title>
  446. <para>
  447. <classname>Zend_Pdf</classname> モジュールを使用すると、読み込んだドキュメントからフォントを抽出できるようになります。
  448. </para>
  449. <para>
  450. これは、ドキュメントをインクリメンタルに更新する際に便利です。
  451. この機能がなければ、ドキュメントを更新するたびにフォントをアタッチしたり
  452. ドキュメントに埋め込んだりしなければならなくなります。
  453. </para>
  454. <para>
  455. <classname>Zend_Pdf</classname> オブジェクトおよび <classname>Zend_Pdf_Page</classname> オブジェクトには、
  456. ドキュメントやページ内のすべてのフォントを抽出するためのメソッドが用意されています。
  457. </para>
  458. <example id="zend.pdf.drawing.extracting-fonts.example-1">
  459. <title>読み込んだドキュメントからのフォントの抽出</title>
  460. <programlisting language="php"><![CDATA[
  461. ...
  462. $pdf = Zend_Pdf::load($documentPath);
  463. ...
  464. // ドキュメントのすべてのフォントを取得します
  465. $fontList = $pdf->extractFonts();
  466. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  467. $yPosition = 700;
  468. foreach ($fontList as $font) {
  469. $page->setFont($font, 15);
  470. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  471. 'en',
  472. 'UTF-8');
  473. $page->drawText($fontName . ': The quick brown fox jumps over the lazy dog',
  474. 100,
  475. $yPosition,
  476. 'UTF-8');
  477. $yPosition -= 30;
  478. }
  479. ...
  480. // ドキュメントの最初のページで用いられているフォントを取得します
  481. $firstPage = reset($pdf->pages);
  482. $firstPageFonts = $firstPage->extractFonts();
  483. ...
  484. ]]></programlisting>
  485. </example>
  486. <example id="zend.pdf.drawing.extracting-fonts.example-2">
  487. <title>フォント名の指定による、読み込んだドキュメントからのフォントの抽出</title>
  488. <programlisting language="php"><![CDATA[
  489. ...
  490. $pdf = new Zend_Pdf();
  491. ...
  492. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  493. $font = Zend_Pdf_Font::fontWithPath($fontPath);
  494. $page->setFont($font, $fontSize);
  495. $page->drawText($text, $x, $y);
  496. ...
  497. // フォント名をどこかに保存しておきます...
  498. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  499. 'en',
  500. 'UTF-8');
  501. ...
  502. $pdf->save($docPath);
  503. ...
  504. ]]></programlisting>
  505. <programlisting language="php"><![CDATA[
  506. ...
  507. $pdf = Zend_Pdf::load($docPath);
  508. ...
  509. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  510. /* $srcPage->extractFont($fontName) としてもかまいません */
  511. $font = $pdf->extractFont($fontName);
  512. $page->setFont($font, $fontSize);
  513. $page->drawText($text, $x, $y);
  514. ...
  515. $pdf->save($docPath, true /* インクリメンタル更新モード */);
  516. ...
  517. ]]></programlisting>
  518. </example>
  519. <para>
  520. フォントの抽出はどこででもできますが、次のような制限があります。
  521. <itemizedlist>
  522. <listitem><para>抽出したフォントは、そのフォントの抽出元と同じドキュメント内でしか使用できません。</para></listitem>
  523. <listitem>
  524. <para>
  525. 埋め込まれたフォントプログラムは実際には抽出されません。
  526. つまり、抽出されたフォントは元のフォントメトリクス
  527. (テキストの幅の計算に使用するもの) と同じものになりません。
  528. <programlisting language="php"><![CDATA[
  529. ...
  530. $font = $pdf->extractFont($fontName);
  531. $originalFont = Zend_Pdf_Font::fontWithPath($fontPath);
  532. $page->setFont($font /* 描画用に抽出したフォント */, $fontSize);
  533. $xPosition = $x;
  534. for ($charIndex = 0; $charIndex < strlen($text); $charIndex++) {
  535. $page->drawText($text[$charIndex], xPosition, $y);
  536. // テキストの幅の計算には元のフォントを使用します
  537. $width = $originalFont->widthForGlyph(
  538. $originalFont->glyphNumberForCharacter($text[$charIndex])
  539. );
  540. $xPosition += $width/$originalFont->getUnitsPerEm()*$fontSize;
  541. }
  542. ...
  543. ]]></programlisting>
  544. </para>
  545. </listitem>
  546. </itemizedlist>
  547. </para>
  548. </sect2>
  549. <sect2 id="zend.pdf.drawing.image-drawing">
  550. <title>画像の描画</title>
  551. <para>
  552. <classname>Zend_Pdf_Page</classname> クラスの drawImage() メソッドで、
  553. 画像の描画を行います。
  554. </para>
  555. <programlisting language="php"><![CDATA[
  556. /**
  557. * ページ内の指定した位置に画像を描画します。
  558. *
  559. * @param Zend_Pdf_Resource_Image $image
  560. * @param float $x1
  561. * @param float $y1
  562. * @param float $x2
  563. * @param float $y2
  564. * @return Zend_Pdf_Page
  565. */
  566. public function drawImage(Zend_Pdf_Resource_Image $image, $x1, $y1, $x2, $y2);
  567. ]]></programlisting>
  568. <para>
  569. 画像オブジェクトは、<classname>Zend_Pdf_Image::imageWithPath($filePath)</classname>
  570. メソッドで作成しなければなりません (現在は JPG、PNG および TIFF
  571. 画像をサポートしています)。
  572. </para>
  573. <example id="zend.pdf.drawing.image-drawing.example-1">
  574. <title>画像の描画</title>
  575. <programlisting language="php"><![CDATA[
  576. ...
  577. // 画像を読み込みます
  578. $image = Zend_Pdf_Image::imageWithPath('my_image.jpg');
  579. $pdfPage->drawImage($image, 100, 100, 400, 300);
  580. ...
  581. ]]></programlisting>
  582. </example>
  583. <para>
  584. <emphasis>重要! JPEG のサポートには PHP の GD 拡張モジュールを必要とします。</emphasis>
  585. <emphasis>重要! PNG でアルファチャネルを使用した画像を扱うには、ZLIB 拡張モジュールを必要とします。</emphasis>
  586. </para>
  587. <para>
  588. 詳細な情報は、PHP のドキュメント
  589. (<ulink url="http://www.php.net/manual/ja/ref.image.php">http://www.php.net/manual/ja/ref.image.php</ulink>),
  590. (<ulink url="http://www.php.net/manual/ja/ref.zlib.php">http://www.php.net/manual/ja/ref.zlib.php</ulink>)
  591. を参照ください。
  592. </para>
  593. </sect2>
  594. <sect2 id="zend.pdf.drawing.line-drawing-style">
  595. <title>直線の描画スタイル</title>
  596. <para>
  597. 直線の描画スタイルは、線幅と線の色、そして破線のパターンで定義されます。
  598. これらはすべて、<classname>Zend_Pdf_Page</classname> クラスのメソッドで設定します。
  599. </para>
  600. <programlisting language="php"><![CDATA[
  601. /** 線の色を設定します。*/
  602. public function setLineColor(Zend_Pdf_Color $color);
  603. /** 線の幅を設定します。*/
  604. public function setLineWidth(float $width);
  605. /**
  606. * 破線のパターンを設定します。
  607. *
  608. * pattern は float の配列です:
  609. * array(on_length, off_length, on_length, off_length, ...)
  610. * phase は線の開始位置から移動する距離です。
  611. *
  612. * @param array $pattern
  613. * @param array $phase
  614. * @return Zend_Pdf_Page
  615. */
  616. public function setLineDashingPattern($pattern, $phase = 0);
  617. ]]></programlisting>
  618. </sect2>
  619. <sect2 id="zend.pdf.drawing.fill-style">
  620. <title>塗りつぶしのスタイル</title>
  621. <para>
  622. <classname>Zend_Pdf_Page::drawRectangle()</classname>、<classname>Zend_Pdf_Page::drawPolygon()</classname>、
  623. <classname>Zend_Pdf_Page::drawCircle()</classname> および <classname>Zend_Pdf_Page::drawEllipse()</classname>
  624. メソッドは、オプションのパラメータとして <code>$fillType</code>
  625. を受け取ります。これは以下のいずれかの値となります。
  626. </para>
  627. <itemizedlist>
  628. <listitem>
  629. <para>Zend_Pdf_Page::SHAPE_DRAW_STROKE - 図形の輪郭を描画します</para>
  630. </listitem>
  631. <listitem>
  632. <para>Zend_Pdf_Page::SHAPE_DRAW_FILL - 図形を塗りつぶすだけです</para>
  633. </listitem>
  634. <listitem>
  635. <para>Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - 輪郭を描画し、塗りつぶします (デフォルトの挙動です)</para>
  636. </listitem>
  637. </itemizedlist>
  638. <para>
  639. <classname>Zend_Pdf_Page::drawPolygon()</classname> メソッドには、さらにパラメータ
  640. <code>$fillMethod</code> を指定することができます。
  641. </para>
  642. <itemizedlist>
  643. <listitem>
  644. <para>Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING (デフォルトの挙動)</para>
  645. <para>
  646. <citetitle>PDF リファレンス</citetitle> によると、これは以下のように定義されています。
  647. <blockquote>
  648. <para>
  649. nonzero winding number ルールは、ある点がパスの内側にあるかどうかを
  650. 判断するため、その点からどこかの方向に放射線を引いて
  651. その線がパスを構成する線と交わる場所を調べます。
  652. 0 からカウントをはじめ、放射線の左から右にパスの線が横切った場合に
  653. +1、放射線の右から左に横切った場合に -1 します。
  654. すべての交点について調べた後、もし結果が 0 ならその点はパスの外側です。
  655. 0 でなければ内側です。
  656. 注意: この方式では、放射線とパスの線が同一になった場合や
  657. 放射線がパスの線の接線となった場合のことを指定していません。
  658. 放射線は任意の方向に伸ばせるので、このような状況にならないような放射線が選ばれます。
  659. 単純な凸状のパスの場合、この方式で判断した内側・外側は、
  660. 直感的に予想できるのと同じ結果になります。
  661. ただ、パスを構成する線自身が交わっているなどの複雑なパスの場合は、
  662. 興味深い結果となります。この例を、(PDF リファレンスの) 図 4.10 に示します。
  663. 5 本の直線を互いに交差させて作成した星型の場合、このルールでは
  664. 星型で囲まれるすべての部分をパスの内側として扱います。真ん中の
  665. 五角形も内側となります。2 つの同心円からなるパスの場合、
  666. 2 つの円が同じ方向に描画された際には両方の円に囲まれている部分が
  667. 内側となります。2 つの円が反対方向に描画された際には、2 つの円からなる
  668. 「ドーナツ型」の部分が内側となります。このルールの場合は、
  669. 「ドーナツの穴」の部分は外側という扱いになります。
  670. </para>
  671. </blockquote>
  672. </para>
  673. </listitem>
  674. <listitem>
  675. <para>Zend_Pdf_Const::FILLMETHOD_EVENODD</para>
  676. <para>
  677. <citetitle>PDF リファレンス</citetitle> によると、これは以下のように定義されています。
  678. <blockquote>
  679. <para>
  680. nonzero winding number ルールに対するもうひとつのルールが even-odd ルールです。
  681. このルールでは、ある点が「内側である」かどうかを判断する材料として、
  682. その点からどこかの方向に放射線を引いてその線がパスを構成する線と何回交わるか
  683. ということを用います。交わる回数が奇数だった場合、その点は内側です。
  684. 交わる回数が偶数だった場合、その点は外側です。単純なパスの場合は、
  685. これは nonzero winding number ルールと同じ結果になります。
  686. しかし、複雑な図形の場合は異なる結果となります。
  687. 複雑なパスに対して even-odd ルールを適用した場合の例を (PDF リファレンスの)
  688. 図 4.11 に示します。このルールの場合、5 本の交差する直線からなる星型では、
  689. 三角形の部分のみが内側として扱われます。真ん中の五角形は、内側とはみなされません。
  690. 2 つの同心円の場合、2 つの円からなる「ドーナツ型」の部分のみが内側として扱われます。
  691. これは、円の描画された方向に依存しません。
  692. </para>
  693. </blockquote>
  694. </para>
  695. </listitem>
  696. </itemizedlist>
  697. </sect2>
  698. <sect2 id="zend.pdf.drawing.linear-transformations">
  699. <title>線形変換</title>
  700. <sect3 id="zend.pdf.drawing.linear-transformations.rotations">
  701. <title>回転</title>
  702. <para>
  703. 描画操作を適用する前に、PDF のページを回転させることができます。
  704. それには <classname>Zend_Pdf_Page::rotate()</classname> メソッドを使用します。
  705. </para>
  706. <programlisting language="php"><![CDATA[
  707. /**
  708. * ページを回転します。
  709. *
  710. * @param float $x - 回転の中心の X 座標
  711. * @param float $y - 回転の中心の Y 座標
  712. * @param float $angle - 回転角度
  713. * @return Zend_Pdf_Page
  714. */
  715. public function rotate($x, $y, $angle);
  716. ]]></programlisting>
  717. </sect3>
  718. <sect3 id="zend.pdf.drawing.linear-transformations.scale">
  719. <title>ZF 1.8 以降で使用できる拡大/縮小</title>
  720. <para>
  721. 倍率の変更は <classname>Zend_Pdf_Page::scale()</classname> メソッドで行います。
  722. </para>
  723. <programlisting language="php"><![CDATA[
  724. /**
  725. * 座標系の拡大/縮小
  726. *
  727. * @param float $xScale - X 方向の倍率
  728. * @param float $yScale - Y 方向の倍率
  729. * @return Zend_Pdf_Page
  730. */
  731. public function scale($xScale, $yScale);
  732. ]]></programlisting>
  733. </sect3>
  734. <sect3 id="zend.pdf.drawing.linear-transformations.translate">
  735. <title>ZF 1.8 以降で使用できる移動</title>
  736. <para>
  737. 座標系の移動は <classname>Zend_Pdf_Page::translate()</classname> メソッドで行います。
  738. </para>
  739. <programlisting language="php"><![CDATA[
  740. /**
  741. * 座標系の移動
  742. *
  743. * @param float $xShift - X 方向の移動
  744. * @param float $yShift - Y 方向の移動
  745. * @return Zend_Pdf_Page
  746. */
  747. public function translate($xShift, $yShift);
  748. ]]></programlisting>
  749. </sect3>
  750. <sect3 id="zend.pdf.drawing.linear-transformations.skew">
  751. <title>ZF 1.8 以降で使用できる傾斜</title>
  752. <para>
  753. ページを傾けるには <classname>Zend_Pdf_Page::skew()</classname> メソッドを使用します。
  754. </para>
  755. <programlisting language="php"><![CDATA[
  756. /**
  757. * 座標系の変換
  758. *
  759. * @param float $x - 傾斜点の X 座標
  760. * @param float $y - 傾斜点の Y 座標
  761. * @param float $xAngle - X 軸の傾斜角度
  762. * @param float $yAngle - Y 軸の傾斜角度
  763. * @return Zend_Pdf_Page
  764. */
  765. public function skew($x, $y, $xAngle, $yAngle);
  766. ]]></programlisting>
  767. </sect3>
  768. </sect2>
  769. <sect2 id="zend.pdf.drawing.save-restore">
  770. <title>グラフィックの状態の保存/復元</title>
  771. <para>
  772. 好きな時点でのグラフィックの状態
  773. (現在のフォント、フォントサイズ、線の色、塗りつぶしの色、線の形式、
  774. ページの回転、クリップ領域) を保存/復元することができます。
  775. 保存操作はグラフィックの状態をスタックに保存し、復元の際にはそこから取り出されます。
  776. </para>
  777. <para>
  778. <classname>Zend_Pdf_Page</classname>
  779. クラスには、これらの操作を行うための 2 つのメソッドがあります。
  780. </para>
  781. <programlisting language="php"><![CDATA[
  782. /**
  783. * このページのグラフィックの状態を保存します。
  784. * 現在適用されているスタイル・位置・クリップ領域および
  785. * 回転/移動/拡大縮小などを情報を保存します。
  786. *
  787. * @return Zend_Pdf_Page
  788. */
  789. public function saveGS();
  790. /**
  791. * 直近の saveGS() で保存されたグラフィックの状態を復元します。
  792. *
  793. * @return Zend_Pdf_Page
  794. */
  795. public function restoreGS();
  796. ]]></programlisting>
  797. </sect2>
  798. <sect2 id="zend.pdf.drawing.clipping">
  799. <title>描画領域のクリッピング</title>
  800. <para>
  801. PDF および <classname>Zend_Pdf</classname> モジュールは、描画領域のクリッピングに対応しています。
  802. 描画演算子が影響を及ぼす範囲を、このクリップ領域内に制限します。
  803. クリップ領域の初期値は、ページ全体です。
  804. </para>
  805. <para>
  806. <classname>Zend_Pdf_Page</classname> クラスでは、
  807. クリッピングに関連するいくつかのメソッドを提供しています。
  808. </para>
  809. <programlisting language="php"><![CDATA[
  810. /**
  811. * 矩形のクリップ領域を設定します。
  812. *
  813. * @param float $x1
  814. * @param float $y1
  815. * @param float $x2
  816. * @param float $y2
  817. * @return Zend_Pdf_Page
  818. */
  819. public function clipRectangle($x1, $y1, $x2, $y2);
  820. ]]></programlisting>
  821. <programlisting language="php"><![CDATA[
  822. /**
  823. * 多角形のクリップ領域を設定します。
  824. *
  825. * @param array $x - float の配列 (頂点の X 座標)
  826. * @param array $y - float の配列 (頂点の Y 座標)
  827. * @param integer $fillMethod
  828. * @return Zend_Pdf_Page
  829. */
  830. public function clipPolygon($x,
  831. $y,
  832. $fillMethod =
  833. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  834. ]]></programlisting>
  835. <programlisting language="php"><![CDATA[
  836. /**
  837. * 円形のクリップ領域を設定します。
  838. *
  839. * @param float $x
  840. * @param float $y
  841. * @param float $radius
  842. * @param float $startAngle
  843. * @param float $endAngle
  844. * @return Zend_Pdf_Page
  845. */
  846. public function clipCircle($x,
  847. $y,
  848. $radius,
  849. $startAngle = null,
  850. $endAngle = null);
  851. ]]></programlisting>
  852. <programlisting language="php"><![CDATA[
  853. /**
  854. * 楕円のクリップ領域を設定します。
  855. *
  856. * メソッドの書式
  857. * drawEllipse($x1, $y1, $x2, $y2);
  858. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  859. *
  860. * @todo $x2-$x1 == 0 や $y2-$y1 == 0 のような特別な場合への対応
  861. *
  862. * @param float $x1
  863. * @param float $y1
  864. * @param float $x2
  865. * @param float $y2
  866. * @param float $startAngle
  867. * @param float $endAngle
  868. * @return Zend_Pdf_Page
  869. */
  870. public function clipEllipse($x1,
  871. $y1,
  872. $x2,
  873. $y2,
  874. $startAngle = null,
  875. $endAngle = null);
  876. ]]></programlisting>
  877. </sect2>
  878. <sect2 id="zend.pdf.drawing.styles">
  879. <title>スタイル</title>
  880. <para>
  881. <classname>Zend_Pdf_Style</classname> クラスがスタイルに関する機能を提供します。
  882. </para>
  883. <para>
  884. スタイルは、グラフィックの状態に関する複数の設定を保存し、
  885. PDF のページに 1 回の操作でそれを適用するために使用されます。
  886. </para>
  887. <programlisting language="php"><![CDATA[
  888. /**
  889. * このページの描画操作で使用する予定のスタイルを設定します。
  890. *
  891. * @param Zend_Pdf_Style $style
  892. * @return Zend_Pdf_Page
  893. */
  894. public function setStyle(Zend_Pdf_Style $style);
  895. /**
  896. * スタイルを返し、それをページに適用します。
  897. *
  898. * @return Zend_Pdf_Style|null
  899. */
  900. public function getStyle();
  901. ]]></programlisting>
  902. <para>
  903. <classname>Zend_Pdf_Style</classname> クラスでは、
  904. さまざまなグラフィックの状態を設定あるいは取得するためのメソッドが提供されています。
  905. </para>
  906. <programlisting language="php"><![CDATA[
  907. /**
  908. * 線の色を設定します。
  909. *
  910. * @param Zend_Pdf_Color $color
  911. * @return Zend_Pdf_Page
  912. */
  913. public function setLineColor(Zend_Pdf_Color $color);
  914. ]]></programlisting>
  915. <programlisting language="php"><![CDATA[
  916. /**
  917. * 線の色を取得します。
  918. *
  919. * @return Zend_Pdf_Color|null
  920. */
  921. public function getLineColor();
  922. ]]></programlisting>
  923. <programlisting language="php"><![CDATA[
  924. /**
  925. * 線の幅を設定します。
  926. *
  927. * @param float $width
  928. * @return Zend_Pdf_Page
  929. */
  930. public function setLineWidth($width);
  931. ]]></programlisting>
  932. <programlisting language="php"><![CDATA[
  933. /**
  934. * 線の幅を取得します。
  935. *
  936. * @return float
  937. */
  938. public function getLineWidth();
  939. ]]></programlisting>
  940. <programlisting language="php"><![CDATA[
  941. /**
  942. * 破線のパターンを設定します。
  943. *
  944. * @param array $pattern
  945. * @param float $phase
  946. * @return Zend_Pdf_Page
  947. */
  948. public function setLineDashingPattern($pattern, $phase = 0);
  949. ]]></programlisting>
  950. <programlisting language="php"><![CDATA[
  951. /**
  952. * 破線のパターンを取得します。
  953. *
  954. * @return array
  955. */
  956. public function getLineDashingPattern();
  957. ]]></programlisting>
  958. <programlisting language="php"><![CDATA[
  959. /**
  960. * 破線の位相を取得します。
  961. *
  962. * @return float
  963. */
  964. public function getLineDashingPhase();
  965. ]]></programlisting>
  966. <programlisting language="php"><![CDATA[
  967. /**
  968. * 塗りつぶし色を設定します。
  969. *
  970. * @param Zend_Pdf_Color $color
  971. * @return Zend_Pdf_Page
  972. */
  973. public function setFillColor(Zend_Pdf_Color $color);
  974. ]]></programlisting>
  975. <programlisting language="php"><![CDATA[
  976. /**
  977. * 塗りつぶし色を取得します。
  978. *
  979. * @return Zend_Pdf_Color|null
  980. */
  981. public function getFillColor();
  982. ]]></programlisting>
  983. <programlisting language="php"><![CDATA[
  984. /**
  985. * 現在のフォントを設定します。
  986. *
  987. * @param Zend_Pdf_Resource_Font $font
  988. * @param float $fontSize
  989. * @return Zend_Pdf_Page
  990. */
  991. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  992. ]]></programlisting>
  993. <programlisting language="php"><![CDATA[
  994. /**
  995. * 現在のフォントサイズを変更します。
  996. *
  997. * @param float $fontSize
  998. * @return Zend_Pdf_Page
  999. */
  1000. public function setFontSize($fontSize);
  1001. ]]></programlisting>
  1002. <programlisting language="php"><![CDATA[
  1003. /**
  1004. * 現在のフォントを取得します。
  1005. *
  1006. * @return Zend_Pdf_Resource_Font $font
  1007. */
  1008. public function getFont();
  1009. ]]></programlisting>
  1010. <programlisting language="php"><![CDATA[
  1011. /**
  1012. * 現在のフォントサイズを取得します。
  1013. *
  1014. * @return float $fontSize
  1015. */
  1016. public function getFontSize();
  1017. ]]></programlisting>
  1018. </sect2>
  1019. <sect2 id="zend.pdf.drawing.alpha">
  1020. <title>透明度</title>
  1021. <para>
  1022. <classname>Zend_Pdf</classname> モジュールは、透明度の処理に対応しています。
  1023. </para>
  1024. <para>
  1025. 透明度を設定するには <classname>Zend_Pdf_Page::setAlpha()</classname> メソッドを使用します。
  1026. <programlisting language="php"><![CDATA[
  1027. /**
  1028. * 透明度を設定します
  1029. *
  1030. * $alpha == 0 - 透明
  1031. * $alpha == 1 - 不透明
  1032. *
  1033. * PDF でサポートするモードは次のとおりです
  1034. * Normal (デフォルト), Multiply, Screen, Overlay, Darken, Lighten,
  1035. * ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion
  1036. *
  1037. * @param float $alpha
  1038. * @param string $mode
  1039. * @throws Zend_Pdf_Exception
  1040. * @return Zend_Pdf_Page
  1041. */
  1042. public function setAlpha($alpha, $mode = 'Normal');
  1043. ]]></programlisting>
  1044. </para>
  1045. </sect2>
  1046. </sect1>