La librairie fpdfi etant une source different de fpdf, elle est mise separee et n'est plus melangee.

This commit is contained in:
Laurent Destailleur 2007-07-30 23:22:06 +00:00
parent fe50376ee0
commit 8f8a423a87
35 changed files with 2278 additions and 2335 deletions

View File

@ -1,5 +1,6 @@
<?PHP <?PHP
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -18,11 +19,22 @@
* *
* $Id$ * $Id$
* $Source$ * $Source$
*
*/ */
require_once(FPDF_PATH.'fpdi_protection.php'); /**
\file htdocs/expedition/mods/methode_expedition.modules.php
\ingroup expedition
\brief Fichier contenant la classe mère de generation de bon de livraison en PDF
et la classe mère de numérotation des bons de livraisons
\version $Revision$
*/
require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
/**
\class methode_expedition
\brief Classe mère des methodes expeditions
*/
Class methode_expedition Class methode_expedition
{ {
@ -79,17 +91,19 @@ Class methode_expedition
if (file_exists($dir)) if (file_exists($dir))
{ {
$pdf=new FPDI_Protection('P','mm','A4');
// Protection et encryption du pdf // Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm','A4');
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -31,8 +31,7 @@
et la classe mère de numérotation des commandes fournisseurs et la classe mère de numérotation des commandes fournisseurs
\version $Revision$ \version $Revision$
*/ */
require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
require_once(FPDF_PATH.'fpdi_protection.php');
/** /**

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com> * Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com>
* Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be> * Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
* *
@ -174,17 +174,20 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
{ {
$nblignes = sizeof($com->lignes); $nblignes = sizeof($com->lignes);
// Initialisation document vierge
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf // Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -17,10 +17,9 @@
* *
* $Id$ * $Id$
* $Source$ * $Source$
*
*/ */
require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
require_once(FPDF_PATH.'fpdi_protection.php');
class DolibarrPdfBarCode extends FPDF { class DolibarrPdfBarCode extends FPDF {

View File

@ -1,413 +0,0 @@
<?php
//
// FPDI - Version 1.1
//
// Copyright 2004,2005 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
define ('PDF_TYPE_NULL', 0);
define ('PDF_TYPE_NUMERIC', 1);
define ('PDF_TYPE_TOKEN', 2);
define ('PDF_TYPE_HEX', 3);
define ('PDF_TYPE_STRING', 4);
define ('PDF_TYPE_DICTIONARY', 5);
define ('PDF_TYPE_ARRAY', 6);
define ('PDF_TYPE_OBJDEC', 7);
define ('PDF_TYPE_OBJREF', 8);
define ('PDF_TYPE_OBJECT', 9);
define ('PDF_TYPE_STREAM', 10);
ini_set('auto_detect_line_endings',1); // Strongly required!
require_once(FPDF_PATH.'fpdf_tpl.php');
require_once(FPDF_PATH.'fpdi_pdf_parser.php');
class fpdi extends fpdf_tpl {
/**
* Actual filename
* @var string
*/
var $current_filename;
/**
* Parser-Objects
* @var array
*/
var $parsers;
/**
* Current parser
* @var object
*/
var $current_parser;
/**
* FPDF/FPDI - PDF-Version
* @var double
*/
var $PDFVersion = 1.3;
/**
* Highest version of imported PDF
* @var double
*/
var $importVersion = 1.3;
/**
* object stack
* @var array
*/
var $obj_stack;
/**
* done object stack
* @var array
*/
var $don_obj_stack;
/**
* Current Object Id.
* @var integer
*/
var $current_obj_id;
/**
* Constructor
* See FPDF-Manual
*/
function fpdi($orientation='P',$unit='mm',$format='A4') {
parent::fpdf_tpl($orientation,$unit,$format);
}
/**
* Set a source-file
*
* @param string $filename a valid filename
* @return int number of available pages
*/
function setSourceFile($filename) {
$this->current_filename = $filename;
$fn =& $this->current_filename;
$this->parsers[$fn] = new fpdi_pdf_parser($fn,$this);
$this->current_parser =& $this->parsers[$fn];
return $this->parsers[$fn]->getPageCount();
}
/**
* Import a page
*
* @param int $pageno pagenumber
* @return int Index of imported page - to use with fpdf_tpl::useTemplate()
*/
function ImportPage($pageno) {
$fn =& $this->current_filename;
$this->parsers[$fn]->setPageno($pageno);
$this->tpl++;
$this->tpls[$this->tpl] = array();
$this->tpls[$this->tpl]['parser'] =& $this->parsers[$fn];
$this->tpls[$this->tpl]['resources'] = $this->parsers[$fn]->getPageResources();
$this->tpls[$this->tpl]['buffer'] = $this->parsers[$fn]->getContent();
// $mediabox holds the dimensions of the source page
$mediabox = $this->parsers[$fn]->getPageMediaBox($pageno);
// To build array that can used by pdf_tpl::useTemplate()
$this->tpls[$this->tpl] = array_merge($this->tpls[$this->tpl],$mediabox);
return $this->tpl;
}
/**
* Private method, that rebuilds all needed objects of source files
*/
function _putOobjects() {
if (is_array($this->parsers) && count($this->parsers) > 0) {
foreach($this->parsers AS $filename => $p) {
$this->current_parser =& $this->parsers[$filename];
if (is_array($this->obj_stack[$filename])) {
while($n = key($this->obj_stack[$filename])) {
$nObj = $this->current_parser->pdf_resolve_object($this->current_parser->c,$this->obj_stack[$filename][$n][1]);
$this->_newobj($this->obj_stack[$filename][$n][0]);
if ($nObj[0] == PDF_TYPE_STREAM) {
$this->pdf_write_value ($nObj);
} else {
$this->pdf_write_value ($nObj[1]);
}
$this->_out('endobj');
$this->obj_stack[$filename][$n] = null; // free memory
unset($this->obj_stack[$filename][$n]);
reset($this->obj_stack[$filename]);
}
}
}
}
}
/**
* Rewritten for handling own defined PDF-Versions
* only needed by FPDF 1.52
*/
function _begindoc() {
//Start document
$this->state=1;
}
/**
* Sets the PDF Version to the highest of imported documents
*/
function setVersion() {
if ($this->importVersion > $this->PDFVersion)
$this->PDFVersion = $this->importVersion;
if (!method_exists($this, '_putheader')) {
$this->buffer = '%PDF-'.$this->PDFVersion."\n".$this->buffer;
}
}
/**
* rewritten for handling higher PDF Versions
*/
function _enddoc() {
$this->setVersion();
parent::_enddoc();
}
/**
* Put resources
*/
function _putresources() {
$this->_putfonts();
$this->_putimages();
$this->_puttemplates();
$this->_putOobjects();
//Resource dictionary
$this->offsets[2]=strlen($this->buffer);
$this->_out('2 0 obj');
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
$this->_out('/Font <<');
foreach($this->fonts as $font)
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
if(count($this->images) || count($this->tpls))
{
$this->_out('/XObject <<');
if (count($this->images)) {
foreach($this->images as $image)
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
if (count($this->tpls)) {
foreach($this->tpls as $tplidx => $tpl)
$this->_out($this->tplprefix.$tplidx.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
$this->_out('endobj');
}
/**
* Private Method that writes /XObjects - "Templates"
*/
function _puttemplates() {
$filter=($this->compress) ? '/Filter /FlateDecode ' : '';
reset($this->tpls);
foreach($this->tpls AS $tplidx => $tpl) {
$p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
$this->_newobj();
$this->tpls[$tplidx]['n'] = $this->n;
$this->_out('<<'.$filter.'/Type /XObject');
$this->_out('/Subtype /Form');
$this->_out('/FormType 1');
$this->_out(sprintf('/BBox [%.2f %.2f %.2f %.2f]',$tpl['x']*$this->k, ($tpl['h']-$tpl['y'])*$this->k, $tpl['w']*$this->k, ($tpl['h']-$tpl['y']-$tpl['h'])*$this->k));
$this->_out('/Resources ');
if ($tpl['resources']) {
$this->current_parser =& $tpl['parser'];
$this->pdf_write_value($tpl['resources']);
} else {
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
if (count($this->res['tpl'][$tplidx]['fonts'])) {
$this->_out('/Font <<');
foreach($this->res['tpl'][$tplidx]['fonts'] as $font)
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
}
if(count($this->res['tpl'][$tplidx]['images']) || count($this->res['tpl'][$tplidx]['tpls']))
{
$this->_out('/XObject <<');
if (count($this->res['tpl'][$tplidx]['images'])) {
foreach($this->res['tpl'][$tplidx]['images'] as $image)
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
if (count($this->res['tpl'][$tplidx]['tpls'])) {
foreach($this->res['tpl'][$tplidx]['tpls'] as $i => $tpl)
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
}
$this->_out('/Length '.strlen($p).' >>');
$this->_putstream($p);
$this->_out('endobj');
}
}
/**
* Rewritten to handle existing own defined objects
*/
function _newobj($obj_id=false,$onlynewobj=false) {
if (!$obj_id) {
$obj_id = ++$this->n;
}
//Begin a new object
if (!$onlynewobj) {
$this->offsets[$obj_id]=strlen($this->buffer);
$this->_out($obj_id.' 0 obj');
$this->current_obj_id = $obj_id; // for later use with encryption
}
}
/**
* Writes a value
* Needed to rebuild the source document
*
* @param mixed $value A PDF-Value. Structure of values see cases in this method
*/
function pdf_write_value(&$value)
{
switch ($value[0]) {
case PDF_TYPE_NUMERIC :
case PDF_TYPE_TOKEN :
// A numeric value or a token.
// Simply output them
$this->_out($value[1]." ");
break;
case PDF_TYPE_ARRAY :
// An array. Output the proper
// structure and move on.
$this->_out("[",false);
for ($i = 0; $i < count($value[1]); $i++) {
$this->pdf_write_value($value[1][$i]);
}
$this->_out("]");
break;
case PDF_TYPE_DICTIONARY :
// A dictionary.
$this->_out("<<",false);
reset ($value[1]);
while (list($k, $v) = each($value[1])) {
$this->_out($k . " ",false);
$this->pdf_write_value($v);
}
$this->_out(">>");
break;
case PDF_TYPE_OBJREF :
// An indirect object reference
// Fill the object stack if needed
if (!isset($this->don_obj_stack[$this->current_parser->filename][$value[1]])) {
$this->_newobj(false,true);
$this->obj_stack[$this->current_parser->filename][$value[1]] = array($this->n,$value);
$this->don_obj_stack[$this->current_parser->filename][$value[1]] = array($this->n,$value);
}
$objid = $this->don_obj_stack[$this->current_parser->filename][$value[1]][0];
$this->_out("{$objid} 0 R"); //{$value[2]}
break;
case PDF_TYPE_STRING :
// A string.
$this->_out('(' . $value[1] . ')');
break;
case PDF_TYPE_STREAM :
// A stream. First, output the
// stream dictionary, then the
// stream data itself.
$this->pdf_write_value($value[1]);
$this->_out("stream");
$this->_out($value[2][1]);
$this->_out("endstream");
break;
case PDF_TYPE_HEX :
$this->_out("<" . $value[1] . ">");
break;
case PDF_TYPE_NULL :
// The null object.
$this->_out("null");
break;
}
}
/**
* Private Method
*/
function _out($s,$ln=true) {
//Add a line to the document
if ($this->state==2) {
if (!$this->intpl)
$this->pages[$this->page].=$s.($ln == true ? "\n" : '');
else
$this->tpls[$this->tpl]['buffer'] .= $s.($ln == true ? "\n" : '');
} else {
$this->buffer.=$s.($ln == true ? "\n" : '');
}
}
/**
* close all files opened by parsers
*/
function closeParsers() {
foreach ($this->parsers as $parser){
$parser->closeFile();
}
}
}
?>

View File

@ -1,271 +0,0 @@
<?php
/****************************************************************************
* Software: FPDI_Protection *
* Version: 1.0 *
* Date: 2005/06/14 *
* Author: Klemen VODOPIVEC, Jan Slabon *
* License: Freeware *
* *
* You may use and modify this software as you wish as stated in original *
* FPDF package. *
* *
* Infos (by Jan Slabon): *
* This class extends the FPDI-class available at http://fpdi.setasign.de *
* so that you can import pages and create new protected pdf files. *
* *
* This release is dedicated to my 10 days old son Fin Frederik (*2005/06/04)*
* If you want to make him/my family/me happy and bring forward the *
* development of free/open source software make a donation on *
* http://fpdi.setasign.de ;-) *
* *
****************************************************************************/
require_once(FPDF_PATH.'fpdi.php');
class FPDI_Protection extends fpdi {
var $encrypted; //whether document is protected
var $Uvalue; //U entry in pdf document
var $Ovalue; //O entry in pdf document
var $Pvalue; //P entry in pdf document
var $enc_obj_id; //encryption object id
var $last_rc4_key; //last RC4 key encrypted (cached for optimisation)
var $last_rc4_key_c; //last RC4 computed key
function FPDI_Protection($orientation='P',$unit='mm',$format='A4')
{
parent::FPDI($orientation,$unit,$format);
$this->encrypted=false;
$this->last_rc4_key = '';
$this->padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08".
"\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
}
/**
* Function to set permissions as well as user and owner passwords
*
* - permissions is an array with values taken from the following list:
* 40bit: copy, print, modify, annot-forms
* 128bit: fill-in, screenreaders, assemble, degraded-print
* If a value is present it means that the permission is granted
* - If a user password is set, user will be prompted before document is opened
* - If an owner password is set, document can be opened in privilege mode with no
* restriction if that password is entered
*/
function SetProtection($permissions=array(),$user_pass='',$owner_pass=null)
{
$options = array('print' => 4, 'modify' => 8, 'copy' => 16, 'annot-forms' => 32 );
$protection = 192;
foreach($permissions as $permission){
if (!isset($options[$permission]))
$this->Error('Incorrect permission: '.$permission);
$protection += $options[$permission];
}
if ($owner_pass === null)
$owner_pass = uniqid(rand());
$this->encrypted = true;
$this->_generateencryptionkey($user_pass, $owner_pass, $protection);
}
function _putstream($s)
{
if ($this->encrypted) {
$s = $this->_RC4($this->_objectkey($this->current_obj_id), $s);
}
parent::_putstream($s);
}
function _textstring($s)
{
if ($this->encrypted) {
$s = $this->_RC4($this->_objectkey($this->current_obj_id), $s);
}
return parent::_textstring($s);
}
/**
* Compute key depending on object number where the encrypted data is stored
*/
function _objectkey($n)
{
return substr($this->_md5_16($this->encryption_key.pack('VXxx',$n)),0,10);
}
/**
* Escape special characters
*/
function _escape($s)
{
return str_replace(
array('\\',')','(',"\r"),
array('\\\\','\\)','\\(','\\r'),$s);
}
function _putresources()
{
parent::_putresources();
if ($this->encrypted) {
$this->_newobj();
$this->enc_obj_id = $this->current_obj_id;
$this->_out('<<');
$this->_putencryption();
$this->_out('>>');
}
}
function _putencryption()
{
$this->_out('/Filter /Standard');
$this->_out('/V 1');
$this->_out('/R 2');
$this->_out('/O ('.$this->_escape($this->Ovalue).')');
$this->_out('/U ('.$this->_escape($this->Uvalue).')');
$this->_out('/P '.$this->Pvalue);
}
function _puttrailer()
{
parent::_puttrailer();
if ($this->encrypted) {
$this->_out('/Encrypt '.$this->enc_obj_id.' 0 R');
$this->_out('/ID [()()]');
}
}
/**
* RC4 is the standard encryption algorithm used in PDF format
*/
function _RC4($key, $text)
{
if ($this->last_rc4_key != $key) {
$k = str_repeat($key, 256/strlen($key)+1);
$rc4 = range(0,255);
$j = 0;
for ($i=0; $i<256; $i++){
$t = $rc4[$i];
$j = ($j + $t + ord($k{$i})) % 256;
$rc4[$i] = $rc4[$j];
$rc4[$j] = $t;
}
$this->last_rc4_key = $key;
$this->last_rc4_key_c = $rc4;
} else {
$rc4 = $this->last_rc4_key_c;
}
$len = strlen($text);
$a = 0;
$b = 0;
$out = '';
for ($i=0; $i<$len; $i++){
$a = ($a+1)%256;
$t= $rc4[$a];
$b = ($b+$t)%256;
$rc4[$a] = $rc4[$b];
$rc4[$b] = $t;
$k = $rc4[($rc4[$a]+$rc4[$b])%256];
$out.=chr(ord($text{$i}) ^ $k);
}
return $out;
}
/**
* Get MD5 as binary string
*/
function _md5_16($string)
{
return pack('H*',md5($string));
}
/**
* Compute O value
*/
function _Ovalue($user_pass, $owner_pass)
{
$tmp = $this->_md5_16($owner_pass);
$owner_RC4_key = substr($tmp,0,5);
return $this->_RC4($owner_RC4_key, $user_pass);
}
/**
* Compute U value
*/
function _Uvalue()
{
return $this->_RC4($this->encryption_key, $this->padding);
}
/**
* Compute encryption key
*/
function _generateencryptionkey($user_pass, $owner_pass, $protection)
{
// Pad passwords
$user_pass = substr($user_pass.$this->padding,0,32);
$owner_pass = substr($owner_pass.$this->padding,0,32);
// Compute O value
$this->Ovalue = $this->_Ovalue($user_pass,$owner_pass);
// Compute encyption key
$tmp = $this->_md5_16($user_pass.$this->Ovalue.chr($protection)."\xFF\xFF\xFF");
$this->encryption_key = substr($tmp,0,5);
// Compute U value
$this->Uvalue = $this->_Uvalue();
// Compute P value
$this->Pvalue = -(($protection^255)+1);
}
function pdf_write_value(&$value) {
switch ($value[0]) {
case PDF_TYPE_STRING :
if ($this->encrypted) {
$value[1] = $this->_RC4($this->_objectkey($this->current_obj_id), $value[1]);
$value[1] = $this->_escape($value[1]);
}
break;
case PDF_TYPE_STREAM :
if ($this->encrypted) {
$value[2][1] = $this->_RC4($this->_objectkey($this->current_obj_id), $value[2][1]);
}
break;
case PDF_TYPE_HEX :
if ($this->encrypted) {
$value[1] = $this->hex2str($value[1]);
$value[1] = $this->_RC4($this->_objectkey($this->current_obj_id), $value[1]);
// remake hexstring of encrypted string
$value[1] = $this->str2hex($value[1]);
}
break;
}
parent::pdf_write_value($value);
}
function hex2str($hex) {
return pack("H*", str_replace(array("\r","\n"),"", $hex));
}
function str2hex($str) {
return current(unpack("H*",$str));
}
}
?>

View File

@ -0,0 +1,5 @@
This directory contains all FPDFI librairies:
- FPDI
- FPDI_TPL
- FPDI_Protection
Found on http://www.setasign.de/products/pdf-php-solutions/fpdi/

View File

@ -0,0 +1,97 @@
<?php
//
// FPDI - Version 1.2
//
// Copyright 2004-2007 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
if (!defined("ORD_z"))
define("ORD_z",ord('z'));
if (!defined("ORD_exclmark"))
define("ORD_exclmark", ord('!'));
if (!defined("ORD_u"))
define("ORD_u", ord("u"));
if (!defined("ORD_tilde"))
define("ORD_tilde", ord('~'));
class ASCII85Decode {
function ASCII85Decode(&$fpdi) {
$this->fpdi =& $fpdi;
}
function decode($in) {
$out = "";
$state = 0;
$chn = null;
$l = strlen($in);
for ($k = 0; $k < $l; ++$k) {
$ch = ord($in[$k]) & 0xff;
if ($ch == ORD_tilde) {
break;
}
if (preg_match("/^\s$/",chr($ch))) {
continue;
}
if ($ch == ORD_z && $state == 0) {
$out .= chr(0).chr(0).chr(0).chr(0);
continue;
}
if ($ch < ORD_exclmark || $ch > ORD_u) {
$this->fpdi->error("Illegal character in ASCII85Decode.");
}
$chn[$state++] = $ch - ORD_exclmark;
if ($state == 5) {
$state = 0;
$r = 0;
for ($j = 0; $j < 5; ++$j)
$r = $r * 85 + $chn[$j];
$out .= chr($r >> 24);
$out .= chr($r >> 16);
$out .= chr($r >> 8);
$out .= chr($r);
}
}
$r = 0;
if ($state == 1)
$this->fpdi->error("Illegal length in ASCII85Decode.");
if ($state == 2) {
$r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1]+1) * 85 * 85 * 85;
$out .= chr($r >> 24);
}
else if ($state == 3) {
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2]+1) * 85 * 85;
$out .= chr($r >> 24);
$out .= chr($r >> 16);
}
else if ($state == 4) {
$r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3]+1) * 85 ;
$out .= chr($r >> 24);
$out .= chr($r >> 16);
$out .= chr($r >> 8);
}
return $out;
}
}
?>

View File

@ -0,0 +1,151 @@
<?php
//
// FPDI - Version 1.2
//
// Copyright 2004-2007 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
class LZWDecode {
var $sTable = array();
var $data = null;
var $tIdx;
var $bitsToGet = 9;
var $bytePointer;
var $bitPointer;
var $nextData = 0;
var $nextBits = 0;
var $andTable = array(511, 1023, 2047, 4095);
function LZWDecode(&$fpdi) {
$this->fpdi =& $fpdi;
}
/**
* Method to decode LZW compressed data.
*
* @param string data The compressed data.
*/
function decode(&$data) {
if($data[0] == 0x00 && $data[1] == 0x01) {
$this->fpdi->error("LZW flavour not supported.");
}
$this->initsTable();
$this->data =& $data;
// Initialize pointers
$this->bytePointer = 0;
$this->bitPointer = 0;
$this->nextData = 0;
$this->nextBits = 0;
$oldCode = 0;
$string = "";
$uncompData = "";
while (($code = $this->getNextCode()) != 257) {
if ($code == 256) {
$this->initsTable();
$code = $this->getNextCode();
if ($code == 257) {
break;
}
$uncompData .= $this->sTable[$code];
$oldCode = $code;
} else {
if ($code < $this->tIdx) {
$string = $this->sTable[$code];
$uncompData .= $string;
$this->addStringToTable($this->sTable[$oldCode], $string[0]);
$oldCode = $code;
} else {
$string = $this->sTable[$oldCode];
$string = $string.$string[0];
$uncompData .= $string;
$this->addStringToTable($string);
$oldCode = $code;
}
}
}
return $uncompData;
}
/**
* Initialize the string table.
*/
function initsTable() {
$this->sTable = array();
for ($i = 0; $i < 256; $i++)
$this->sTable[$i] = chr($i);
$this->tIdx = 258;
$this->bitsToGet = 9;
}
/**
* Add a new string to the string table.
*/
function addStringToTable ($oldString, $newString="") {
$string = $oldString.$newString;
// Add this new String to the table
$this->sTable[$this->tIdx++] = $string;
if ($this->tIdx == 511) {
$this->bitsToGet = 10;
} else if ($this->tIdx == 1023) {
$this->bitsToGet = 11;
} else if ($this->tIdx == 2047) {
$this->bitsToGet = 12;
}
}
// Returns the next 9, 10, 11 or 12 bits
function getNextCode() {
if ($this->bytePointer == strlen($this->data))
return 257;
$this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
$this->nextBits += 8;
if ($this->nextBits < $this->bitsToGet) {
$this->nextData = ($this->nextData << 8) | (ord($this->data[$this->bytePointer++]) & 0xff);
$this->nextBits += 8;
}
$code = ($this->nextData >> ($this->nextBits - $this->bitsToGet)) & $this->andTable[$this->bitsToGet-9];
$this->nextBits -= $this->bitsToGet;
return $code;
}
}
?>

View File

@ -1,446 +1,385 @@
<?php <?php
// //
// fpdf_tpl - Version 1.0.2 // FPDF_TPL - Version 1.1.1
// //
// Copyright 2004,2005 Setasign - Jan Slabon // Copyright 2004-2007 Setasign - Jan Slabon
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
// You may obtain a copy of the License at // You may obtain a copy of the License at
// //
// http://www.apache.org/licenses/LICENSE-2.0 // http://www.apache.org/licenses/LICENSE-2.0
// //
// Unless required by applicable law or agreed to in writing, software // Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, // distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
require_once(FPDF_PATH.'fpdf.php'); require_once(FPDF_PATH."fpdf.php");
class fpdf_tpl extends fpdf { class FPDF_TPL extends FPDF {
/** /**
* Array of Tpl-Data * Array of Tpl-Data
* @var array * @var array
*/ */
var $tpls = array(); var $tpls = array();
/** /**
* Current Template-ID * Current Template-ID
* @var int * @var int
*/ */
var $tpl = 0; var $tpl = 0;
/** /**
* "In Template"-Flag * "In Template"-Flag
* @var boolean * @var boolean
*/ */
var $intpl = false; var $_intpl = false;
/** /**
* Nameprefix of Templates used in Resources-Dictonary * Nameprefix of Templates used in Resources-Dictonary
* @var string A String defining the Prefix used as Template-Object-Names. Have to beginn with an / * @var string A String defining the Prefix used as Template-Object-Names. Have to beginn with an /
*/ */
var $tplprefix = "/TPL"; var $tplprefix = "/TPL";
/** /**
* Nameprefix of Fonts used in Resources-Dictonary * Resources used By Templates and Pages
* (not realy needed, but for future versions with import-function needed) * @var array
* @var string */
*/ var $_res = array();
var $fontprefix = "/F";
/**
/** * Constructor
* Resources used By Templates and Pages * See FPDF-Documentation
* @var array * @param string $orientation
*/ * @param string $unit
var $res = array(); * @param mixed $format
*/
/** function fpdf_tpl($orientation='P',$unit='mm',$format='A4') {
* Constructor parent::fpdf($orientation,$unit,$format);
* See FPDF-Documentation }
* @param string $orientation
* @param string $unit /**
* @param mixed $format * Start a Template
*/ *
function fpdf_tpl($orientation='P',$unit='mm',$format='A4') { * This method starts a template. You can give own coordinates to build an own sized
parent::fpdf($orientation,$unit,$format); * Template. Pay attention, that the margins are adapted to the new templatesize.
} * If you want to write outside the template, for example to build a clipped Template,
* you have to set the Margins and "Cursor"-Position manual after beginTemplate-Call.
/** *
* Start a Template * If no parameter is given, the template uses the current page-size.
* * The Method returns an ID of the current Template. This ID is used later for using this template.
* This method starts a template. You can give own coordinates to build an own sized * Warning: A created Template is used in PDF at all events. Still if you don't use it after creation!
* Template. Pay attention, that the margins are adapted to the new templatesize. *
* If you want to write outside the template, for example to build a clipped Template, * @param int $x The x-coordinate given in user-unit
* you have to set the Margins and "Cursor"-Position manual after beginTemplate-Call. * @param int $y The y-coordinate given in user-unit
* * @param int $w The width given in user-unit
* If no parameter is given, the template uses the current page-size. * @param int $h The height given in user-unit
* The Method returns an ID of the current Template. This ID is used later for using this template. * @return int The ID of new created Template
* Warning: A created Template is used in PDF at all events. Still if you don't use it after creation! */
* function beginTemplate($x=null,$y=null,$w=null,$h=null) {
* @param int $x The x-coordinate given in user-unit if ($this->page <= 0)
* @param int $y The y-coordinate given in user-unit $this->error("You have to add a page to fpdf first!");
* @param int $w The width given in user-unit
* @param int $h The height given in user-unit if ($x == null)
* @return int The ID of new created Template $x = 0;
*/ if ($y == null)
function beginTemplate($x=null,$y=null,$w=null,$h=null) { $y = 0;
if ($this->page <= 0) if ($w == null)
$this->error("You have to add a page to fpdf first!"); $w = $this->w;
if ($h == null)
// Save settings $h = $this->h;
$this->tpl++;
$this->tpls[$this->tpl]['o_x'] = $this->x; // Save settings
$this->tpls[$this->tpl]['o_y'] = $this->y; $this->tpl++;
$this->tpls[$this->tpl]['o_AutoPageBreak'] = $this->AutoPageBreak; $tpl =& $this->tpls[$this->tpl];
$this->tpls[$this->tpl]['o_bMargin'] = $this->bMargin; $tpl = array(
$this->tpls[$this->tpl]['o_tMargin'] = $this->tMargin; 'o_x' => $this->x,
$this->tpls[$this->tpl]['o_lMargin'] = $this->lMargin; 'o_y' => $this->y,
$this->tpls[$this->tpl]['o_rMargin'] = $this->rMargin; 'o_AutoPageBreak' => $this->AutoPageBreak,
$this->tpls[$this->tpl]['o_h'] = $this->h; 'o_bMargin' => $this->bMargin,
$this->tpls[$this->tpl]['o_w'] = $this->w; 'o_tMargin' => $this->tMargin,
'o_lMargin' => $this->lMargin,
$this->SetAutoPageBreak(false); 'o_rMargin' => $this->rMargin,
'o_h' => $this->h,
if ($x == null) 'o_w' => $this->w,
$x = 0; 'buffer' => '',
if ($y == null) 'x' => $x,
$y = 0; 'y' => $y,
if ($w == null) 'w' => $w,
$w = $this->w; 'h' => $h
if ($h == null) );
$h = $this->h;
$this->SetAutoPageBreak(false);
// Define own high and width to calculate possitions correct
$this->h = $h; // Define own high and width to calculate possitions correct
$this->w = $w; $this->h = $h;
$this->w = $w;
$this->tpls[$this->tpl]['buffer'] = "";
$this->tpls[$this->tpl]['x'] = $x; $this->_intpl = true;
$this->tpls[$this->tpl]['y'] = $y; $this->SetXY($x+$this->lMargin,$y+$this->tMargin);
$this->tpls[$this->tpl]['w'] = $w; $this->SetRightMargin($this->w-$w+$this->rMargin);
$this->tpls[$this->tpl]['h'] = $h;
return $this->tpl;
$this->intpl = true; }
$this->SetXY($x+$this->lMargin,$y+$this->tMargin);
$this->SetRightMargin($this->w-$w+$this->rMargin); /**
* End Template
return $this->tpl; *
} * This method ends a template and reset initiated variables on beginTemplate.
*
/** * @return mixed If a template is opened, the ID is returned. If not a false is returned.
* End Template */
* function endTemplate() {
* This method ends a template and reset initiated variables on beginTemplate. if ($this->_intpl) {
* $this->_intpl = false;
* @return mixed If a template is opened, the ID is returned. If not a false is returned. $tpl =& $this->tpls[$this->tpl];
*/ $this->SetXY($tpl['o_x'], $tpl['o_y']);
function endTemplate() { $this->tMargin = $tpl['o_tMargin'];
if ($this->intpl) { $this->lMargin = $tpl['o_lMargin'];
$this->intpl = false; $this->rMargin = $tpl['o_rMargin'];
$this->SetAutoPageBreak($this->tpls[$this->tpl]['o_AutoPageBreak'],$this->tpls[$this->tpl]['o_bMargin']); $this->h = $tpl['o_h'];
$this->SetXY($this->tpls[$this->tpl]['o_x'],$this->tpls[$this->tpl]['o_y']); $this->w = $tpl['o_w'];
$this->tMargin = $this->tpls[$this->tpl]['o_tMargin']; $this->SetAutoPageBreak($tpl['o_AutoPageBreak'], $tpl['o_bMargin']);
$this->lMargin = $this->tpls[$this->tpl]['o_lMargin'];
$this->rMargin = $this->tpls[$this->tpl]['o_rMargin']; return $this->tpl;
$this->h = $this->tpls[$this->tpl]['o_h']; } else {
$this->w = $this->tpls[$this->tpl]['o_w']; return false;
return $this->tpl; }
} else { }
return false;
} /**
} * Use a Template in current Page or other Template
*
/** * You can use a template in a page or in another template.
* Use a Template in current Page or other Template * You can give the used template a new size like you use the Image()-method.
* * All parameters are optional. The width or height is calculated automaticaly
* You can use a template in a page or in another template. * if one is given. If no parameter is given the origin size as defined in
* You can give the used template a new size like you use the Image()-method. * beginTemplate() is used.
* All parameters are optional. The width or height is calculated automaticaly * The calculated or used width and height are returned as an array.
* if one is given. If no parameter is given the origin size as defined in *
* beginTemplate() is used. * @param int $tplidx A valid template-Id
* The calculated or used width and height are returned as an array. * @param int $_x The x-position
* * @param int $_y The y-position
* @param int $tplidx A valid template-Id * @param int $_w The new width of the template
* @param int $_x The x-position * @param int $_h The new height of the template
* @param int $_y The y-position * @retrun array The height and width of the template
* @param int $_w The new width of the template */
* @param int $_h The new height of the template function useTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0) {
* @retrun array The height and width of the template if ($this->page <= 0)
*/ $this->error("You have to add a page to fpdf first!");
function useTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0) {
if ($this->page <= 0) if (!isset($this->tpls[$tplidx]))
$this->error("You have to add a page to fpdf first!"); $this->error("Template does not exist!");
if (!$this->tpls[$tplidx]) if ($this->_intpl) {
$this->error("Template does not exist!"); $this->_res['tpl'][$this->tpl]['tpls'][$tplidx] =& $this->tpls[$tplidx];
}
if ($this->intpl) {
$this->res['tpl'][$this->tpl]['tpls'][$tplidx] =& $this->tpls[$tplidx]; $tpl =& $this->tpls[$tplidx];
} $x = $tpl['x'];
extract($this->tpls[$tplidx]); $y = $tpl['y'];
$w = $tpl['w'];
if ($_x == null) $h = $tpl['h'];
$_x = $x;
if ($_y == null) if ($_x == null)
$_y = $y; $_x = $x;
$wh = $this->getTemplateSize($tplidx,$_w,$_h); if ($_y == null)
$_w = $wh['w']; $_y = $y;
$_h = $wh['h']; $wh = $this->getTemplateSize($tplidx,$_w,$_h);
$_w = $wh['w'];
$this->_out(sprintf("q %.4f 0 0 %.4f %.2f %.2f cm", ($_w/$w), ($_h/$h), $_x*$this->k, ($this->h-($_y+$_h))*$this->k)); // Translate $_h = $wh['h'];
$this->_out($this->tplprefix.$tplidx." Do Q");
$this->_out(sprintf("q %.4f 0 0 %.4f %.2f %.2f cm", ($_w/$w), ($_h/$h), $_x*$this->k, ($this->h-($_y+$_h))*$this->k)); // Translate
return array("w" => $_w, "h" => $_h); $this->_out($this->tplprefix.$tplidx." Do Q");
}
return array("w" => $_w, "h" => $_h);
/** }
* Get The calculated Size of a Template
* /**
* If one size is given, this method calculates the other one. * Get The calculated Size of a Template
* *
* @param int $tplidx A valid template-Id * If one size is given, this method calculates the other one.
* @param int $_w The width of the template *
* @param int $_h The height of the template * @param int $tplidx A valid template-Id
* @return array The height and width of the template * @param int $_w The width of the template
*/ * @param int $_h The height of the template
function getTemplateSize($tplidx, $_w=0, $_h=0) { * @return array The height and width of the template
if (!$this->tpls[$tplidx]) */
return false; function getTemplateSize($tplidx, $_w=0, $_h=0) {
if (!$this->tpls[$tplidx])
extract($this->tpls[$tplidx]); return false;
if ($_w == 0 and $_h == 0) {
$_w = $w; $tpl =& $this->tpls[$tplidx];
$_h = $h; $w = $tpl['w'];
} $h = $tpl['h'];
if($_w==0) if ($_w == 0 and $_h == 0) {
$_w=$_h*$w/$h; $_w = $w;
if($_h==0) $_h = $h;
$_h=$_w*$h/$w; }
return array("w" => $_w, "h" => $_h); if($_w==0)
} $_w=$_h*$w/$h;
if($_h==0)
/** $_h=$_w*$h/$w;
* See FPDF-Documentation ;-)
*/ return array("w" => $_w, "h" => $_h);
function SetFont($family,$style='',$size=0) { }
//Select a font; size given in points
global $fpdf_charwidths; /**
* See FPDF-Documentation ;-)
$family=strtolower($family); */
if($family=='') function SetFont($family,$style='',$size=0) {
$family=$this->FontFamily; /**
if($family=='arial') * force the resetting of font changes in a template
$family='helvetica'; */
elseif($family=='symbol' or $family=='zapfdingbats') if ($this->_intpl)
$style=''; $this->FontFamily = '';
$style=strtoupper($style);
if(is_int(strpos($style,'U'))) parent::SetFont($family, $style, $size);
{
$this->underline=true; $fontkey = $this->FontFamily.$this->FontStyle;
$style=str_replace('U','',$style);
} if ($this->_intpl) {
else $this->_res['tpl'][$this->tpl]['fonts'][$fontkey] =& $this->fonts[$fontkey];
$this->underline=false; } else {
if($style=='IB') $this->_res['page'][$this->page]['fonts'][$fontkey] =& $this->fonts[$fontkey];
$style='BI'; }
if($size==0) }
$size=$this->FontSizePt;
//Test if font is already selected /**
if($this->FontFamily==$family and $this->FontStyle==$style and $this->FontSizePt==$size and !$this->intpl) * See FPDF-Documentation ;-)
return; */
//Test if used for the first time function Image($file,$x,$y,$w=0,$h=0,$type='',$link='') {
$fontkey=$family.$style; parent::Image($file,$x,$y,$w,$h,$type,$link);
if(!isset($this->fonts[$fontkey])) if ($this->_intpl) {
{ $this->_res['tpl'][$this->tpl]['images'][$file] =& $this->images[$file];
//Check if one of the standard fonts } else {
if(isset($this->CoreFonts[$fontkey])) $this->_res['page'][$this->page]['images'][$file] =& $this->images[$file];
{ }
if(!isset($fpdf_charwidths[$fontkey])) }
{
//Load metric file /**
$file=$family; * See FPDF-Documentation ;-)
if($family=='times' or $family=='helvetica') *
$file.=strtolower($style); * AddPage is not available when you're "in" a template.
$file.='.php'; */
if(defined('FPDF_FONTPATH')) function AddPage($orientation='') {
$file=FPDF_FONTPATH.$file; if ($this->_intpl)
include($file); $this->Error('Adding pages in templates isn\'t possible!');
if(!isset($fpdf_charwidths[$fontkey])) parent::AddPage($orientation);
$this->Error('Could not include font metric file'); }
}
$i = $this->findNextAvailFont(); /**
$this->fonts[$fontkey]=array('i'=>$i,'type'=>'core','name'=>$this->CoreFonts[$fontkey],'up'=>-100,'ut'=>50,'cw'=>$fpdf_charwidths[$fontkey]); * Preserve adding Links in Templates ...won't work
} */
else function Link($x,$y,$w,$h,$link) {
$this->Error('Undefined font: '.$family.' '.$style); if ($this->_intpl)
} $this->Error('Using links in templates aren\'t possible!');
//Select it parent::Link($x,$y,$w,$h,$link);
$this->FontFamily=$family; }
$this->FontStyle=$style;
$this->FontSizePt=$size; function AddLink() {
$this->FontSize=$size/$this->k; if ($this->_intpl)
$this->CurrentFont=&$this->fonts[$fontkey]; $this->Error('Adding links in templates aren\'t possible!');
if($this->page>0) return parent::AddLink();
$this->_out(sprintf('BT '.$this->fontprefix.'%d %.2f Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); }
function SetLink($link,$y=0,$page=-1) {
if ($this->intpl) { if ($this->_intpl)
$this->res['tpl'][$this->tpl]['fonts'][$fontkey] =& $this->fonts[$fontkey]; $this->Error('Setting links in templates aren\'t possible!');
} else { parent::SetLink($link,$y,$page);
$this->res['page'][$this->page]['fonts'][$fontkey] =& $this->fonts[$fontkey]; }
}
} /**
* Private Method that writes the form xobjects
/** */
* Find the next available Font-No. function _putformxobjects() {
* $filter=($this->compress) ? '/Filter /FlateDecode ' : '';
* @return int reset($this->tpls);
*/ foreach($this->tpls AS $tplidx => $tpl) {
function findNextAvailFont() {
return count($this->fonts)+1; $p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
} $this->_newobj();
$this->tpls[$tplidx]['n'] = $this->n;
/** $this->_out('<<'.$filter.'/Type /XObject');
* See FPDF-Documentation ;-) $this->_out('/Subtype /Form');
*/ $this->_out('/FormType 1');
function Image($file,$x,$y,$w=0,$h=0,$type='',$link='') { $this->_out(sprintf('/BBox [%.2f %.2f %.2f %.2f]',$tpl['x']*$this->k, ($tpl['h']-$tpl['y'])*$this->k, $tpl['w']*$this->k, ($tpl['h']-$tpl['y']-$tpl['h'])*$this->k));
parent::Image($file,$x,$y,$w,$h,$type,$link); $this->_out('/Resources ');
if ($this->intpl) {
$this->res['tpl'][$this->tpl]['images'][$file] =& $this->images[$file]; $this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
} else { if (isset($this->_res['tpl'][$tplidx]['fonts']) && count($this->_res['tpl'][$tplidx]['fonts'])) {
$this->res['page'][$this->page]['images'][$file] =& $this->images[$file]; $this->_out('/Font <<');
} foreach($this->_res['tpl'][$tplidx]['fonts'] as $font)
} $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
/** }
* See FPDF-Documentation ;-) if(isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images']) ||
* isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls']))
* AddPage is not available when you're "in" a template. {
*/ $this->_out('/XObject <<');
function AddPage($orientation='') { if (isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images'])) {
if ($this->intpl) foreach($this->_res['tpl'][$tplidx]['images'] as $image)
$this->Error('Adding pages in templates isn\'t possible!'); $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
parent::AddPage($orientation); }
} if (isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls'])) {
foreach($this->_res['tpl'][$tplidx]['tpls'] as $i => $tpl)
/** $this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
* Preserve adding Links in Templates ...won't work }
*/ $this->_out('>>');
function Link($x,$y,$w,$h,$link) { }
if ($this->intpl) $this->_out('>>');
$this->Error('Using links in templates aren\'t possible!');
parent::Link($x,$y,$w,$h,$link); $this->_out('/Length '.strlen($p).' >>');
} $this->_putstream($p);
$this->_out('endobj');
function AddLink() { }
if ($this->intpl) }
$this->Error('Adding links in templates aren\'t possible!');
return parent::AddLink(); /**
} * Private Method
*/
function SetLink($link,$y=0,$page=-1) { function _putresources() {
if ($this->intpl) $this->_putfonts();
$this->Error('Setting links in templates aren\'t possible!'); $this->_putimages();
parent::SetLink($link,$y,$page); $this->_putformxobjects();
} //Resource dictionary
$this->offsets[2]=strlen($this->buffer);
/** $this->_out('2 0 obj');
* Private Method that writes the Resources-Objects $this->_out('<<');
*/ $this->_putresourcedict();
function _puttemplates() { $this->_out('>>');
$filter=($this->compress) ? '/Filter /FlateDecode ' : ''; $this->_out('endobj');
reset($this->tpls); }
foreach($this->tpls AS $tplidx => $tpl) {
function _putxobjectdict() {
$p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer']; parent::_putxobjectdict();
$this->_newobj();
$this->tpls[$tplidx]['n'] = $this->n; if (count($this->tpls)) {
$this->_out('<<'.$filter.'/Type /XObject'); foreach($this->tpls as $tplidx => $tpl) {
$this->_out('/Subtype /Form'); $this->_out($this->tplprefix.$tplidx.' '.$tpl['n'].' 0 R');
$this->_out('/FormType 1'); }
$this->_out(sprintf('/BBox [%.2f %.2f %.2f %.2f]',$tpl['x']*$this->k, ($tpl['h']-$tpl['y'])*$this->k, $tpl['w']*$this->k, ($tpl['h']-$tpl['y']-$tpl['h'])*$this->k)); // ($this->h-$tpl['y'])*$this->k }
$this->_out('/Resources '); }
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); /**
if (count($this->res['tpl'][$tplidx]['fonts'])) { * Private Method
$this->_out('/Font <<'); */
foreach($this->res['tpl'][$tplidx]['fonts'] as $font) function _out($s) {
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R'); //Add a line to the document
$this->_out('>>'); if ($this->state==2) {
} if (!$this->_intpl)
if(count($this->res['tpl'][$tplidx]['images']) || count($this->res['tpl'][$tplidx]['tpls'])) $this->pages[$this->page].=$s."\n";
{ else
$this->_out('/XObject <<'); $this->tpls[$this->tpl]['buffer'] .= $s."\n";
if (count($this->res['tpl'][$tplidx]['images'])) { } else {
foreach($this->res['tpl'][$tplidx]['images'] as $image) $this->buffer.=$s."\n";
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R'); }
} }
if (count($this->res['tpl'][$tplidx]['tpls'])) { }
foreach($this->res['tpl'][$tplidx]['tpls'] as $i => $tpl)
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
$this->_out('/Length '.strlen($p).' >>');
$this->_putstream($p);
$this->_out('endobj');
}
}
/**
* Private Method
*/
function _putresources() {
$this->_putfonts();
$this->_putimages();
$this->_puttemplates();
//Resource dictionary
$this->offsets[2]=strlen($this->buffer);
$this->_out('2 0 obj');
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
$this->_out('/Font <<');
foreach($this->fonts as $font)
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
if(count($this->images) || count($this->tpls))
{
$this->_out('/XObject <<');
if (count($this->images)) {
foreach($this->images as $image)
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
if (count($this->tpls)) {
foreach($this->tpls as $tplidx => $tpl)
$this->_out($this->tplprefix.$tplidx.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
$this->_out('endobj');
}
/**
* Private Method
*/
function _out($s) {
//Add a line to the document
if ($this->state==2) {
if (!$this->intpl)
$this->pages[$this->page].=$s."\n";
else
$this->tpls[$this->tpl]['buffer'] .= $s."\n";
} else {
$this->buffer.=$s."\n";
}
}
}
?> ?>

View File

@ -0,0 +1,466 @@
<?php
//
// FPDI - Version 1.2
//
// Copyright 2004-2007 Setasign - Jan Slabon
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
define('FPDI_VERSION','1.2');
ini_set('auto_detect_line_endings',1); // Strongly required!
require_once("fpdf_tpl.php");
require_once("fpdi_pdf_parser.php");
class FPDI extends FPDF_TPL {
/**
* Actual filename
* @var string
*/
var $current_filename;
/**
* Parser-Objects
* @var array
*/
var $parsers;
/**
* Current parser
* @var object
*/
var $current_parser;
/**
* Highest version of imported PDF
* @var double
*/
var $importVersion = 1.3;
/**
* object stack
* @var array
*/
var $_obj_stack;
/**
* done object stack
* @var array
*/
var $_don_obj_stack;
/**
* Current Object Id.
* @var integer
*/
var $_current_obj_id;
/**
* The name of the last imported page box
* @var string
*/
var $lastUsedPageBox;
/**
* Constructor
* See FPDF-Manual
*/
function FPDI($orientation='P',$unit='mm',$format='A4') {
parent::FPDF_TPL($orientation,$unit,$format);
}
/**
* Set a source-file
*
* @param string $filename a valid filename
* @return int number of available pages
*/
function setSourceFile($filename) {
$this->current_filename = $filename;
$fn =& $this->current_filename;
if (!isset($this->parsers[$fn]))
$this->parsers[$fn] =& new fpdi_pdf_parser($fn,$this);
$this->current_parser =& $this->parsers[$fn];
return $this->parsers[$fn]->getPageCount();
}
/**
* Import a page
*
* @param int $pageno pagenumber
* @return int Index of imported page - to use with fpdf_tpl::useTemplate()
*/
function importPage($pageno, $boxName='/CropBox') {
if ($this->_intpl) {
return $this->error("Please import the desired pages before creating a new template.");
}
$fn =& $this->current_filename;
$parser =& $this->parsers[$fn];
$parser->setPageno($pageno);
$this->tpl++;
$this->tpls[$this->tpl] = array();
$tpl =& $this->tpls[$this->tpl];
$tpl['parser'] =& $parser;
$tpl['resources'] = $parser->getPageResources();
$tpl['buffer'] = $parser->getContent();
if (!in_array($boxName, $parser->availableBoxes))
return $this->Error(sprintf("Unknown box: %s", $boxName));
$pageboxes = $parser->getPageBoxes($pageno);
/**
* MediaBox
* CropBox: Default -> MediaBox
* BleedBox: Default -> CropBox
* TrimBox: Default -> CropBox
* ArtBox: Default -> CropBox
*/
if (!isset($pageboxes[$boxName]) && ($boxName == "/BleedBox" || $boxName == "/TrimBox" || $boxName == "/ArtBox"))
$boxName = "/CropBox";
if (!isset($pageboxes[$boxName]) && $boxName == "/CropBox")
$boxName = "/MediaBox";
if (!isset($pageboxes[$boxName]))
return false;
$this->lastUsedPageBox = $boxName;
$box = $pageboxes[$boxName];
$tpl['box'] = $box;
// To build an array that can be used by PDF_TPL::useTemplate()
$this->tpls[$this->tpl] = array_merge($this->tpls[$this->tpl],$box);
// An imported page will start at 0,0 everytime. Translation will be set in _putformxobjects()
$tpl['x'] = 0;
$tpl['y'] = 0;
$page =& $parser->pages[$parser->pageno];
// fix for rotated pages
$rotation = $parser->getPageRotation($pageno);
if (isset($rotation[1]) && ($angle = $rotation[1] % 360) != 0) {
$steps = $angle / 90;
$_w = $tpl['w'];
$_h = $tpl['h'];
$tpl['w'] = $steps % 2 == 0 ? $_w : $_h;
$tpl['h'] = $steps % 2 == 0 ? $_h : $_w;
if ($steps % 2 != 0) {
$x = $y = ($steps == 1 || $steps == -3) ? $tpl['h'] : $tpl['w'];
} else {
$x = $tpl['w'];
$y = $tpl['h'];
}
$cx=($x/2+$tpl['box']['x'])*$this->k;
$cy=($y/2+$tpl['box']['y'])*$this->k;
$angle*=-1;
$angle*=M_PI/180;
$c=cos($angle);
$s=sin($angle);
$tpl['buffer'] = sprintf('q %.5f %.5f %.5f %.5f %.2f %.2f cm 1 0 0 1 %.2f %.2f cm %s Q',$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy, $tpl['buffer']);
}
return $this->tpl;
}
function getLastUsedPageBox() {
return $this->lastUsedPageBox;
}
function useTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0) {
$this->_out('q 0 J 1 w 0 j 0 G'); // reset standard values
$s = parent::useTemplate($tplidx, $_x, $_y, $_w, $_h);
$this->_out('Q');
return $s;
}
/**
* Private method, that rebuilds all needed objects of source files
*/
function _putimportedobjects() {
if (is_array($this->parsers) && count($this->parsers) > 0) {
foreach($this->parsers AS $filename => $p) {
$this->current_parser =& $this->parsers[$filename];
if (is_array($this->_obj_stack[$filename])) {
while($n = key($this->_obj_stack[$filename])) {
$nObj = $this->current_parser->pdf_resolve_object($this->current_parser->c,$this->_obj_stack[$filename][$n][1]);
$this->_newobj($this->_obj_stack[$filename][$n][0]);
if ($nObj[0] == PDF_TYPE_STREAM) {
$this->pdf_write_value ($nObj);
} else {
$this->pdf_write_value ($nObj[1]);
}
$this->_out('endobj');
$this->_obj_stack[$filename][$n] = null; // free memory
unset($this->_obj_stack[$filename][$n]);
reset($this->_obj_stack[$filename]);
}
}
}
}
}
/**
* Sets the PDF Version to the highest of imported documents
*/
function setVersion() {
$this->PDFVersion = max($this->importVersion, $this->PDFVersion);
}
/**
* Put resources
*/
function _putresources() {
$this->_putfonts();
$this->_putimages();
$this->_putformxobjects();
$this->_putimportedobjects();
//Resource dictionary
$this->offsets[2]=strlen($this->buffer);
$this->_out('2 0 obj');
$this->_out('<<');
$this->_putresourcedict();
$this->_out('>>');
$this->_out('endobj');
}
/**
* Private Method that writes the form xobjects
*/
function _putformxobjects() {
$filter=($this->compress) ? '/Filter /FlateDecode ' : '';
reset($this->tpls);
foreach($this->tpls AS $tplidx => $tpl) {
$p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
$this->_newobj();
$this->tpls[$tplidx]['n'] = $this->n;
$this->_out('<<'.$filter.'/Type /XObject');
$this->_out('/Subtype /Form');
$this->_out('/FormType 1');
$this->_out(sprintf('/BBox [%.2f %.2f %.2f %.2f]',
($tpl['x'] + (isset($tpl['box']['x'])?$tpl['box']['x']:0))*$this->k,
($tpl['h'] + (isset($tpl['box']['y'])?$tpl['box']['y']:0) - $tpl['y'])*$this->k,
($tpl['w'] + (isset($tpl['box']['x'])?$tpl['box']['x']:0))*$this->k,
($tpl['h'] + (isset($tpl['box']['y'])?$tpl['box']['y']:0) - $tpl['y']-$tpl['h'])*$this->k)
);
if (isset($tpl['box']))
$this->_out(sprintf('/Matrix [1 0 0 1 %.5f %.5f]',-$tpl['box']['x']*$this->k, -$tpl['box']['y']*$this->k));
$this->_out('/Resources ');
if (isset($tpl['resources'])) {
$this->current_parser =& $tpl['parser'];
$this->pdf_write_value($tpl['resources']);
} else {
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
if (isset($this->_res['tpl'][$tplidx]['fonts']) && count($this->_res['tpl'][$tplidx]['fonts'])) {
$this->_out('/Font <<');
foreach($this->_res['tpl'][$tplidx]['fonts'] as $font)
$this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
$this->_out('>>');
}
if(isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images']) ||
isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls']))
{
$this->_out('/XObject <<');
if (isset($this->_res['tpl'][$tplidx]['images']) && count($this->_res['tpl'][$tplidx]['images'])) {
foreach($this->_res['tpl'][$tplidx]['images'] as $image)
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
}
if (isset($this->_res['tpl'][$tplidx]['tpls']) && count($this->_res['tpl'][$tplidx]['tpls'])) {
foreach($this->_res['tpl'][$tplidx]['tpls'] as $i => $tpl)
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
}
$this->_out('/Length '.strlen($p).' >>');
$this->_putstream($p);
$this->_out('endobj');
}
}
/**
* Rewritten to handle existing own defined objects
*/
function _newobj($obj_id=false,$onlynewobj=false) {
if (!$obj_id) {
$obj_id = ++$this->n;
}
//Begin a new object
if (!$onlynewobj) {
$this->offsets[$obj_id] = strlen($this->buffer);
$this->_out($obj_id.' 0 obj');
$this->_current_obj_id = $obj_id; // for later use with encryption
}
}
/**
* Writes a value
* Needed to rebuild the source document
*
* @param mixed $value A PDF-Value. Structure of values see cases in this method
*/
function pdf_write_value(&$value)
{
switch ($value[0]) {
case PDF_TYPE_NUMERIC :
case PDF_TYPE_TOKEN :
// A numeric value or a token.
// Simply output them
$this->_out($value[1]." ", false);
break;
case PDF_TYPE_ARRAY :
// An array. Output the proper
// structure and move on.
$this->_out("[",false);
for ($i = 0; $i < count($value[1]); $i++) {
$this->pdf_write_value($value[1][$i]);
}
$this->_out("]");
break;
case PDF_TYPE_DICTIONARY :
// A dictionary.
$this->_out("<<",false);
reset ($value[1]);
while (list($k, $v) = each($value[1])) {
$this->_out($k . " ",false);
$this->pdf_write_value($v);
}
$this->_out(">>");
break;
case PDF_TYPE_OBJREF :
// An indirect object reference
// Fill the object stack if needed
$cpfn =& $this->current_parser->filename;
if (!isset($this->_don_obj_stack[$cpfn][$value[1]])) {
$this->_newobj(false,true);
$this->_obj_stack[$cpfn][$value[1]] = array($this->n, $value);
$this->_don_obj_stack[$cpfn][$value[1]] = array($this->n, $value);
}
$objid = $this->_don_obj_stack[$cpfn][$value[1]][0];
$this->_out("{$objid} 0 R"); //{$value[2]}
break;
case PDF_TYPE_STRING :
// A string.
$this->_out('('.$value[1].')');
break;
case PDF_TYPE_STREAM :
// A stream. First, output the
// stream dictionary, then the
// stream data itself.
$this->pdf_write_value($value[1]);
$this->_out("stream");
$this->_out($value[2][1]);
$this->_out("endstream");
break;
case PDF_TYPE_HEX :
$this->_out("<".$value[1].">");
break;
case PDF_TYPE_NULL :
// The null object.
$this->_out("null");
break;
}
}
/**
* Private Method
*/
function _out($s,$ln=true) {
//Add a line to the document
if ($this->state==2) {
if (!$this->_intpl)
$this->pages[$this->page] .= $s.($ln == true ? "\n" : '');
else
$this->tpls[$this->tpl]['buffer'] .= $s.($ln == true ? "\n" : '');
} else {
$this->buffer.=$s.($ln == true ? "\n" : '');
}
}
/**
* rewritten to close opened parsers
*
*/
function _enddoc() {
parent::_enddoc();
$this->_closeParsers();
}
/**
* close all files opened by parsers
*/
function _closeParsers() {
if ($this->state > 2 && count($this->parsers) > 0) {
foreach ($this->parsers as $k => $_){
$this->parsers[$k]->closeFile();
$this->parsers[$k] = null;
unset($this->parsers[$k]);
}
return true;
}
return false;
}
}
// for PHP5
if (!class_exists('fpdi')) {
class fpdi extends FPDI {}
}
?>

View File

@ -1,482 +1,379 @@
<?php <?php
// //
// FPDI - Version 1.1 // FPDI - Version 1.2
// //
// Copyright 2004,2005 Setasign - Jan Slabon // Copyright 2004-2007 Setasign - Jan Slabon
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
// You may obtain a copy of the License at // You may obtain a copy of the License at
// //
// http://www.apache.org/licenses/LICENSE-2.0 // http://www.apache.org/licenses/LICENSE-2.0
// //
// Unless required by applicable law or agreed to in writing, software // Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, // distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// //
if (!defined ('PDF_TYPE_NULL')) require_once("pdf_parser.php");
define ('PDF_TYPE_NULL', 0);
if (!defined ('PDF_TYPE_NUMERIC')) class fpdi_pdf_parser extends pdf_parser {
define ('PDF_TYPE_NUMERIC', 1);
if (!defined ('PDF_TYPE_TOKEN')) /**
define ('PDF_TYPE_TOKEN', 2); * Pages
if (!defined ('PDF_TYPE_HEX')) * Index beginns at 0
define ('PDF_TYPE_HEX', 3); *
if (!defined ('PDF_TYPE_STRING')) * @var array
define ('PDF_TYPE_STRING', 4); */
if (!defined ('PDF_TYPE_DICTIONARY')) var $pages;
define ('PDF_TYPE_DICTIONARY', 5);
if (!defined ('PDF_TYPE_ARRAY')) /**
define ('PDF_TYPE_ARRAY', 6); * Page count
if (!defined ('PDF_TYPE_OBJDEC')) * @var integer
define ('PDF_TYPE_OBJDEC', 7); */
if (!defined ('PDF_TYPE_OBJREF')) var $page_count;
define ('PDF_TYPE_OBJREF', 8);
if (!defined ('PDF_TYPE_OBJECT')) /**
define ('PDF_TYPE_OBJECT', 9); * actual page number
if (!defined ('PDF_TYPE_STREAM')) * @var integer
define ('PDF_TYPE_STREAM', 10); */
var $pageno;
require_once(FPDF_PATH.'wrapper_functions.php'); /**
require_once(FPDF_PATH.'pdf_parser.php'); * PDF Version of imported Document
* @var string
class fpdi_pdf_parser extends pdf_parser { */
var $pdfVersion;
/**
* Pages /**
* Index beginns at 0 * FPDI Reference
* * @var object
* @var array */
*/ var $fpdi;
var $pages;
/**
/** * Available BoxTypes
* Page count *
* @var integer * @var array
*/ */
var $page_count; var $availableBoxes = array("/MediaBox","/CropBox","/BleedBox","/TrimBox","/ArtBox");
/** /**
* actual page number * Constructor
* @var integer *
*/ * @param string $filename Source-Filename
var $pageno; * @param object $fpdi Object of type fpdi
*/
/** function fpdi_pdf_parser($filename,&$fpdi) {
* PDF Version of imported Document $this->fpdi =& $fpdi;
* @var string $this->filename = $filename;
*/
var $pdfVersion; parent::pdf_parser($filename);
/** // resolve Pages-Dictonary
* FPDI Reference $pages = $this->pdf_resolve_object($this->c, $this->root[1][1]['/Pages']);
* @var object
*/ // Read pages
var $fpdi; $this->read_pages($this->c, $pages, $this->pages);
/** // count pages;
* Constructor $this->page_count = count($this->pages);
* }
* @param string $filename Source-Filename
* @param object $fpdi Object of type fpdi /**
*/ * Overwrite parent::error()
function fpdi_pdf_parser($filename,&$fpdi) { *
$this->fpdi =& $fpdi; * @param string $msg Error-Message
$this->filename = $filename; */
function error($msg) {
parent::pdf_parser($filename); $this->fpdi->error($msg);
}
// Get Info
$this->getInfo(); /**
* Get pagecount from sourcefile
// resolve Pages-Dictonary *
$pages = $this->pdf_resolve_object($this->c, $this->root[1][1]['/Pages']); * @return int
*/
// Read pages function getPageCount() {
$this->read_pages($this->c, $pages, $this->pages); return $this->page_count;
}
// count pages;
$this->page_count = count($this->pages);
} /**
* Set pageno
/** *
* Overwrite parent::error() * @param int $pageno Pagenumber to use
* */
* @param string $msg Error-Message function setPageno($pageno) {
*/ $pageno = ((int) $pageno) - 1;
function error($msg) {
$this->fpdi->error($msg); if ($pageno < 0 || $pageno >= $this->getPageCount()) {
} $this->fpdi->error("Pagenumber is wrong!");
}
/**
* Get pagecount from sourcefile $this->pageno = $pageno;
* }
* @return int
*/ /**
function getPageCount() { * Get page-resources from current page
return $this->page_count; *
} * @return array
*/
function getPageResources() {
/** return $this->_getPageResources($this->pages[$this->pageno]);
* Set pageno }
*
* @param int $pageno Pagenumber to use /**
*/ * Get page-resources from /Page
function setPageno($pageno) { *
$pageno-=1; * @param array $obj Array of pdf-data
*/
if ($pageno < 0 || $pageno >= $this->getPageCount()) { function _getPageResources ($obj) { // $obj = /Page
$this->fpdi->error("Pagenumber is wrong!"); $obj = $this->pdf_resolve_object($this->c, $obj);
}
// If the current object has a resources
$this->pageno = $pageno; // dictionary associated with it, we use
} // it. Otherwise, we move back to its
// parent object.
/** if (isset ($obj[1][1]['/Resources'])) {
* Get page-resources from current page $res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Resources']);
* if ($res[0] == PDF_TYPE_OBJECT)
* @return array return $res[1];
*/ return $res;
function getPageResources() { } else {
return $this->_getPageResources($this->pages[$this->pageno]); if (!isset ($obj[1][1]['/Parent'])) {
} return false;
} else {
/** $res = $this->_getPageResources($obj[1][1]['/Parent']);
* Get page-resources from /Page if ($res[0] == PDF_TYPE_OBJECT)
* return $res[1];
* @param array $obj Array of pdf-data return $res;
*/ }
function _getPageResources ($obj) { // $obj = /Page }
$obj = $this->pdf_resolve_object($this->c, $obj); }
// If the current object has a resources
// dictionary associated with it, we use /**
// it. Otherwise, we move back to its * Get content of current page
// parent object. *
if (isset ($obj[1][1]['/Resources'])) { * If more /Contents is an array, the streams are concated
$res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Resources']); *
if ($res[0] == PDF_TYPE_OBJECT) * @return string
return $res[1]; */
return $res; function getContent() {
} else { $buffer = "";
if (!isset ($obj[1][1]['/Parent'])) {
return false; if (isset($this->pages[$this->pageno][1][1]['/Contents'])) {
} else { $contents = $this->_getPageContent($this->pages[$this->pageno][1][1]['/Contents']);
$res = $this->_getPageResources($obj[1][1]['/Parent']); foreach($contents AS $tmp_content) {
if ($res[0] == PDF_TYPE_OBJECT) $buffer .= $this->_rebuildContentStream($tmp_content).' ';
return $res[1]; }
return $res; }
}
} return $buffer;
} }
function getInfo() { /**
$avail_infos = array("Title", "Author", "Subject", "Keywords", "Creator", "Producer", "CreationDate", "ModDate", "Trapped"); * Resolve all content-objects
*
$_infos = $this->pdf_resolve_object($this->c,$this->xref['trailer'][1]['/Info']); * @param array $content_ref
$infos = array(); * @return array
*/
foreach ($avail_infos AS $info) { function _getPageContent($content_ref) {
if (isset($_infos[1][1]["/".$info])) { $contents = array();
if ($_infos[1][1]["/".$info][0] == PDF_TYPE_STRING) {
$infos[$info] = $this->deescapeString($_infos[1][1]["/".$info][1]); if ($content_ref[0] == PDF_TYPE_OBJREF) {
} else if ($_infos[1][1]["/".$info][0] == PDF_TYPE_HEX) { $content = $this->pdf_resolve_object($this->c, $content_ref);
$infos[$info] = $this->hex2String($_infos[1][1]["/".$info][1]); if ($content[1][0] == PDF_TYPE_ARRAY) {
} $contents = $this->_getPageContent($content[1]);
} } else {
} $contents[] = $content;
$this->infos = $infos; }
} } else if ($content_ref[0] == PDF_TYPE_ARRAY) {
foreach ($content_ref[1] AS $tmp_content_ref) {
/** $contents = array_merge($contents,$this->_getPageContent($tmp_content_ref));
* Rebuilds a hexstring to string }
* }
* @param string $hex hexstring
* @return string return $contents;
*/ }
function hex2String($hex) {
$endian = false;
/**
if (preg_match("/^FEFF/",$hex)) { // is utf-16 aka big endian * Rebuild content-streams
$i = 4; *
$endian = "big"; * @param array $obj
} else if (preg_match("/^FFFE/",$hex)) { // is utf-16 aka little endian * @return string
$i = 4; */
$endian = "little"; function _rebuildContentStream($obj) {
} else { $filters = array();
$i = 0;
} if (isset($obj[1][1]['/Filter'])) {
$_filter = $obj[1][1]['/Filter'];
$s = "";
$l = strlen($hex); if ($_filter[0] == PDF_TYPE_TOKEN) {
for (; $i < $l; $i+=2) { $filters[] = $_filter;
if (!$endian) { } else if ($_filter[0] == PDF_TYPE_ARRAY) {
$s .= chr(hexdec($hex[$i].(isset($hex[$i+1]) ? $hex[$i+1] : '0'))); $filters = $_filter[1];
} else { }
if ($endian == "big") { }
$_c = $hex[$i].$hex[$i+1];
$i+=2; $stream = $obj[2][1];
$c = $hex[$i].$hex[$i+1];
foreach ($filters AS $_filter) {
if ($_c != "00") { switch ($_filter[1]) {
$s .= "?"; case "/FlateDecode":
continue; if (function_exists('gzuncompress')) {
} else { $stream = (strlen($stream) > 0) ? @gzuncompress($stream) : '';
$s .= chr(hexdec($c)); } else {
continue; $this->fpdi->error(sprintf("To handle %s filter, please compile php with zlib support.",$_filter[1]));
} }
} else if ($endian == "little") { if ($stream === false) {
$c = $hex[$i].$hex[$i+1]; $this->fpdi->error("Error while decompressing stream.");
$i+=2; }
$_c = $hex[$i].$hex[$i+1]; break;
case null:
if ($_c != "00") { $stream = $stream;
$s .= "?"; break;
continue; default:
} else { if (preg_match("/^\/[a-z85]*$/i", $_filter[1], $filterName) && @include_once('decoders'.$_filter[1].'.php')) {
$s .= chr(hexdec($c)); $filterName = substr($_filter[1],1);
continue; if (class_exists($filterName)) {
} $decoder =& new $filterName($this->fpdi);
} $stream = $decoder->decode(trim($stream));
} } else {
} $this->fpdi->error(sprintf("Unsupported Filter: %s",$_filter[1]));
}
return $s; } else {
} $this->fpdi->error(sprintf("Unsupported Filter: %s",$_filter[1]));
}
function deescapeString($s) { }
$torepl = array("/\\\(\d{1,3})/e" => "chr(octdec(\\1))", }
"/\\\\\(/" => "(",
"/\\\\\)/" => ")"); return $stream;
return preg_replace(array_keys($torepl),$torepl,$s); }
}
/**
* Get a Box from a page
/** * Arrayformat is same as used by fpdf_tpl
* Get content of current page *
* * @param array $page a /Page
* If more /Contents is an array, the streams are concated * @param string $box_index Type of Box @see $availableBoxes
* * @return array
* @return string */
*/ function getPageBox($page, $box_index) {
function getContent() { $page = $this->pdf_resolve_object($this->c,$page);
$buffer = ""; $box = null;
if (isset($page[1][1][$box_index]))
$contents = $this->getPageContent($this->pages[$this->pageno][1][1]['/Contents']); $box =& $page[1][1][$box_index];
foreach($contents AS $tmp_content) {
$buffer .= $this->rebuildContentStream($tmp_content); if (!is_null($box) && $box[0] == PDF_TYPE_OBJREF) {
} $tmp_box = $this->pdf_resolve_object($this->c,$box);
$box = $tmp_box[1];
return $buffer; }
}
if (!is_null($box) && $box[0] == PDF_TYPE_ARRAY) {
$b =& $box[1];
/** return array("x" => $b[0][1]/$this->fpdi->k,
* Resolve all content-objects "y" => $b[1][1]/$this->fpdi->k,
* "w" => abs($b[0][1]-$b[2][1])/$this->fpdi->k,
* @param array $content_ref "h" => abs($b[1][1]-$b[3][1])/$this->fpdi->k);
* @return array } else if (!isset ($page[1][1]['/Parent'])) {
*/ return false;
function getPageContent($content_ref) { } else {
$contents = array(); return $this->getPageBox($this->pdf_resolve_object($this->c, $page[1][1]['/Parent']), $box_index);
}
if ($content_ref[0] == PDF_TYPE_OBJREF) { }
$content = $this->pdf_resolve_object($this->c, $content_ref);
if ($content[1][0] == PDF_TYPE_ARRAY) { function getPageBoxes($pageno) {
$contents = $this->getPageContent($content[1]); return $this->_getPageBoxes($this->pages[$pageno-1]);
} else { }
$contents[] = $content;
} /**
} else if ($content_ref[0] == PDF_TYPE_ARRAY) { * Get all Boxes from /Page
foreach ($content_ref[1] AS $tmp_content_ref) { *
$contents = array_merge($contents,$this->getPageContent($tmp_content_ref)); * @param array a /Page
} * @return array
} */
function _getPageBoxes($page) {
return $contents; $boxes = array();
}
foreach($this->availableBoxes AS $box) {
if ($_box = $this->getPageBox($page,$box)) {
/** $boxes[$box] = $_box;
* Rebuild content-streams }
* only non-compressed streams and /FlateDecode are ready! }
*
* @param array $obj return $boxes;
* @return string }
*/
function rebuildContentStream($obj) { function getPageRotation($pageno) {
$filters = array(); return $this->_getPageRotation($this->pages[$pageno-1]);
}
if (isset($obj[1][1]['/Filter'])) {
$_filter = $obj[1][1]['/Filter']; function _getPageRotation ($obj) { // $obj = /Page
$obj = $this->pdf_resolve_object($this->c, $obj);
if ($_filter[0] == PDF_TYPE_TOKEN) { if (isset ($obj[1][1]['/Rotate'])) {
$filters[] = $_filter; $res = $this->pdf_resolve_object($this->c, $obj[1][1]['/Rotate']);
} else if ($_filter[0] == PDF_TYPE_ARRAY) { if ($res[0] == PDF_TYPE_OBJECT)
$filters = $_filter[1]; return $res[1];
} return $res;
} } else {
if (!isset ($obj[1][1]['/Parent'])) {
$stream = $obj[2][1]; return false;
} else {
foreach ($filters AS $_filter) { $res = $this->_getPageRotation($obj[1][1]['/Parent']);
switch ($_filter[1]) { if ($res[0] == PDF_TYPE_OBJECT)
case "/FlateDecode": return $res[1];
if (function_exists('gzuncompress')) { return $res;
$stream = @gzuncompress($stream); }
} else { }
$this->fpdi->error(sprintf("To handle %s filter, please compile php with zlib support.",$_filter[1])); }
}
if ($stream === false) { /**
$this->fpdi->error("Error while decompressing string."); * Read all /Page(es)
} *
* @param object pdf_context
break; * @param array /Pages
case "/LZWDecode": * @param array the result-array
@include_once("decoders/lzw.php"); */
if (class_exists("LZWDecode")) { function read_pages (&$c, &$pages, &$result) {
$lzwdec = new LZWDecode($this->fpdi); // Get the kids dictionary
$stream = $lzwdec->decode($stream); $kids = $this->pdf_resolve_object ($c, $pages[1][1]['/Kids']);
} else {
$this->fpdi->error(sprintf("Unsupported Filter: %s",$_filter[1])); if (!is_array($kids))
} $this->fpdi->Error("Cannot find /Kids in current /Page-Dictionary");
break; foreach ($kids[1] as $v) {
case "/ASCII85Decode": $pg = $this->pdf_resolve_object ($c, $v);
@include_once("decoders/ascii85.php"); if ($pg[1][1]['/Type'][1] === '/Pages') {
if (class_exists("ASCII85Decode")) { // If one of the kids is an embedded
$ascii85 = new ASCII85Decode($this->fpdi); // /Pages array, resolve it as well.
$stream = $ascii85->decode(trim($stream)); $this->read_pages ($c, $pg, $result);
} else { } else {
$this->fpdi->error(sprintf("Unsupported Filter: %s",$_filter[1])); $result[] = $pg;
} }
break; }
case null: }
$stream = $stream;
break;
default:
$this->fpdi->error(sprintf("Unsupported Filter: %s",$_filter[1])); /**
} * Get PDF-Version
} *
* And reset the PDF Version used in FPDI if needed
return $stream; */
} function getPDFVersion() {
parent::getPDFVersion();
/**
* Get MediaBox if (isset($this->fpdi->importVersion) && $this->pdfVersion > $this->fpdi->importVersion) {
* $this->fpdi->importVersion = $this->pdfVersion;
* gets an array that describes the size of a page. }
* }
* @param integer $pageno
* @return array @see getPageBox() }
*/
function getPageMediaBox($pageno) {
return $this->getPageBox($this->pages[$pageno-1],"/MediaBox");
}
/**
* Get a Box from a page
* Arrayformat is same as used by fpdf_tpl
*
* @param array $page a /Page
* @param string $box_index Type of Box @see getPageBoxes()
* @return array
*/
function getPageBox($page, $box_index) {
$page = $this->pdf_resolve_object($this->c,$page);
$box = null;
if (isset($page[1][1][$box_index]))
$box =& $page[1][1][$box_index];
if (!is_null($box) && $box[0] == PDF_TYPE_OBJREF) {
$tmp_box = $this->pdf_resolve_object($this->c,$box);
$box = $tmp_box[1];
}
if (!is_null($box) && $box[0] == PDF_TYPE_ARRAY) {
$b =& $box[1];
return array("x" => $b[0][1]/$this->fpdi->k,
"y" => $b[1][1]/$this->fpdi->k,
"w" => $b[2][1]/$this->fpdi->k,
"h" => $b[3][1]/$this->fpdi->k);
} else if (!isset ($page[1][1]['/Parent'])) {
return false;
} else {
return $this->getPageBox($this->pdf_resolve_object($this->c, $page[1][1]['/Parent']), $box_index);
}
}
/**
* Get all Boxes from /Page
*
* @param array a /Page
* @return array
*/
function getPageBoxes($page) {
$_boxes = array("/MediaBox","/CropBox","/BleedBox","/TrimBox","/ArtBox");
$boxes = array();
foreach($_boxes AS $box) {
if ($_box = $this->getPageBox($page,$box)) {
$boxes[$box] = $_box;
}
}
return $boxes;
}
/**
* Read all /Page(es)
*
* @param object pdf_context
* @param array /Pages
* @param array the result-array
*/
function read_pages (&$c, &$pages, &$result) {
// Get the kids dictionary
$kids = $this->pdf_resolve_object ($c, $pages[1][1]['/Kids']);
if (!is_array($kids))
$this->fpdi->Error("Cannot find /Kids in current /Page-Dictionary");
foreach ($kids[1] as $v) {
$pg = $this->pdf_resolve_object ($c, $v);
#print_r($pg);
if ($pg[1][1]['/Type'][1] === '/Pages') {
// If one of the kids is an embedded
// /Pages array, resolve it as well.
$this->read_pages ($c, $pg, $result);
} else {
$result[] = $pg;
}
}
}
/**
* Get PDF-Version
*
* And reset the PDF Version used in FPDI if needed
*/
function getPDFVersion() {
parent::getPDFVersion();
if (isset($this->fpdi->importVersion) && $this->pdfVersion > $this->fpdi->importVersion) {
$this->fpdi->importVersion = $this->pdfVersion;
}
}
}
?> ?>

View File

@ -1,8 +1,8 @@
<?php <?php
// //
// FPDI - Version 1.1 // FPDI - Version 1.2
// //
// Copyright 2004,2005 Setasign - Jan Slabon // Copyright 2004-2007 Setasign - Jan Slabon
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
@ -42,7 +42,7 @@ class pdf_context {
fseek ($this->file, $pos); fseek ($this->file, $pos);
} }
$this->buffer = fread($this->file, $l); $this->buffer = $l > 0 ? fread($this->file, $l) : '';
$this->offset = 0; $this->offset = 0;
$this->length = strlen($this->buffer); $this->length = strlen($this->buffer);
$this->stack = array(); $this->stack = array();

View File

@ -1,8 +1,8 @@
<?php <?php
// //
// FPDI - Version 1.1 // FPDI - Version 1.2
// //
// Copyright 2004,2005 Setasign - Jan Slabon // Copyright 2004-2007 Setasign - Jan Slabon
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.

View File

@ -32,7 +32,7 @@
\version $Revision$ \version $Revision$
*/ */
require_once(FPDF_PATH.'fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
require_once(DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // requis car utilise par les classes qui heritent require_once(DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // requis car utilise par les classes qui heritent

View File

@ -121,18 +121,19 @@ class pdf_edison extends ModelePDFCommandes
if (file_exists($dir)) if (file_exists($dir))
{ {
// Initialisation document vierge // Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();

View File

@ -152,16 +152,20 @@ class pdf_einstein extends ModelePDFCommandes
$nblignes = sizeof($com->lignes); $nblignes = sizeof($com->lignes);
// Initialisation document vierge // Initialisation document vierge
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf // Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -31,7 +31,7 @@
\version $Revision$ \version $Revision$
*/ */
require_once(FPDF_PATH.'fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
require_once(DOL_DOCUMENT_ROOT."/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/product.class.php");
require_once(DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // Requis car utilisé dans les classes qui héritent require_once(DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // Requis car utilisé dans les classes qui héritent

View File

@ -28,7 +28,7 @@
\version $Revision$ \version $Revision$
*/ */
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/facture/modules_facture.php"); require_once(DOL_DOCUMENT_ROOT."/includes/modules/facture/modules_facture.php");
require_once(DOL_DOCUMENT_ROOT."/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/product.class.php");
@ -151,17 +151,19 @@ class pdf_crabe extends ModelePDFFactures
{ {
$nblignes = sizeof($fac->lignes); $nblignes = sizeof($fac->lignes);
// Initialisation document vierge
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf // Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -124,17 +124,19 @@ class pdf_huitre extends ModelePDFFactures
if (file_exists($dir)) if (file_exists($dir))
{ {
// Initialisation facture vierge // Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm','A4');
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm','A4');
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -148,17 +148,20 @@ class pdf_oursin extends ModelePDFFactures
if (file_exists($dir)) if (file_exists($dir))
{ {
// Initialisation facture vierge
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf // Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -30,13 +30,13 @@
\version $Revision$ \version $Revision$
*/ */
require_once(FPDF_PATH.'fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
/** /**
\class ModelePDFFicheinter \class ModelePDFFicheinter
\brief Classe mère des modèles de fiche intervention \brief Classe mère des modèles de fiche intervention
*/ */
class ModelePDFFicheinter extends FPDF class ModelePDFFicheinter extends FPDF
{ {
var $error=''; var $error='';

View File

@ -29,7 +29,7 @@
\version $Revision$ \version $Revision$
*/ */
require_once(DOL_DOCUMENT_ROOT ."/includes/modules/fichinter/modules_fichinter.php"); require_once(DOL_DOCUMENT_ROOT."/includes/modules/fichinter/modules_fichinter.php");
/** /**
@ -100,17 +100,19 @@ class pdf_soleil extends ModelePDFFicheinter
if (file_exists($dir)) if (file_exists($dir))
{ {
// Initialisation document vierge // Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -29,7 +29,7 @@
\version $Revision$ \version $Revision$
*/ */
require_once(FPDF_PATH.'fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
require_once(DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // Requis car utilisé dans les classes qui héritent require_once(DOL_DOCUMENT_ROOT."/compta/bank/account.class.php"); // Requis car utilisé dans les classes qui héritent

View File

@ -150,17 +150,19 @@ class pdf_propale_azur extends ModelePDFPropales
{ {
$nblignes = sizeof($propale->lignes); $nblignes = sizeof($propale->lignes);
// Initialisation document vierge // Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -115,17 +115,19 @@ class pdf_propale_bleu extends ModelePDFPropales
if (file_exists($dir)) if (file_exists($dir))
{ {
// Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -116,17 +116,19 @@ class pdf_propale_jaune extends ModelePDFPropales
if (file_exists($dir)) if (file_exists($dir))
{ {
// Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();

View File

@ -119,16 +119,19 @@ class pdf_propale_rouge extends ModelePDFPropales
if (file_exists($dir)) if (file_exists($dir))
{ {
$pdf=new FPDI_Protection('P','mm',$this->format); // Protection et encryption du pdf
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -117,17 +117,19 @@ class pdf_propale_vert extends ModelePDFPropales
if (file_exists($dir)) if (file_exists($dir))
{ {
// Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -28,7 +28,8 @@
\version $Revision$ \version $Revision$
*/ */
require_once(FPDF_PATH.'fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
/** /**
\class pdf_paiement \class pdf_paiement
@ -180,16 +181,19 @@ class pdf_paiement
$year = sprintf("%04d",$year); $year = sprintf("%04d",$year);
$_file = $dir . "/payments-".$month."-".$year.".pdf"; $_file = $dir . "/payments-".$month."-".$year.".pdf";
$pdf = new FPDI_Protection('P','mm','A4'); // Protection et encryption du pdf
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf = new FPDI_Protection('P','mm','A4');
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2006 Regis Houssin <regis.houssin@cap-networks.com> * Copyright (C) 2006 Regis Houssin <regis.houssin@cap-networks.com>
* *
@ -21,25 +21,23 @@
* *
* $Id$ * $Id$
* $Source$ * $Source$
*
*/ */
/** /**
\file htdocs/livraison/mods/modules_livraison.php \file htdocs/livraison/mods/modules_livraison.php
\ingroup expedition \ingroup expedition
\brief Fichier contenant la classe mère de generation de bon de livraison en PDF \brief Fichier contenant la classe mère de generation de bon de livraison en PDF
et la classe mère de numérotation des bons de livraisons et la classe mère de numérotation des bons de livraisons
\version $Revision$ \version $Revision$
*/ */
require_once(FPDF_PATH.'fpdi_protection.php'); require_once(DOL_DOCUMENT_ROOT.'/includes/fpdf/fpdfi/fpdi_protection.php');
/** /**
\class ModelePDFDeliveryOrder \class ModelePDFDeliveryOrder
\brief Classe mère des modèles de bon de livraison \brief Classe mère des modèles de bon de livraison
*/ */
class ModelePDFDeliveryOrder extends FPDF class ModelePDFDeliveryOrder extends FPDF
{ {
var $error=''; var $error='';

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com> * Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com>
* Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be> * Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
* *
@ -30,7 +30,7 @@
\version $Revision$ \version $Revision$
*/ */
require_once(DOL_DOCUMENT_ROOT ."/livraison/mods/modules_livraison.php"); require_once(DOL_DOCUMENT_ROOT."/livraison/mods/modules_livraison.php");
/** /**
@ -106,17 +106,19 @@ class pdf_sirocco extends ModelePDFDeliveryOrder
if (file_exists($dir)) if (file_exists($dir))
{ {
// Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com> * Copyright (C) 2005-2006 Regis Houssin <regis.houssin@cap-networks.com>
* Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be> * Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
* *
@ -30,7 +30,7 @@
\version $Revision$ \version $Revision$
*/ */
require_once(DOL_DOCUMENT_ROOT ."/livraison/mods/modules_livraison.php"); require_once(DOL_DOCUMENT_ROOT."/livraison/mods/modules_livraison.php");
require_once(DOL_DOCUMENT_ROOT."/livraison/livraison.class.php"); require_once(DOL_DOCUMENT_ROOT."/livraison/livraison.class.php");
@ -161,17 +161,19 @@ class pdf_typhon extends ModelePDFDeliveryOrder
if (file_exists($dir)) if (file_exists($dir))
{ {
// Initialisation document vierge // Protection et encryption du pdf
$pdf=new FPDI_Protection('P','mm',$this->format);
// Protection et encryption du pdf
if ($conf->global->PDF_SECURITY_ENCRYPTION) if ($conf->global->PDF_SECURITY_ENCRYPTION)
{ {
$pdf=new FPDI_Protection('P','mm',$this->format);
$pdfrights = array('print'); // Ne permet que l'impression du document $pdfrights = array('print'); // Ne permet que l'impression du document
$pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfuserpass = ''; // Mot de passe pour l'utilisateur final
$pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini $pdfownerpass = NULL; // Mot de passe du propriétaire, créé aléatoirement si pas défini
$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
} }
else
{
$pdf=new FPDI('P','mm',$this->format);
}
$pdf->Open(); $pdf->Open();
$pdf->AddPage(); $pdf->AddPage();