source: branches/version-2_5-dev/data/module/fpdf/fpdi2tcpdf_bridge.php @ 20116

Revision 20116, 5.0 KB checked in by nanasess, 13 years ago (diff)
  • svn properties を再設定
  • 再設定用のスクリプト追加
  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php; charset=UTF-8
Line 
1<?php
2//
3//  FPDI - Version 1.4
4//
5//    Copyright 2004-2010 Setasign - Jan Slabon
6//
7//  Licensed under the Apache License, Version 2.0 (the "License");
8//  you may not use this file except in compliance with the License.
9//  You may obtain a copy of the License at
10//
11//      http://www.apache.org/licenses/LICENSE-2.0
12//
13//  Unless required by applicable law or agreed to in writing, software
14//  distributed under the License is distributed on an "AS IS" BASIS,
15//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16//  See the License for the specific language governing permissions and
17//  limitations under the License.
18//
19
20/**
21 * This class is used as a bridge between TCPDF and FPDI
22 * and will create the possibility to use both FPDF and TCPDF
23 * via one FPDI version.
24 *
25 * We'll simply remap TCPDF to FPDF again.
26 *
27 * It'll be loaded and extended by FPDF_TPL.
28 */
29class FPDF extends TCPDF {
30   
31    function _putstream($s) {
32        $this->_out($this->_getstream($s));
33    }
34   
35    function _getxobjectdict() {
36        $out = parent::_getxobjectdict();
37        if (count($this->tpls)) {
38            foreach($this->tpls as $tplidx => $tpl) {
39                $out .= sprintf('%s%d %d 0 R', $this->tplprefix, $tplidx, $tpl['n']);
40            }
41        }
42       
43        return $out;
44    }
45   
46    /**
47     * Encryption of imported data by FPDI
48     *
49     * @param array $value
50     */
51    function pdf_write_value(&$value) {
52        switch ($value[0]) {
53            case PDF_TYPE_STRING:
54                if ($this->encrypted) {
55                    $value[1] = $this->_unescape($value[1]);
56                    $value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]);
57                    $value[1] = $this->_escape($value[1]);
58                }
59                break;
60               
61            case PDF_TYPE_STREAM:
62                if ($this->encrypted) {
63                    $value[2][1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[2][1]);
64                }
65                break;
66               
67            case PDF_TYPE_HEX:
68                if ($this->encrypted) {
69                    $value[1] = $this->hex2str($value[1]);
70                    $value[1] = $this->_RC4($this->_objectkey($this->_current_obj_id), $value[1]);
71                   
72                    // remake hexstring of encrypted string
73                    $value[1] = $this->str2hex($value[1]);
74                }
75                break;
76        }
77    }
78   
79    /**
80     * Unescapes a PDF string
81     *
82     * @param string $s
83     * @return string
84     */
85    function _unescape($s) {
86        $out = '';
87        for ($count = 0, $n = strlen($s); $count < $n; $count++) {
88            if ($s[$count] != '\\' || $count == $n-1) {
89                $out .= $s[$count];
90            } else {
91                switch ($s[++$count]) {
92                    case ')':
93                    case '(':
94                    case '\\':
95                        $out .= $s[$count];
96                        break;
97                    case 'f':
98                        $out .= chr(0x0C);
99                        break;
100                    case 'b':
101                        $out .= chr(0x08);
102                        break;
103                    case 't':
104                        $out .= chr(0x09);
105                        break;
106                    case 'r':
107                        $out .= chr(0x0D);
108                        break;
109                    case 'n':
110                        $out .= chr(0x0A);
111                        break;
112                    case "\r":
113                        if ($count != $n-1 && $s[$count+1] == "\n")
114                            $count++;
115                        break;
116                    case "\n":
117                        break;
118                    default:
119                        // Octal-Values
120                        if (ord($s[$count]) >= ord('0') &&
121                            ord($s[$count]) <= ord('9')) {
122                            $oct = ''. $s[$count];
123                               
124                            if (ord($s[$count+1]) >= ord('0') &&
125                                ord($s[$count+1]) <= ord('9')) {
126                                $oct .= $s[++$count];
127                               
128                                if (ord($s[$count+1]) >= ord('0') &&
129                                    ord($s[$count+1]) <= ord('9')) {
130                                    $oct .= $s[++$count];   
131                                }                           
132                            }
133                           
134                            $out .= chr(octdec($oct));
135                        } else {
136                            $out .= $s[$count];
137                        }
138                }
139            }
140        }
141        return $out;
142    }
143   
144    /**
145     * Hexadecimal to string
146     *
147     * @param string $hex
148     * @return string
149     */
150    function hex2str($hex) {
151        return pack('H*', str_replace(array("\r", "\n", ' '), '', $hex));
152    }
153   
154    /**
155     * String to hexadecimal
156     *
157     * @param string $str
158     * @return string
159     */
160    function str2hex($str) {
161        return current(unpack('H*', $str));
162    }
163}
Note: See TracBrowser for help on using the repository browser.