source: branches/2.2/filemanager/tp/dompdf/include/renderer.cls.php @ 3019

Revision 3019, 5.7 KB checked in by amuller, 14 years ago (diff)

Ticket #1135 - Corrigindo CSS e adicionando filemanager

Line 
1<?php
2/**
3 * DOMPDF - PHP5 HTML to PDF renderer
4 *
5 * File: $RCSfile: renderer.cls.php,v $
6 * Created on: 2004-06-03
7 *
8 * Copyright (c) 2004 - Benj Carson <benjcarson@digitaljunkies.ca>
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with this library in the file LICENSE.LGPL; if not, write to the
22 * Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
23 * 02111-1307 USA
24 *
25 * Alternatively, you may distribute this software under the terms of the
26 * PHP License, version 3.0 or later.  A copy of this license should have
27 * been distributed with this file in the file LICENSE.PHP .  If this is not
28 * the case, you can obtain a copy at http://www.php.net/license/3_0.txt.
29 *
30 * The latest version of DOMPDF might be available at:
31 * http://www.digitaljunkies.ca/dompdf
32 *
33 * @link http://www.digitaljunkies.ca/dompdf
34 * @copyright 2004 Benj Carson
35 * @author Benj Carson <benjcarson@digitaljunkies.ca>
36 * @package dompdf
37 * @version 0.5.1
38 */
39
40/* $Id: renderer.cls.php 186 2009-10-19 22:42:06Z eclecticgeek@gmail.com $ */
41
42/**
43 * Concrete renderer
44 *
45 * Instantiates several specific renderers in order to render any given
46 * frame.
47 *
48 * @access private
49 * @package dompdf
50 */
51class Renderer extends Abstract_Renderer {
52
53  /**
54   * Array of renderers for specific frame types
55   *
56   * @var array
57   */
58  protected $_renderers;
59   
60  /**
61   * Cache of the callbacks array
62   *
63   * @var array
64   */
65  private $_callbacks;
66   
67  /**
68   * Advance the canvas to the next page
69   */ 
70  function new_page() {
71    $this->_canvas->new_page();
72  }
73
74  /**
75   * Render frames recursively
76   *
77   * @param Frame $frame the frame to render
78   */
79  function render(Frame $frame) {   
80    global $_dompdf_debug;
81
82    if ( $_dompdf_debug ) {
83      echo $frame;
84      flush();
85    }
86
87    $display = $frame->get_style()->display;
88   
89    switch ($display) {
90     
91    case "block":
92    case "list-item":
93    case "inline-block":
94    case "table":
95    case "table-row-group":
96    case "table-header-group":
97    case "table-footer-group":
98    case "inline-table":
99      $this->_render_frame("block", $frame);
100      break;
101
102    case "inline":
103      if ( $frame->get_node()->nodeName == "#text" )
104        $this->_render_frame("text", $frame);
105      else
106        $this->_render_frame("inline", $frame);
107      break;
108
109    case "table-cell":
110      $this->_render_frame("table-cell", $frame);
111      break;
112
113    case "-dompdf-list-bullet":
114      $this->_render_frame("list-bullet", $frame);
115      break;
116
117    case "-dompdf-image":
118      $this->_render_frame("image", $frame);
119      break;
120     
121    case "none":
122      $node = $frame->get_node();
123         
124      if ( $node->nodeName == "script" &&
125           ( $node->getAttribute("type") == "text/php" ||
126             $node->getAttribute("language") == "php" ) ) {
127        // Evaluate embedded php scripts
128        $this->_render_frame("php", $frame);
129      }
130
131      // Don't render children, so skip to next iter
132      return;
133     
134    default:
135      break;
136
137    }
138
139    // Check for begin frame callback
140    $this->_check_callbacks("begin_frame", $frame);
141   
142    foreach ($frame->get_children() as $child)
143      $this->render($child);
144
145    // Check for end frame callback
146    $this->_check_callbacks("end_frame", $frame);
147   
148  }
149 
150  /**
151   * Check for callbacks that need to be performed when a given event
152   * gets triggered on a frame
153   *
154   * @param string $event the type of event
155   * @param Frame $frame the frame that event is triggered on
156   */
157  protected function _check_callbacks($event, $frame) {
158    if (!isset($this->_callbacks)) {
159      $this->_callbacks = $this->_dompdf->get_callbacks();
160    }
161   
162    if (is_array($this->_callbacks) && isset($this->_callbacks[$event])) {
163      $info = array(0 => $this->_canvas, "canvas" => $this->_canvas,
164                    1 => $frame, "frame" => $frame);
165      $fs = $this->_callbacks[$event];
166      foreach ($fs as $f) {
167        if (is_callable($f)) {
168          if (is_array($f)) {
169            $f[0]->$f[1]($info);
170          } else {
171            $f($info);
172          }
173        }
174      }
175    }
176  }
177
178  /**
179   * Render a single frame
180   *
181   * Creates Renderer objects on demand
182   *
183   * @param string $type type of renderer to use
184   * @param Frame $frame the frame to render
185   */
186  protected function _render_frame($type, $frame) {
187
188    if ( !isset($this->_renderers[$type]) ) {
189     
190      switch ($type) {
191      case "block":
192        $this->_renderers["block"] = new Block_Renderer($this->_dompdf);
193        break;
194
195      case "inline":
196        $this->_renderers["inline"] = new Inline_Renderer($this->_dompdf);
197        break;
198
199      case "text":
200        $this->_renderers["text"] = new Text_Renderer($this->_dompdf);
201        break;
202
203      case "image":
204        $this->_renderers["image"] = new Image_Renderer($this->_dompdf);
205        break;
206     
207      case "table-cell":
208        $this->_renderers["table-cell"] = new Table_Cell_Renderer($this->_dompdf);
209        break;
210
211      case "list-bullet":
212        $this->_renderers["list-bullet"] = new List_Bullet_Renderer($this->_dompdf);
213        break;
214
215      case "php":
216        $this->_renderers["php"] = new PHP_Evaluator($this->_canvas);
217        break;
218
219      }
220    }
221   
222    $this->_renderers[$type]->render($frame);
223
224  }
225}
226
227?>
Note: See TracBrowser for help on using the repository browser.