Zend_Pdf-Drawing.xml 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20760 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.pdf.drawing">
  5. <title>Zeichnen</title>
  6. <sect2 id="zend.pdf.drawing.geometry">
  7. <title>Geometrie</title>
  8. <para>
  9. <acronym>PDF</acronym> verwendet die selbe Geometrie wie PostScript. Sie beginnt an der
  10. linken unteren Ecke der Seite und wird in Punkten (1/72 Zoll) gemessen.
  11. </para>
  12. <para>
  13. Die Seitengröße kann vom Seitenobjekt erhalten werden:
  14. </para>
  15. <programlisting language="php"><![CDATA[
  16. $width = $pdfPage->getWidth();
  17. $height = $pdfPage->getHeight();
  18. ]]></programlisting>
  19. </sect2>
  20. <sect2 id="zend.pdf.drawing.color">
  21. <title>Farben</title>
  22. <para>
  23. <acronym>PDF</acronym> bietet leistungsfähige Möglichkeiten für die Farbdarstellung. Die
  24. <classname>Zend_Pdf</classname> Komponente unterstützt die Grauskala sowie RGB und CYMK
  25. Farbräume. Jede kann überall verwendet werden, wo ein
  26. <classname>Zend_Pdf_Color</classname> Objekt benötigt wird. Die
  27. <classname>Zend_Pdf_Color_GrayScale</classname>,
  28. <classname>Zend_Pdf_Color_Rgb</classname> und <classname>Zend_Pdf_Color_Cmyk</classname>
  29. Klassen stellen folgende Funktionalitäten bereit:
  30. </para>
  31. <programlisting language="php"><![CDATA[
  32. // $grayLevel (Fließkommazahl)
  33. // 0.0 (schwarz) - 1.0 (weiß)
  34. $color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
  35. // $r, $g, $b (Fließkommazahlen)
  36. // 0.0 (min Helligkeit) - 1.0 (max Helligkeit)
  37. $color2 = new Zend_Pdf_Color_Rgb($r, $g, $b);
  38. // $c, $m, $y, $k (Fließkommazahlen)
  39. // 0.0 (min Helligkeit) - 1.0 (max Helligkeit)
  40. $color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k);
  41. ]]></programlisting>
  42. <para>
  43. Die HTML Farben werden auch durch die Klasse <classname>Zend_Pdf_Color_Html</classname>
  44. bereitgestellt:
  45. </para>
  46. <programlisting language="php"><![CDATA[
  47. $color1 = new Zend_Pdf_Color_Html('#3366FF');
  48. $color2 = new Zend_Pdf_Color_Html('silver');
  49. $color3 = new Zend_Pdf_Color_Html('forestgreen');
  50. ]]></programlisting>
  51. </sect2>
  52. <sect2 id="zend.pdf.drawing.shape-drawing">
  53. <title>Zeichnen von Formen</title>
  54. <para>
  55. Alle Zeichenoperationen können im Kontext einer <acronym>PDF</acronym> Seite
  56. durchgeführt werden.
  57. </para>
  58. <para>
  59. Die <classname>Zend_Pdf_Page</classname> Klass stellt einen Satz von einfachen Formen
  60. bereit:
  61. </para>
  62. <programlisting language="php"><![CDATA[
  63. /**
  64. * Zeichne eine Linie von x1,y1 nach x2,y2.
  65. *
  66. * @param float $x1
  67. * @param float $y1
  68. * @param float $x2
  69. * @param float $y2
  70. * @return Zend_Pdf_Page
  71. */
  72. public function drawLine($x1, $y1, $x2, $y2);
  73. ]]></programlisting>
  74. <programlisting language="php"><![CDATA[
  75. /**
  76. * Zeichne ein Rechteck.
  77. *
  78. * Füllarten:
  79. * Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - fülle und strichliere
  80. * das Rechteck (Standard)
  81. * Zend_Pdf_Page::SHAPE_DRAW_STROKE - strichele das Rechteck
  82. * Zend_Pdf_Page::SHAPE_DRAW_FILL - fülle das Rechteck
  83. *
  84. * @param float $x1
  85. * @param float $y1
  86. * @param float $x2
  87. * @param float $y2
  88. * @param integer $fillType
  89. * @return Zend_Pdf_Page
  90. */
  91. public function drawRectangle($x1, $y1, $x2, $y2,
  92. $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
  93. ]]></programlisting>
  94. <programlisting language="php"><![CDATA[
  95. /**
  96. * Zeichne ein gerundetes Rechteck.
  97. *
  98. * Füllarten:
  99. * Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - fülle und strichliere
  100. * das Rechteck (Standard)
  101. * Zend_Pdf_Page::SHAPE_DRAW_STROKE - strichele das Rechteck
  102. * Zend_Pdf_Page::SHAPE_DRAW_FILL - fülle das Rechteck
  103. *
  104. * radius ist ein Integer der den Radius der vier Ecken repräsentiert, oder ein
  105. * Arraay von vier Integern welche den Radius beginnend mit Links oben
  106. * repräsentieren, und im Uhrzeigersinn weitergehen
  107. *
  108. * @param float $x1
  109. * @param float $y1
  110. * @param float $x2
  111. * @param float $y2
  112. * @param integer|array $radius
  113. * @param integer $fillType
  114. * @return Zend_Pdf_Page
  115. */
  116. public function drawRoundedRectangle($x1, $y1, $x2, $y2, $radius,
  117. $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
  118. ]]></programlisting>
  119. <programlisting language="php"><![CDATA[
  120. /**
  121. * Zeichne ein Polygon
  122. *
  123. * Wenn $fillType Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE oder
  124. * Zend_Pdf_Page::SHAPE_DRAW_FILL ist, wird das Polygon automatisch geschlossen.
  125. * Für eine detaillierte Beschreibung dieser Methode schaue in eine PDF
  126. * Dokumentation (Kapitel 4.4.2 Path painting Operators, Filling)
  127. *
  128. * @param array $x - Array mit Floats (die X Koordinaten der Eckpunkte)
  129. * @param array $y - Array mit Floats (the Y Koordinaten der Eckpunkte)
  130. * @param integer $fillType
  131. * @param integer $fillMethod
  132. * @return Zend_Pdf_Page
  133. */
  134. public function drawPolygon($x, $y,
  135. $fillType =
  136. Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
  137. $fillMethod =
  138. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  139. ]]></programlisting>
  140. <programlisting language="php"><![CDATA[
  141. /**
  142. * Zeichne einen Kreis mit dem Mittelpunkt x, y dem Radius radius.
  143. *
  144. * Winkel werden im Bogenmaß angegeben
  145. *
  146. * Methoden Signaturen:
  147. * drawCircle($x, $y, $radius);
  148. * drawCircle($x, $y, $radius, $fillType);
  149. * drawCircle($x, $y, $radius, $startAngle, $endAngle);
  150. * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
  151. *
  152. *
  153. * Es ist kein echter Kreis, weil PDF nur kubische Bezierkurven
  154. * unterstützt. Aber es ist eine sehr Annäherung.
  155. * Es unterscheidet sich von echten Kreisen maximal um 0.00026 Radien
  156. * (Bei PI/8, 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 und
  157. * 15*PI/8 Winkeln). Bei 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 und
  158. * 7*PI/4 ist es exakt eine Tangente zu einem Kreis.
  159. *
  160. * @param float $x
  161. * @param float $y
  162. * @param float $radius
  163. * @param mixed $param4
  164. * @param mixed $param5
  165. * @param mixed $param6
  166. * @return Zend_Pdf_Page
  167. */
  168. public function drawCircle($x,
  169. $y,
  170. $radius,
  171. $param4 = null,
  172. $param5 = null,
  173. $param6 = null);
  174. ]]></programlisting>
  175. <programlisting language="php"><![CDATA[
  176. /**
  177. * Zeichne eine Ellipse innerhalb des angegebenen Rechtecks.
  178. *
  179. * Methoden Signaturen:
  180. * drawEllipse($x1, $y1, $x2, $y2);
  181. * drawEllipse($x1, $y1, $x2, $y2, $fillType);
  182. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  183. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle, $fillType);
  184. *
  185. * Winkel werden im Bogenmaß angegeben
  186. *
  187. * @param float $x1
  188. * @param float $y1
  189. * @param float $x2
  190. * @param float $y2
  191. * @param mixed $param5
  192. * @param mixed $param6
  193. * @param mixed $param7
  194. * @return Zend_Pdf_Page
  195. */
  196. public function drawEllipse($x1,
  197. $y1,
  198. $x2,
  199. $y2,
  200. $param5 = null,
  201. $param6 = null,
  202. $param7 = null);
  203. ]]></programlisting>
  204. </sect2>
  205. <sect2 id="zend.pdf.drawing.text-drawing">
  206. <title>Zeichnen von Text</title>
  207. <para>
  208. Auch alle Textoperationen können im Kontext einer <acronym>PDF</acronym> Seite
  209. durchgeführt werden. Du kannst eine einzige Textzeile an jeder Position auf der Seite
  210. durch Übergabe der X und Y Koordinaten für die Grundlinie zeichnen. Der aktuelle
  211. Zeichensatz und die aktuelle Zeichengröße werden für die Textoperationen verwendet
  212. (beachte die detaillierte Beschreibung unten).
  213. </para>
  214. <programlisting language="php"><![CDATA[
  215. /**
  216. * Zeichne eine Textzeile an einer bestimmten Position.
  217. *
  218. * @param string $text
  219. * @param float $x
  220. * @param float $y
  221. * @param string $charEncoding (optional) Zeichencodierung des
  222. * Quelltexts. Standard ist die aktuelle "locale".
  223. * @throws Zend_Pdf_Exception
  224. * @return Zend_Pdf_Page
  225. */
  226. public function drawText($text, $x, $y, $charEncoding = '');
  227. ]]></programlisting>
  228. <example id="zend.pdf.drawing.text-drawing.example-1">
  229. <title>Zeichne einen String auf der Seite</title>
  230. <programlisting language="php"><![CDATA[
  231. ...
  232. $pdfPage->drawText('Hello world!', 72, 720);
  233. ...
  234. ]]></programlisting>
  235. </example>
  236. <para>
  237. Standardmäßig werden Textstrings unter Verwendung der Zeichenkodierungsmethode der
  238. aktuelle "locale" interpretiert. Wenn du einen String hast, der eine andere
  239. Zeichenkodierungsmethode verwendet (wie zum Beispiel ein UTF-8 String, der aus einer
  240. Datei auf der Platte gelesen wurde, oder ein MacRoman String, der aus einer älteren
  241. Datenbank erhalten wurde), kannst du die Zeichenkodierung zum Zeitpunkt des Zeichnens
  242. angeben und <classname>Zend_Pdf</classname> wird die Konvertierung für dich durchführen.
  243. Du kannst Quellstrings in jeder Kodierungsmethode übergeben, die von
  244. <acronym>PHP</acronym>'s <code><ulink
  245. url="http://www.php.net/manual/function.iconv.php">iconv()</ulink></code>
  246. Funktion unterstützt wird.
  247. </para>
  248. <example id="zend.pdf.drawing.text-drawing.example-2">
  249. <title>Zeiche einen UTF-8 kodierten String auf der Seite</title>
  250. <programlisting language="php"><![CDATA[
  251. ...
  252. // Lese einen UTF-8 kodierten String von der Platte
  253. $unicodeString = fread($fp, 1024);
  254. // Zeichne den String auf der Seite
  255. $pdfPage->drawText($unicodeString, 72, 720, 'UTF-8');
  256. ...
  257. ]]></programlisting>
  258. </example>
  259. </sect2>
  260. <sect2 id="zend.pdf.drawing.using-fonts">
  261. <title>Verwendung von Zeichensätzen</title>
  262. <para>
  263. <methodname>Zend_Pdf_Page::drawText()</methodname> verwendet den aktuellen Zeichensatz
  264. und die aktuelle Zeichengröße der Seite, die mit der Methode
  265. <methodname>Zend_Pdf_Page::setFont()</methodname> festgelegt werden:
  266. </para>
  267. <programlisting language="php"><![CDATA[
  268. /**
  269. * Lege den aktuellen Zeichensatz fest.
  270. *
  271. * @param Zend_Pdf_Resource_Font $font
  272. * @param float $fontSize
  273. * @return Zend_Pdf_Page
  274. */
  275. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  276. ]]></programlisting>
  277. <para>
  278. <acronym>PDF</acronym> Dokumente unterstützt PostScript Type1 und TrueType Zeichensätze,
  279. sowie die zwei speziellen <acronym>PDF</acronym> Typen Type3 und zusammengesetzte
  280. Zeichensätze (composite fonts). Es gibt zudem 14 Type1 Standardzeichensätze, die von
  281. jedem <acronym>PDF</acronym> Viewer bereit gestellt werden: Courier (4 Stile), Helvetica
  282. (4 Stile), Times (4 Stile), Symbol und Zapf Dingbats.
  283. </para>
  284. <para>
  285. Die <classname>Zend_Pdf</classname> Komponente unterstützt derzeit diese 14
  286. <acronym>PDF</acronym> Standardzeichensätze sowie deine eigenen TrueType Zeichensätze.
  287. Zeichensatzobjekte können über eine der zwei Fabrikmethoden (factory methods) erhalten
  288. werden: <methodname>Zend_Pdf_Font::fontWithName($fontName)</methodname> für die 14
  289. <acronym>PDF</acronym> Standardzeichensätze oder
  290. <methodname>Zend_Pdf_Font::fontWithPath($filePath)</methodname> für eigene Zeichensätze.
  291. </para>
  292. <example id="zend.pdf.drawing.using-fonts.example-1">
  293. <title>Einen Standardzeichensatz erstellen</title>
  294. <programlisting language="php"><![CDATA[
  295. ...
  296. // Erstelle einen neuen Zeichensatz
  297. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
  298. // Wende Zeichensatz an
  299. $pdfPage->setFont($font, 36);
  300. ...
  301. ]]></programlisting>
  302. </example>
  303. <para>
  304. Die Zeichensatzkonstanten für die 14 <acronym>PDF</acronym> Standardzeichensätze sind
  305. innerhalb der <classname>Zend_Pdf_Font</classname> Klasse definiert:
  306. <itemizedlist>
  307. <listitem>
  308. <para>Zend_Pdf_Font::FONT_COURIER</para>
  309. </listitem>
  310. <listitem>
  311. <para>Zend_Pdf_Font::FONT_COURIER_BOLD</para>
  312. </listitem>
  313. <listitem>
  314. <para>Zend_Pdf_Font::FONT_COURIER_ITALIC</para>
  315. </listitem>
  316. <listitem>
  317. <para>Zend_Pdf_Font::FONT_COURIER_BOLDITALIC</para>
  318. </listitem>
  319. <listitem>
  320. <para>Zend_Pdf_Font::FONT_TIMES_ROMAN</para>
  321. </listitem>
  322. <listitem>
  323. <para>Zend_Pdf_Font::FONT_TIMES_BOLD</para>
  324. </listitem>
  325. <listitem>
  326. <para>Zend_Pdf_Font::FONT_TIMES_ITALIC</para>
  327. </listitem>
  328. <listitem>
  329. <para>Zend_Pdf_Font::FONT_TIMES_BOLDITALIC</para>
  330. </listitem>
  331. <listitem>
  332. <para>Zend_Pdf_Font::FONT_HELVETICA</para>
  333. </listitem>
  334. <listitem>
  335. <para>Zend_Pdf_Font::FONT_HELVETICA_BOLD</para>
  336. </listitem>
  337. <listitem>
  338. <para>Zend_Pdf_Font::FONT_HELVETICA_ITALIC</para>
  339. </listitem>
  340. <listitem>
  341. <para>Zend_Pdf_Font::FONT_HELVETICA_BOLDITALIC</para>
  342. </listitem>
  343. <listitem>
  344. <para>Zend_Pdf_Font::FONT_SYMBOL</para>
  345. </listitem>
  346. <listitem>
  347. <para>Zend_Pdf_Font::FONT_ZAPFDINGBATS</para>
  348. </listitem>
  349. </itemizedlist>
  350. </para>
  351. <para>
  352. Du kannst außerdem jeden individuellen TrueType Zeichensatz (welcher normalerweise eine
  353. '.ttf' Erweiterung hat) oder einen OpenType Zeichensatz ('.otf' Erweiterung) verwenden,
  354. wenn er TrueType Konturen enthält. Bisher nicht unterstützt, aber für zukünftige
  355. Versionen geplant, sind Mac OS X .dfont Dateien und Microsoft TrueType Collection
  356. ('.ttc' Erweiterung) Dateien.
  357. </para>
  358. <para>
  359. Um einen TrueType Zeichensatz zu verwenden, mußt du den kompletten Verzeichnispfad zum
  360. Zeichensatzprogramm angeben. Wenn der Zeichensatz aus welchem Grund auch immer nicht
  361. gelesen werden kann oder wenn es kein TrueType Zeichensatz ist, wird the Fabrikmethode
  362. eine Ausnahme werfen:
  363. </para>
  364. <example id="zend.pdf.drawing.using-fonts.example-2">
  365. <title>Einen TrueType Zeichensatz erstellen</title>
  366. <programlisting language="php"><![CDATA[
  367. ...
  368. // Erstelle einen neuen Zeichensatz
  369. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF');
  370. // Verwende den Zeichensatz
  371. $pdfPage->setFont($goodDogCoolFont, 36);
  372. ...
  373. ]]></programlisting>
  374. </example>
  375. <para>
  376. Standardmäßig werden eigene Zeichensätze in das erstellte <acronym>PDF</acronym>
  377. Dokument eingebettet. Dies ermöglicht den Empfänger, die Seite wie beabsichtigt
  378. anzuschauen, sogar wenn sie den entsprechenden Zeichensatz auf ihrem System gar nicht
  379. installiert haben. Wenn du dich über die Dateigröße sorgst, kannst du angeben, dass das
  380. Zeichensatzprogramm nicht eingebettet wird, indem du eine 'nicht einbetten' Option an
  381. die Fabrikmethode übergibst:
  382. </para>
  383. <example id="zend.pdf.drawing.using-fonts.example-3">
  384. <title>
  385. Erstelle einen TrueType Zeichensatz, aber bette ihn nicht in das PDF Dokument ein
  386. </title>
  387. <programlisting language="php"><![CDATA[
  388. ...
  389. // Erstelle einen neuen Zeichensatz
  390. $goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF',
  391. Zend_Pdf_Font::EMBED_DONT_EMBED);
  392. // Verwende den Zeichensatz
  393. $pdfPage->setFont($goodDogCoolFont, 36);
  394. ...
  395. ]]></programlisting>
  396. </example>
  397. <para>
  398. Wenn das Zeichensatzprogramm nicht eingebettet wurde, aber den Empfänger der
  399. <acronym>PDF</acronym> Datei diesen Zeichensatz auf seinem System installiert hat, wird
  400. er das Dokument so sehen wie beabsichtigt. Wenn sie nicht den korrekten Zeichensatz
  401. installiert haben, wird der <acronym>PDF</acronym> Viewer sich bemühen, um einen Ersatz
  402. herzustellen.
  403. </para>
  404. <para>
  405. Einige Zeichensätze haben sehr spezielle Lizensierungsregeln, die das Einbetten in
  406. <acronym>PDF</acronym> Dokumente verhindern. Damit du dadurch nicht überrascht wirst,
  407. wenn du versuchst einen Zeichensatz einzubetten, der nicht eingebettet werden kann,
  408. wird die Fabrikmethode eine Ausnahme werfen.
  409. </para>
  410. <para>
  411. Du kannst diese Zeichensätze weiterhin verwenden, aber du mußt entweder die 'nicht
  412. einbetten' Option übergeben wie oben beschrieben oder du kannst einfach die Ausnahme
  413. unterdrücken:
  414. </para>
  415. <example id="zend.pdf.drawing.using-fonts.example-4">
  416. <title>
  417. Werfe keine Ausnahme für Zeichensätze, die nicht eingebettet werden können
  418. </title>
  419. <programlisting language="php"><![CDATA[
  420. ...
  421. $font = Zend_Pdf_Font::fontWithPath(
  422. '/path/to/unEmbeddableFont.ttf',
  423. Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION
  424. );
  425. ...
  426. ]]></programlisting>
  427. </example>
  428. <para>
  429. Diese Unterdrückungstechnik wird bevorzugt, wenn du einen Endnutzer erlaubst, seine
  430. eigenen Zeichensätze auszuwählen. Zeichensätze, die in ein <acronym>PDF</acronym>
  431. Dokument eingebettet werden können, werden eingebettet, andere nicht.
  432. </para>
  433. <para>
  434. Zeichensatzprogramme können sehr groß sein, manche erreichen Dutzende von Megabytes.
  435. Standardmäßig werden alle eingebetteten Zeichensätze unter Verwendung des Flate
  436. Kompressionsschemas komprimiert, woraus im Schnitt 50% an Speicherplatz gespart werden
  437. kann. Wenn du aus welchem Grund auch immer nicht möchtest, dass das Zeichensatzprogramm
  438. kompimiert wird, kannst du dies mit einer Option abschalten:
  439. </para>
  440. <example id="zend.pdf.drawing.using-fonts.example-5">
  441. <title>Komprimiere einen eingebetten Zeichensatz nicht</title>
  442. <programlisting language="php"><![CDATA[
  443. ...
  444. $font = Zend_Pdf_Font::fontWithPath('/path/to/someReallyBigFont.ttf',
  445. Zend_Pdf_Font::EMBED_DONT_COMPRESS);
  446. ...
  447. ]]></programlisting>
  448. </example>
  449. <para>
  450. Zuguterletzt, kannst du die Einbettungsoptionen mit Hilfe des OR Operators kombinieren,
  451. wenn notwendig:
  452. </para>
  453. <example id="zend.pdf.drawing.using-fonts.example-6">
  454. <title>Kombiniere die Zeichensatz Einbettungsoptionen</title>
  455. <programlisting language="php"><![CDATA[
  456. ...
  457. $font = Zend_Pdf_Font::fontWithPath(
  458. $someUserSelectedFontPath,
  459. (Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION |
  460. Zend_Pdf_Font::EMBED_DONT_COMPRESS));
  461. ...
  462. ]]></programlisting>
  463. </example>
  464. </sect2>
  465. <sect2 id="zend.pdf.drawing.standard-fonts-limitations">
  466. <title>Limits der Standard PDF Schriften</title>
  467. <para>
  468. Die Standard <acronym>PDF</acronym> Schriften verwendetn intern verschiedene Single-Byte
  469. Encodings (siehe <ulink
  470. url="http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference_1-7.pdf">PDF
  471. Reference, Sixth Edition, version 1.7</ulink> Anhang D für Details). Diese sind
  472. generell gleich wie beim Latin1 Zeichensatz (ausser den Symbol und ZapfDingbats
  473. Schriften).
  474. </para>
  475. <para>
  476. <classname>Zend_Pdf</classname> verwendet CP1252 (WinLatin1) für das Zeichnen von Text
  477. mit Standardschriften.
  478. </para>
  479. <para>
  480. Text kann trotzdem in jedem anderen Encoding angegeben werden, welches spezifiziert
  481. werden muß wenn es sich vom aktuellen Gebietsschema unterscheidet. Nur WinLatin1 Zeichen
  482. werden aktuell gezeichnet.
  483. </para>
  484. <example id="zend.pdf.drawing.using-fonts.example-7">
  485. <title>Kombinieren mit in Schriften enthaltenen Optionen</title>
  486. <programlisting language="php"><![CDATA[
  487. ...
  488. $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER);
  489. $pdfPage->setFont($font, 36)
  490. ->drawText('Euro sign - €', 72, 720, 'UTF-8')
  491. ->drawText('Text with umlauts - à è ì', 72, 650, 'UTF-8');
  492. ...
  493. ]]></programlisting>
  494. </example>
  495. </sect2>
  496. <sect2 id="zend.pdf.drawing.extracting-fonts">
  497. <title>Schriften extrahieren</title>
  498. <para>
  499. Das <classname>Zend_Pdf</classname> Modul bietet die Möglichkeit Schriften von geladenen
  500. Dokumenten zu extrahieren.
  501. </para>
  502. <para>
  503. Das kann für aufsteigende Dokumenten Updates nützlich sein. Ohne diese Funktionalität
  504. müssen Schriften jedes Mal in ein Dokument hinzugefügt und möglicherweise eingebetten
  505. werden, wenn es aktualisiert werden soll.
  506. </para>
  507. <para>
  508. Die <classname>Zend_Pdf</classname> und <classname>Zend_Pdf_Page</classname> Objekte
  509. bieten spezielle Methoden um alle genannten Schriften innerhalb eines Dokuments oder
  510. einer Seite zu extrahieren:
  511. </para>
  512. <example id="zend.pdf.drawing.extracting-fonts.example-1">
  513. <title>Schriften von einem geladenen Dokument extrahieren</title>
  514. <programlisting language="php"><![CDATA[
  515. ...
  516. $pdf = Zend_Pdf::load($documentPath);
  517. ...
  518. // Alle Schriften des Dokuments bekommen
  519. $fontList = $pdf->extractFonts();
  520. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  521. $yPosition = 700;
  522. foreach ($fontList as $font) {
  523. $page->setFont($font, 15);
  524. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  525. 'en',
  526. 'UTF-8');
  527. $page->drawText($fontName . ': Der schnelle braune Fuchs springt '
  528. . 'über den lahmen Hund',
  529. 100,
  530. $yPosition,
  531. 'UTF-8');
  532. $yPosition -= 30;
  533. }
  534. ...
  535. // Alle Schriften, die in der ersten Seite des Dokuments
  536. // referenziert sind erhalten
  537. $firstPage = reset($pdf->pages);
  538. $firstPageFonts = $firstPage->extractFonts();
  539. ...
  540. ]]></programlisting>
  541. </example>
  542. <example id="zend.pdf.drawing.extracting-fonts.example-2">
  543. <title>
  544. Eine Schrift von einem geladenen Dokument extrahieren durch die Angabe des
  545. Schriftnamens
  546. </title>
  547. <programlisting language="php"><![CDATA[
  548. ...
  549. $pdf = new Zend_Pdf();
  550. ...
  551. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  552. $font = Zend_Pdf_Font::fontWithPath($fontPath);
  553. $page->setFont($font, $fontSize);
  554. $page->drawText($text, $x, $y);
  555. ...
  556. // Diese Schrift sollte woanders gespeichert werden...
  557. $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
  558. 'en',
  559. 'UTF-8');
  560. ...
  561. $pdf->save($docPath);
  562. ...
  563. ]]></programlisting>
  564. <programlisting language="php"><![CDATA[
  565. ...
  566. $pdf = Zend_Pdf::load($docPath);
  567. ...
  568. $pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
  569. /* $srcPage->extractFont($fontName) kann auch hier verwendet werden */
  570. $font = $pdf->extractFont($fontName);
  571. $page->setFont($font, $fontSize);
  572. $page->drawText($text, $x, $y);
  573. ...
  574. $pdf->save($docPath, true /* aufsteigender Update Modus */);
  575. ...
  576. ]]></programlisting>
  577. </example>
  578. <para>
  579. Extrahierte Schriften können statt jeder anderen Schrift mit den folgenden
  580. Einschränkungen verwendet werden:
  581. <itemizedlist>
  582. <listitem><para>Eine extrahierte Schrift kann nur im Kontext des Dokuments verwendet
  583. werden von dem es extrahiert wurde.</para></listitem>
  584. <listitem>
  585. <para>
  586. Ein möglicherweise eingebettetes Schriftprogramm wird aktuell nicht
  587. extrahiert. Deswegen können extrahierte Schriften keine richtigen
  588. Schriftmaße bieten und die originale Schrift wird für die Berechnung der
  589. Breite verwendet:
  590. <programlisting language="php"><![CDATA[
  591. ...
  592. $font = $pdf->extractFont($fontName);
  593. $originalFont = Zend_Pdf_Font::fontWithPath($fontPath);
  594. $page->setFont($font, /* Die extrahierte Schrift für das Zeichnen verwenden */
  595. $fontSize);
  596. $xPosition = $x;
  597. for ($charIndex = 0; $charIndex < strlen($text); $charIndex++) {
  598. $page->drawText($text[$charIndex], xPosition, $y);
  599. // Die originale Schrift für die Berechnung der Breite des Textes verwenden
  600. $width += $originalFont->widthForGlyph(
  601. $originalFont->glyphNumberForCharacter($text[$charIndex])
  602. );
  603. $xPosition += $width/$originalFont->getUnitsPerEm()*$fontSize;
  604. }
  605. ...
  606. ]]></programlisting>
  607. </para>
  608. </listitem>
  609. </itemizedlist>
  610. </para>
  611. </sect2>
  612. <sect2 id="zend.pdf.drawing.image-drawing">
  613. <title>Zeichnen von Grafiken</title>
  614. <para>
  615. Die <classname>Zend_Pdf_Page</classname> Klasse stellt die drawImage() Methode für das
  616. Zeichnen von Grafiken bereit:
  617. </para>
  618. <programlisting language="php"><![CDATA[
  619. /**
  620. * Zeichne eine Grafik an der angegebenen Position der Seite.
  621. *
  622. * @param Zend_Pdf_Ressource_Image $image
  623. * @param float $x1
  624. * @param float $y1
  625. * @param float $x2
  626. * @param float $y2
  627. * @return Zend_Pdf_Page
  628. */
  629. public function drawImage(Zend_Pdf_Ressource_Image $image, $x1, $y1, $x2, $y2);
  630. ]]></programlisting>
  631. <para>
  632. Grafikobjekte sollten mit der Methode
  633. <methodname>Zend_Pdf_Image::imageWithPath($filePath)</methodname> erzeugt werden. (Es
  634. werden zur Zeit JPG, PNG und TIFF Grafiken unterstützt):
  635. </para>
  636. <example id="zend.pdf.drawing.image-drawing.example-1">
  637. <title>Zeichnen von Grafiken</title>
  638. <programlisting language="php"><![CDATA[
  639. ...
  640. // Lade die Grafik
  641. $image = Zend_Pdf_Image::imageWithPath('my_image.jpg');
  642. $pdfPage->drawImage($image, 100, 100, 400, 300);
  643. ...
  644. ]]></programlisting>
  645. </example>
  646. <para>
  647. <emphasis>Wichtig! JPG Support setzt voraus, dass die GD Erweiterung für
  648. <acronym>PHP</acronym> konfiguriert wurde.</emphasis>
  649. <emphasis>Wichtig! PNG Support setzt voraus, dass die ZLIB Erweiterung konfiguriert
  650. wurde, um mit Grafiken mit Alphakanal zu arbeiten.</emphasis>
  651. </para>
  652. <para>
  653. Wende dich an die <acronym>PHP</acronym> Dokumentation für weitere Informationen (<ulink
  654. url="http://www.php.net/manual/de/ref.image.php">http://www.php.net/manual/de/ref.image.php</ulink>).
  655. (<ulink url="http://www.php.net/manual/de/ref.zlib.php">http://www.php.net/manual/de/ref.zlib.php</ulink>).
  656. </para>
  657. </sect2>
  658. <sect2 id="zend.pdf.drawing.line-drawing-style">
  659. <title>Stil der Strichzeichnungen</title>
  660. <para>
  661. Der Stil der Strichzeichnungen wurd durch die Linienbreite, die Linienfarbe und das
  662. Strichmuster definiert. Alle diese Parameter können an die Klassenmethoden von
  663. <classname>Zend_Pdf_Page</classname> übergeben werden:
  664. </para>
  665. <programlisting language="php"><![CDATA[
  666. /** Setze die Linienfarbe. */
  667. public function setLineColor(Zend_Pdf_Color $color);
  668. /** Setze die Linienbreite. */
  669. public function setLineWidth(float $width);
  670. /**
  671. * Setze das Strichmuster.
  672. *
  673. * Pattern ist ein Array mit Fließkommazahlen:
  674. * array(on_length, off_length, on_length, off_length, ...)
  675. * Phase is shift from the beginning of line.
  676. *
  677. * @param array $pattern
  678. * @param array $phase
  679. * @return Zend_Pdf_Page
  680. */
  681. public function setLineDashingPattern($pattern, $phase = 0);
  682. ]]></programlisting>
  683. </sect2>
  684. <sect2 id="zend.pdf.drawing.fill-style">
  685. <title>Füllstil</title>
  686. <para>
  687. Die Methoden <methodname>Zend_Pdf_Page::drawRectangle()</methodname>,
  688. <methodname>Zend_Pdf_Page::drawPolygon()</methodname>,
  689. <methodname>Zend_Pdf_Page::drawCircle()</methodname> und
  690. <methodname>Zend_Pdf_Page::drawEllipse()</methodname> akzeptieren das
  691. <varname>$fillType</varname> Argument als optionalen Parameter. Es kann lauten:
  692. </para>
  693. <itemizedlist>
  694. <listitem>
  695. <para>Zend_Pdf_Page::SHAPE_DRAW_STROKE - strichele die Form</para>
  696. </listitem>
  697. <listitem>
  698. <para>Zend_Pdf_Page::SHAPE_DRAW_FILL - fülle die Form</para>
  699. </listitem>
  700. <listitem>
  701. <para>Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - fülle und strichele die Form
  702. (Standardverhalten)</para>
  703. </listitem>
  704. </itemizedlist>
  705. <para>
  706. Die <methodname>Zend_Pdf_Page::drawPolygon()</methodname> Methode akzeptiert
  707. <varname>$fillMethod</varname> als zusätzlichen Parameter:
  708. </para>
  709. <itemizedlist>
  710. <listitem>
  711. <para>Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING (Standardverhalten)</para>
  712. <para>
  713. <citetitle>Die PDF Referenz</citetitle> beschreibt diese Regel wie folgt:
  714. <blockquote>
  715. <para>
  716. Die Regel der nicht-Null Fensternummer erkennt ob ein gegebener Punkt in
  717. einem Pfad liegt, indem konzeptuell ein Strahl von diesem Punkt in die
  718. Unendlichkeit in jede Richtung gezeichnet wird und dann die Plätze
  719. betrachtet werden an denen der Pfad den Strahl kreuzt. Beginnend mit der
  720. Anzahl 0, fügt die Regel jedesmal 1 hinzu wenn ein Pfadsegment den Strahl
  721. von links nach rechts kreuzt, und substrahiert jedesmal 1 wenn ein Segment
  722. von rechts nach links kreuzt. Wenn nach dem Zählen aller Kreuzungen das
  723. Ergebnis ß ist, dann ist der Punkt ausserhalb des Pfades; andernfalls ist
  724. er innerhalb.
  725. Beachte: Die gerade beschriebene Methode spezifiziert nicht was zu tun ist
  726. wenn ein Pfadsegment mit dem gewählten Strahl übereinstimmt oder ihn
  727. tangiert. Da die Richtung des Strahls beliebig ist wählt die Regel einen
  728. Strahl der solche problematischen Schnittpunkte nicht verursacht. Für
  729. einfache konvexe Pfade, definierte die Regel der nicht-Null Fensternummer
  730. das Innen und Aussen wie man es intuitiv erwarten würde. Die interessanteren
  731. Fälle sind jene die komplexe oder selbst-schneidenden Pfade wie jene in
  732. Figur 4.10 gezeigt (in der <acronym>PDF</acronym> Referenz).
  733. Für einen Pfad der aus einem fünf-punktigen Stern besteht, und mit fünf
  734. verbundenen geraden Linien besteht die sich gegenseitig schneiden, nimmt die
  735. Regel an dass das Innen die komplette Fläche ist, welche vom Stern
  736. eingeschlossen wird, inklusive dem Pentagon in der Mitte. Für einen Pfad der
  737. aus zwei konzentrischen Kreisen besteht, wird angenommen das die Fläche
  738. welche von beiden Kreisen eingeschlossen wird innen ist, wobei beide in der
  739. selben Richtung gezeichnet sein müssen. Wenn die Kreise in entgegengesetzten
  740. Richtungen gezeichnet werden, wird nur die "Donut" Form zwischen Ihnen als
  741. Innen angenommen, entsprechend der Regel; das "Donut Loch" ist Aussen.
  742. </para>
  743. </blockquote>
  744. </para>
  745. </listitem>
  746. <listitem>
  747. <para>Zend_Pdf_Page::FILL_METHOD_EVEN_ODD</para>
  748. <para>
  749. <citetitle>Die PDF Referenz</citetitle> beschreibt diese Regel wie folgt:
  750. <blockquote>
  751. <para>
  752. Eine alternative zur Regel der nicht-Null Fensternummer ist die
  753. gerade-ungerade Regel. Diese Regel erkennt die "Innenhaftigkeit" eines
  754. Punktes indem ein Strahl von diesem Punkt in jede Richtung gezeichnet wird
  755. und einfach die Anzahl der Pfadsegmente gezählt wird, welche den Strahl
  756. kreuzen, unabhängig von der Richtung. Wenn die Anzahl ungerade ist, dann ist
  757. der Punkt innerhalb; ist Sie gerade ist der Punkt ausserhalb. Das verursacht
  758. die gleichen Resultate wie die Regel der nicht-Null Fensternummer für Pfade
  759. mit einfachen Formen, produziert aber unterschiedliche Resultate für
  760. komplexere Formen.
  761. Figur 4.11 (in der <acronym>PDF</acronym> Referenz) zeigt die Effekte wenn
  762. die gerade-ungerade Regel auf komplexe Pfade angewendet wird. Für den
  763. Fünf-punktigen Stern nimmt die Regel an dass die Triangularpunkte innerhalb
  764. des Pfades liegen, aber nicht das Pentagon im Zentrum. Für die zwei
  765. konzentrischen Kreise, wird nur von der "Donut" Form angenommen das Sie
  766. innerhalb liegt, unabhängig von der Richtung in welcher die Kreise
  767. gezeichnet werden.
  768. </para>
  769. </blockquote>
  770. </para>
  771. </listitem>
  772. </itemizedlist>
  773. </sect2>
  774. <sect2 id="zend.pdf.drawing.linear-transformations">
  775. <title>Lineare Transformationen</title>
  776. <sect3 id="zend.pdf.drawing.linear-transformations.rotations">
  777. <title>Drehungen</title>
  778. <para>
  779. Bevor eine Zeichenoperation angewendet wird, können <acronym>PDF</acronym> Seiten
  780. gedreht werden. Dies kann mit Hilfe der
  781. <methodname>Zend_Pdf_Page::rotate()</methodname> Methode durchgeführt werden:
  782. </para>
  783. <programlisting language="php"><![CDATA[
  784. /**
  785. * Drehe die Seite
  786. *
  787. * @param float $x - die X Koordinate des Rotationspunktes
  788. * @param float $y - die Y Koordinate des Rotationspunktes
  789. * @param float $angle - der Rotationswinkel
  790. * @return Zend_Pdf_Page
  791. */
  792. public function rotate($x, $y, $angle);
  793. ]]></programlisting>
  794. </sect3>
  795. <sect3 id="zend.pdf.drawing.linear-transformations.scale">
  796. <title>Beginnend mit ZF 1.8, Skalierung</title>
  797. <para>
  798. Skalenänderungen werden durch die <methodname>Zend_Pdf_Page::scale()</methodname>
  799. Methode angeboten:
  800. </para>
  801. <programlisting language="php"><![CDATA[
  802. /**
  803. * Koordinationssystem für die Skala
  804. *
  805. * @param float $xScale - Skalierungsfaktor für die X Dimension
  806. * @param float $yScale - Skalierungsfaktor für die Y Dimension
  807. * @return Zend_Pdf_Page
  808. */
  809. public function scale($xScale, $yScale);
  810. ]]></programlisting>
  811. </sect3>
  812. <sect3 id="zend.pdf.drawing.linear-transformations.translate">
  813. <title>Beginnend mit ZF 1.8, Bewegungen</title>
  814. <para>
  815. Das bewegen des Koordinationssystem wird von der
  816. <methodname>Zend_Pdf_Page::translate()</methodname> Methode durchgeführt:
  817. </para>
  818. <programlisting language="php"><![CDATA[
  819. /**
  820. * Bewegen des Koordinationssystems
  821. *
  822. * @param float $xShift - X Koordinate für die Bewegung
  823. * @param float $yShift - Y Koordinate für die Bewegung
  824. * @return Zend_Pdf_Page
  825. */
  826. public function translate($xShift, $yShift);
  827. ]]></programlisting>
  828. </sect3>
  829. <sect3 id="zend.pdf.drawing.linear-transformations.skew">
  830. <title>Beginnend mit ZF 1.8, Drehungen</title>
  831. <para>
  832. Das Drehen der Seite kann durch Verwendung der
  833. <methodname>Zend_Pdf_Page::skew()</methodname> Methode durchgeführt werden:
  834. </para>
  835. <programlisting language="php"><![CDATA[
  836. /**
  837. * Bewegen des Koordinationssystems
  838. *
  839. * @param float $x - Die X Koordinate des Achsen-Drehpunktes
  840. * @param float $y - Die Y Koordinate des Achsen-Drehpunktes
  841. * @param float $xAngle - X Winkel der Achse
  842. * @param float $yAngle - Y Winkel der Achse
  843. * @return Zend_Pdf_Page
  844. */
  845. public function skew($x, $y, $xAngle, $yAngle);
  846. ]]></programlisting>
  847. </sect3>
  848. </sect2>
  849. <sect2 id="zend.pdf.drawing.save-restore">
  850. <title>Speichern/Wiederherstellen des Grafikzustand</title>
  851. <para>
  852. Jederzeit kann der Grafikzustand der Seite (aktueller Zeichensatz, Schriftgröße,
  853. Linienfarbe, Füllfarbe, Linienstil, Seitendrehung, Zeichenbereich) gespeichert und
  854. wiederhergestellt werden. Speicheroperationen legen die Daten auf einen Grafikzustand
  855. Stapel, Wiederherstelloperationen holen Sie daher zurück.
  856. </para>
  857. <para>
  858. In der <classname>Zend_Pdf_Page</classname> Klasse gibt es für diese Operationen zwei
  859. Methoden:
  860. </para>
  861. <programlisting language="php"><![CDATA[
  862. /**
  863. * Speichere den Grafikzustand dieser Seite.
  864. * Es wir ein Schnappschuss vom aktuell festgelegten Stil, Position,
  865. * Zeichenbereich und jeder festgelegten Drehung/Umrechnung/Skalierung
  866. * erstellt.
  867. *
  868. * @return Zend_Pdf_Page
  869. */
  870. public function saveGS();
  871. /**
  872. * Stelle den Grafikzustand wieder her, der mit dem letzten Aufruf von
  873. * saveGS() gespeichert wurde
  874. *
  875. * @return Zend_Pdf_Page
  876. */
  877. public function restoreGS();
  878. ]]></programlisting>
  879. </sect2>
  880. <sect2 id="zend.pdf.drawing.clipping">
  881. <title>Zeichenbereich</title>
  882. <para>
  883. <acronym>PDF</acronym> und die <classname>Zend_Pdf</classname> Komponente unterstützen
  884. die Begrenzung des Zeichenbereichs. Der aktuelle Zeichenbereich begrenzt den
  885. Seitenbereich, der von Zeichenoperationen beeinflusst werden kann. Zu Beginn ist dies
  886. die gesamte Seite.
  887. </para>
  888. <para>
  889. Die <classname>Zend_Pdf_Page</classname> Klasse stellt einen Satz von Methoden für die
  890. Begrenzung bereit.
  891. </para>
  892. <programlisting language="php"><![CDATA[
  893. /**
  894. * Durchschneide den aktuellen Zeichenbereich mit einem Rechteck.
  895. *
  896. * @param float $x1
  897. * @param float $y1
  898. * @param float $x2
  899. * @param float $y2
  900. * @return Zend_Pdf_Page
  901. */
  902. public function clipRectangle($x1, $y1, $x2, $y2);
  903. ]]></programlisting>
  904. <programlisting language="php"><![CDATA[
  905. /**
  906. * Durchschneide den aktuellen Zeichenbereich mit einem Polygon.
  907. *
  908. * @param array $x - Array mit Floats (die X Koordinaten der Eckpunkte)
  909. * @param array $y - Array mit Floats (die Y Koordinaten der Eckpunkte)
  910. * @param integer $fillMethod
  911. * @return Zend_Pdf_Page
  912. */
  913. public function clipPolygon($x,
  914. $y,
  915. $fillMethod =
  916. Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
  917. ]]></programlisting>
  918. <programlisting language="php"><![CDATA[
  919. /**
  920. * Durchschneide den aktuellen Zeichenbereich mit einem Kreis.
  921. *
  922. * @param float $x
  923. * @param float $y
  924. * @param float $radius
  925. * @param float $startAngle
  926. * @param float $endAngle
  927. * @return Zend_Pdf_Page
  928. */
  929. public function clipCircle($x,
  930. $y,
  931. $radius,
  932. $startAngle = null,
  933. $endAngle = null);
  934. ]]></programlisting>
  935. <programlisting language="php"><![CDATA[
  936. /**
  937. * Durchschneide den aktuellen Zeichenbereich mit einer Ellipse.
  938. *
  939. * Methoden Signaturen:
  940. * drawEllipse($x1, $y1, $x2, $y2);
  941. * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
  942. *
  943. * @todo verarbeite die Sonderfälle mit $x2-$x1 == 0 oder $y2-$y1 == 0
  944. *
  945. * @param float $x1
  946. * @param float $y1
  947. * @param float $x2
  948. * @param float $y2
  949. * @param float $startAngle
  950. * @param float $endAngle
  951. * @return Zend_Pdf_Page
  952. */
  953. public function clipEllipse($x1,
  954. $y1,
  955. $x2,
  956. $y2,
  957. $startAngle = null,
  958. $endAngle = null);
  959. ]]></programlisting>
  960. </sect2>
  961. <sect2 id="zend.pdf.drawing.styles">
  962. <title>Stile</title>
  963. <para>
  964. Die <classname>Zend_Pdf_Style</classname> Klasse stellt Stilfunktionalitäten bereit.
  965. </para>
  966. <para>
  967. Stile können verwendet werden, um mit einer Operation die Parameter für den
  968. Grafikzustand zu speichern und auf eine <acronym>PDF</acronym> Seite anzuwenden:
  969. </para>
  970. <programlisting language="php"><![CDATA[
  971. /**
  972. * Lege den Stil für zukünftige Zeichenoperationen auf dieser Seite fest
  973. *
  974. * @param Zend_Pdf_Style $style
  975. * @return Zend_Pdf_Page
  976. */
  977. public function setStyle(Zend_Pdf_Style $style);
  978. /**
  979. * Gebe den Stil der Seite zurück.
  980. *
  981. * @return Zend_Pdf_Style|null
  982. */
  983. public function getStyle();
  984. ]]></programlisting>
  985. <para>
  986. Die <classname>Zend_Pdf_Style</classname> Klasse stellt einen Satz von Methoden bereit,
  987. um verschiedene Parameter des Grafikstadiums zu setzen und zu holen:
  988. </para>
  989. <programlisting language="php"><![CDATA[
  990. /**
  991. * Setze die Linienfarbe.
  992. *
  993. * @param Zend_Pdf_Color $color
  994. * @return Zend_Pdf_Page
  995. */
  996. public function setLineColor(Zend_Pdf_Color $color);
  997. ]]></programlisting>
  998. <programlisting language="php"><![CDATA[
  999. /**
  1000. * Hole die Linienfarbe.
  1001. *
  1002. * @return Zend_Pdf_Color|null
  1003. */
  1004. public function getLineColor();
  1005. ]]></programlisting>
  1006. <programlisting language="php"><![CDATA[
  1007. /**
  1008. * Setze die Linienbreite.
  1009. *
  1010. * @param float $width
  1011. * @return Zend_Pdf_Page
  1012. */
  1013. public function setLineWidth($width);
  1014. ]]></programlisting>
  1015. <programlisting language="php"><![CDATA[
  1016. /**
  1017. * Hole die Linienbreite.
  1018. *
  1019. * @return float
  1020. */
  1021. public function getLineWidth();
  1022. ]]></programlisting>
  1023. <programlisting language="php"><![CDATA[
  1024. /**
  1025. * Setze das Strichmuster
  1026. *
  1027. * @param array $pattern
  1028. * @param float $phase
  1029. * @return Zend_Pdf_Page
  1030. */
  1031. public function setLineDashingPattern($pattern, $phase = 0);
  1032. ]]></programlisting>
  1033. <programlisting language="php"><![CDATA[
  1034. /**
  1035. * Hole das Strichmuster
  1036. *
  1037. * @return array
  1038. */
  1039. public function getLineDashingPattern();
  1040. ]]></programlisting>
  1041. <programlisting language="php"><![CDATA[
  1042. /**
  1043. * Get line dashing phase
  1044. *
  1045. * @return float
  1046. */
  1047. public function getLineDashingPhase();
  1048. ]]></programlisting>
  1049. <programlisting language="php"><![CDATA[
  1050. /**
  1051. * Setze die Füllfarbe
  1052. *
  1053. * @param Zend_Pdf_Color $color
  1054. * @return Zend_Pdf_Page
  1055. */
  1056. public function setFillColor(Zend_Pdf_Color $color);
  1057. ]]></programlisting>
  1058. <programlisting language="php"><![CDATA[
  1059. /**
  1060. * Hole die Füllfarbe.
  1061. *
  1062. * @return Zend_Pdf_Color|null
  1063. */
  1064. public function getFillColor();
  1065. ]]></programlisting>
  1066. <programlisting language="php"><![CDATA[
  1067. /**
  1068. * Ändere den Zeichensatz.
  1069. *
  1070. * @param Zend_Pdf_Resource_Font $font
  1071. * @param float $fontSize
  1072. * @return Zend_Pdf_Page
  1073. */
  1074. public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
  1075. ]]></programlisting>
  1076. <programlisting language="php"><![CDATA[
  1077. /**
  1078. * Ändere die Schriftgröße
  1079. *
  1080. * @param float $fontSize
  1081. * @return Zend_Pdf_Page
  1082. */
  1083. public function setFontSize($fontSize);
  1084. ]]></programlisting>
  1085. <programlisting language="php"><![CDATA[
  1086. /**
  1087. * Hole den Zeichensatz.
  1088. *
  1089. * @return Zend_Pdf_Resource_Font $font
  1090. */
  1091. public function getFont();
  1092. ]]></programlisting>
  1093. <programlisting language="php"><![CDATA[
  1094. /**
  1095. * Hole die Schriftgröße
  1096. *
  1097. * @return float $fontSize
  1098. */
  1099. public function getFontSize();
  1100. ]]></programlisting>
  1101. </sect2>
  1102. <sect2 id="zend.pdf.drawing.alpha">
  1103. <title>Transparenz</title>
  1104. <para>
  1105. Das <classname>Zend_Pdf</classname> Modul unterstützt die Handhabung von Transparenz.
  1106. </para>
  1107. <para>
  1108. Transparenz kann durch Verwendung der <methodname>Zend_Pdf_Page::setAlpha()</methodname>
  1109. Methode gesetzt werden:
  1110. <programlisting language="php"><![CDATA[
  1111. /**
  1112. * Setzt die Transparenz
  1113. *
  1114. * $alpha == 0 - Transparent
  1115. * $alpha == 1 - Opaque
  1116. *
  1117. * Von PDF unterstützte Transparent-Modi:
  1118. * Normal (standard), Multiply, Screen, Overlay, Darken, Lighten,
  1119. * ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion
  1120. *
  1121. * @param float $alpha
  1122. * @param string $mode
  1123. * @throws Zend_Pdf_Exception
  1124. * @return Zend_Pdf_Page
  1125. */
  1126. public function setAlpha($alpha, $mode = 'Normal');
  1127. ]]></programlisting>
  1128. </para>
  1129. </sect2>
  1130. </sect1>