mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-15 12:37:14 +01:00
734 lines
35 KiB
PHP
734 lines
35 KiB
PHP
<?php
|
|
/*
|
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*
|
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
|
*
|
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
|
*
|
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
|
* to obtain the text of the corresponding license version.
|
|
*
|
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*/
|
|
?>
|
|
<?php
|
|
include_once "class.superfpdf.php";
|
|
|
|
class LayoutvorlagenPDF extends SuperFPDF {
|
|
public $doctype;
|
|
public $doctypeOrig;
|
|
|
|
public $logofile;
|
|
public $sender;
|
|
public $recipient;
|
|
public $corrDetails;
|
|
public $InfoBox;
|
|
public $endInfoBox;
|
|
public $boldCorrDetails;
|
|
public $textDetails;
|
|
public $items;
|
|
|
|
public $ust_befreit;
|
|
|
|
public $barcode;
|
|
public $firmendatenid;
|
|
public $absender;
|
|
public $id;
|
|
public $hintergrund;
|
|
public $positionen;
|
|
public $vorlage;
|
|
public $language;
|
|
public $aktFillColor;
|
|
public $aktDrawColor;
|
|
public $aktTextColor;
|
|
public $aktFontSize;
|
|
public $aktFont;
|
|
public $addpdf = null;
|
|
public $pagecount;
|
|
public $page2file;
|
|
|
|
/***********************************
|
|
* data aggregation functions
|
|
***********************************/
|
|
function __construct($app,$projekt="") {
|
|
|
|
$this->app=$app;
|
|
$this->language = 'deutsch';
|
|
}
|
|
|
|
function SetLanguage($language)
|
|
{
|
|
if($language == 'deutsch')$this->language = $language;else $this->language = 'englisch';
|
|
}
|
|
|
|
function GetLayoutvorlage($id,$elementlist = array())
|
|
{
|
|
$this->id = (int)$id;
|
|
|
|
if(!$this->id)return false;
|
|
$vorlage = $this->app->DB->SelectArr("select * from layoutvorlagen where id = ".$this->id. " limit 1");
|
|
|
|
if(!isset($vorlage[0]))return false;
|
|
|
|
$this->vorlage = $vorlage[0];
|
|
$this->positionen = $this->app->DB->SelectArr("select * from layoutvorlagen_positionen where layoutvorlage = '".$this->id."' order by position_y, sort");
|
|
if(count($elementlist) > 0)
|
|
{
|
|
foreach($this->positionen as $key => $position)
|
|
{
|
|
|
|
$pattern = '/((\{[a-zA-Z0-9_]+[^\}]*\}))/';
|
|
preg_match_all($pattern,$this->positionen[$key]['inhalt_deutsch'],$matches);
|
|
|
|
for($i=0;$i<count($matches[0]);$i++)
|
|
{
|
|
$found = false;
|
|
foreach($elementlist as $k => $el){
|
|
if('{'.$k.'}' == $matches[0][$i])$found = true;
|
|
if('{'.strtoupper($k).'}' == $matches[0][$i])$found = true;
|
|
}
|
|
if($found && $position['typ'] === 'bild' && empty($position['bild_deutsch'])
|
|
&& empty($position['bild_englisch'])
|
|
) {
|
|
$position['image'] = true;
|
|
}
|
|
|
|
if(!$found)$this->positionen[$key]['inhalt_deutsch'] = str_replace($matches[0][$i], '', $this->positionen[$key]['inhalt_deutsch']);
|
|
}
|
|
preg_match_all($pattern,$this->positionen[$key]['inhalt_englisch'],$matches);
|
|
for($i=0;$i<count($matches[0]);$i++)
|
|
{
|
|
$found = false;
|
|
foreach($elementlist as $k => $el){
|
|
if('{'.$k.'}' == $matches[0][$i])$found = true;
|
|
if('{'.strtoupper($k).'}' == $matches[0][$i])$found = true;
|
|
|
|
}
|
|
if(!$found)$this->positionen[$key]['inhalt_englisch'] = str_replace($matches[0][$i], '', $this->positionen[$key]['inhalt_englisch']);
|
|
}
|
|
foreach($elementlist as $k => $el)
|
|
{
|
|
$this->positionen[$key]['inhalt_deutsch'] = str_replace('{'.$k.'}', $el, $this->positionen[$key]['inhalt_deutsch']);
|
|
$this->positionen[$key]['inhalt_englisch'] = str_replace('{'.$k.'}', $el, $this->positionen[$key]['inhalt_englisch']);
|
|
$this->positionen[$key]['inhalt_deutsch'] = str_replace('{'.strtoupper($k).'}', $el, $this->positionen[$key]['inhalt_deutsch']);
|
|
$this->positionen[$key]['inhalt_englisch'] = str_replace('{'.strtoupper($k).'}', $el, $this->positionen[$key]['inhalt_englisch']);
|
|
|
|
}
|
|
if(!empty($position['image']) && !empty($this->positionen[$key]['inhalt_deutsch'])) {
|
|
$this->positionen[$key]['bild_deutsch'] = $this->positionen[$key]['inhalt_deutsch'];
|
|
$this->positionen[$key]['inhalt_deutsch'] = '';
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function SetSchriftgroesse($size)
|
|
{
|
|
if($size > 0 && $size != $this->aktFontSize)
|
|
{
|
|
$this->aktFontSize = $size;
|
|
$this->SetFontSize($size);
|
|
}
|
|
|
|
}
|
|
|
|
function SetColors($text, $draw, $fill)
|
|
{
|
|
|
|
if($text && $this->aktTextColor != $text)
|
|
{
|
|
|
|
$this->aktTextColor = $text;
|
|
|
|
$rgb = hex2dec($text);
|
|
|
|
$this->SetTextColor($rgb['R'], $rgb['G'], $rgb['B']);
|
|
}
|
|
|
|
if($draw && $this->aktDrawColor != $draw)
|
|
{
|
|
$this->aktDrawColor = $draw;
|
|
$rgb = hex2dec($draw);
|
|
$this->SetDrawColor($rgb['R'], $rgb['G'], $rgb['B']);
|
|
}
|
|
if($fill && $this->aktFillColor != $fill)
|
|
{
|
|
$this->aktFillColor = $fill;
|
|
$rgb = hex2dec($fill);
|
|
$this->SetFillColor($rgb['R'], $rgb['G'], $rgb['B']);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function renderDocument()
|
|
{
|
|
|
|
$schriftarten = $this->app->erp->GetFonts();
|
|
|
|
//$hintergrund = $this->app->DB->Select("SELECT hintergrund FROM firmendaten WHERE id='".$this->firmendatenid."' LIMIT 1");
|
|
// Multicell
|
|
|
|
$this->vorlage['format'] = strtoupper($this->vorlage['format']);
|
|
if (strpos($this->vorlage['format'], 'L') !== false) {
|
|
$this->vorlage['format'] = str_replace('L','',$this->vorlage['format']);
|
|
parent::__construct('L','mm',$this->vorlage['format']);
|
|
} else {
|
|
parent::__construct('P','mm',$this->vorlage['format']);
|
|
}
|
|
|
|
$this->SetAutoPageBreak(true,0);
|
|
$this->aktDrawColor = '#000000';
|
|
$this->aktFillColor = '#FFFFFF';
|
|
$this->aktFont = 'arial';
|
|
$this->aktTextColor = '#000000';
|
|
$this->SetDrawColor(0,0,0);
|
|
$this->SetTextColor(0,0,0);
|
|
$this->setFillColor(1,1,1);
|
|
$this->SetFont('arial');
|
|
$this->SetFontSize(12);
|
|
$this->AddPage();
|
|
if($this->vorlage['pdf_hintergrund'])
|
|
{
|
|
$this->SetXY(0,0);
|
|
$pdf = base64_decode($this->vorlage['pdf_hintergrund']);
|
|
|
|
|
|
$filename = '/tmp/'.md5($position['id'].$position['pdf_'.$this->language]).'.pdf';
|
|
//$this->app->erp->LogFile($filename);
|
|
if($fp = fopen($filename, 'wb'))
|
|
{
|
|
fwrite($fp, $pdf);
|
|
//$this->app->erp->LogFile("write");
|
|
}
|
|
if(file_exists($filename) && is_file($filename)){
|
|
//$this->app->erp->LogFile("pdf_parser");
|
|
$this->pagecount = $this->setSourceFile($filename);
|
|
if($this->pagecount > 1)$this->page2file = $filename;
|
|
$tplidx = $this->ImportPage(1);
|
|
$this->useTemplate($tplidx);
|
|
//$this->app->erp->LogFile("parsed");
|
|
}
|
|
}
|
|
|
|
$altpage = 1;
|
|
foreach($this->positionen as $key => $position)
|
|
{
|
|
//$this->app->erp->LogFile($this->positionen[$key]['typ']);
|
|
if($this->positionen[$key]['sichtbar']) {
|
|
//$this->app->erp->LogFile("h: ".$this->h);
|
|
/*if($this->positionen[$key]['position_y'] + $this->positionen[$key]['hoehe'] > $this->h)
|
|
{
|
|
$addy = $this->tMargin + $this->h - $this->positionen[$key]['position_y'];
|
|
|
|
$found = false;
|
|
foreach($this->positionen as $k => $v)
|
|
{
|
|
if(!$found)
|
|
{
|
|
if($k == $key)$found = true;
|
|
} else {
|
|
//$this->app->erp->LogFile("Addy: ".$addy);
|
|
if(isset($this->positionen[$k]['position_y']) && $this->positionen[$k]['position_y'] > $this->positionen[$key]['position_y'])
|
|
{
|
|
$alty = $this->positionen[$k]['position_y'];
|
|
$this->positionen[$k]['position_y'] += $addy;
|
|
//$this->app->erp->LogFile("allg alty: ".$alty." neu: ".$this->positionen[$k]['position_y']." addy: ".$addy);
|
|
}
|
|
}
|
|
}
|
|
$this->positionen[$key]['position_y'] += $addy;
|
|
}*/
|
|
switch($this->positionen[$key]['typ'])
|
|
{
|
|
|
|
case 'textfeld':
|
|
|
|
switch($this->positionen[$key]['schrift_align'])
|
|
{
|
|
case 'center':
|
|
$align = 'C';
|
|
break;
|
|
case 'right':
|
|
$align = 'R';
|
|
break;
|
|
default:
|
|
$align = 'L';
|
|
break;
|
|
}
|
|
|
|
if($this->language !== 'deutsch' && empty($this->positionen[$key]['inhalt_'.$this->language])){
|
|
$this->positionen[$key]['inhalt_' . $this->language] = $this->positionen[$key]['inhalt_deutsch'];
|
|
}elseif($this->language === 'deutsch' && empty($this->positionen[$key]['inhalt_'.$this->language]))
|
|
{
|
|
$this->positionen[$key]['inhalt_' . $this->language] = $this->positionen[$key]['inhalt_englisch'];
|
|
}
|
|
|
|
//$this->app->erp->LogFile("Page: ".$this->page." y: ".$this->positionen[$key]['position_y']);
|
|
$posy_rel = $this->positionen[$key]['position_y'] - $this->h*($this->page-1);
|
|
//$this->app->erp->LogFile("text y: ".$this->positionen[$key]['position_y']." rel: ".$posy_rel);
|
|
|
|
$this->SetXY($this->positionen[$key]['position_x'], $posy_rel);
|
|
$this->SetColors($this->positionen[$key]['schrift_farbe'],$this->positionen[$key]['rahmen_farbe'],$this->positionen[$key]['hintergrund_farbe']);
|
|
$this->SetLineWidth($this->positionen[$key]['rahmen']);
|
|
|
|
$this->SetXY($this->positionen[$key]['position_x'], $posy_rel);
|
|
$this->SetSchriftgroesse($this->positionen[$key]['schrift_groesse']);
|
|
$style = ($this->positionen[$key]['schrift_fett']?'B':'').($this->positionen[$key]['schrift_kursiv']?'I':'');
|
|
|
|
if(isset($this->positionen[$key]['schrift_art']) && $this->positionen[$key]['schrift_art'] && $this->positionen[$key]['schrift_art'] != 'arial' && $this->positionen[$key]['schrift_art'] != 'times')
|
|
{
|
|
|
|
if($style)
|
|
{
|
|
if(!isset($this->FontFiles[$this->positionen[$key]['schrift_art'].$style])&&!isset($this->FontFiles[strtolower($this->positionen[$key]['schrift_art']).$style]) &&isset($schriftarten[$this->positionen[$key]['schrift_art']][strtolower($style)]))
|
|
{
|
|
|
|
$this->AddFont($this->positionen[$key]['schrift_art'],$style,$this->positionen[$key]['schrift_art'].strtolower($style).'.php');
|
|
}
|
|
}else{
|
|
if(!isset($this->FontFiles[$this->positionen[$key]['schrift_art'].'.z'])&&!isset($this->FontFiles[strtolower($this->positionen[$key]['schrift_art'])]))
|
|
{
|
|
|
|
$this->AddFont($this->positionen[$key]['schrift_art'],'',$this->positionen[$key]['schrift_art'].'.php');
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
$dummyt = 'fonts: ';
|
|
foreach($this->fonts as $kkk => $vvv)
|
|
{
|
|
$dummyt .= ", ".$kkk;
|
|
|
|
}
|
|
$this->app->erp->LogFile($dummyt);*/
|
|
if(($this->positionen[$key]['schrift_art']?$this->positionen[$key]['schrift_art']:'arial') == 'arial')
|
|
{
|
|
|
|
$this->SetFont($this->positionen[$key]['schrift_art']?$this->positionen[$key]['schrift_art']:'arial',($this->positionen[$key]['schrift_underline'] == 1?'U':'').($this->positionen[$key]['schrift_kursiv']?'I':'').($this->positionen[$key]['schrift_fett']?'B':''));
|
|
} else {
|
|
if(isset($this->fonts[$this->positionen[$key]['schrift_art'].$style])||isset($this->fonts[strtolower($this->positionen[$key]['schrift_art']).$style]))
|
|
{
|
|
|
|
if(isset($this->fonts[$this->positionen[$key]['schrift_art'].$style]))
|
|
{
|
|
|
|
$this->SetFont($this->positionen[$key]['schrift_art']?$this->positionen[$key]['schrift_art']:'arial',($this->positionen[$key]['schrift_underline'] == 1?'U':'').($this->positionen[$key]['schrift_kursiv']?'I':'').($this->positionen[$key]['schrift_fett']?'B':''));
|
|
}else{
|
|
|
|
$this->SetFont(strtolower($this->positionen[$key]['schrift_art'])?strtolower($this->positionen[$key]['schrift_art']):'arial',($this->positionen[$key]['schrift_underline'] == 1?'U':'').($this->positionen[$key]['schrift_kursiv']?'I':'').($this->positionen[$key]['schrift_fett']?'B':''));
|
|
}
|
|
}else{
|
|
if(isset($this->fonts[$this->positionen[$key]['schrift_art']])||isset($this->fonts[strtolower($this->positionen[$key]['schrift_art'])]))
|
|
{
|
|
if(isset($this->fonts[$this->positionen[$key]['schrift_art']]))
|
|
{
|
|
|
|
$this->SetFont($this->positionen[$key]['schrift_art']?$this->positionen[$key]['schrift_art']:'arial',($this->positionen[$key]['schrift_underline'] == 1?'U':'').($this->positionen[$key]['schrift_kursiv']?'':'').($this->positionen[$key]['schrift_fett']?'':''));
|
|
}else{
|
|
|
|
$this->SetFont(strtolower($this->positionen[$key]['schrift_art'])?strtolower($this->positionen[$key]['schrift_art']):'arial',($this->positionen[$key]['schrift_underline'] == 1?'U':'').($this->positionen[$key]['schrift_kursiv']?'':'').($this->positionen[$key]['schrift_fett']?'':''));
|
|
}
|
|
|
|
} else {
|
|
|
|
$this->SetFont('arial',($this->positionen[$key]['schrift_underline'] == 1?'U':'').($this->positionen[$key]['schrift_kursiv']?'I':'').($this->positionen[$key]['schrift_fett']?'B':''));
|
|
}
|
|
}
|
|
}
|
|
|
|
//$this->positionen[$key]['inhalt_'.$this->language] = html_entity_decode($this->positionen[$key]['inhalt_'.$this->language]);
|
|
$xbevor = $this->GetX();
|
|
$ybevor = $this->GetY();
|
|
$pvor = $this->page;
|
|
//$this->Multicell($this->positionen[$key]['breite'],isset($this->positionen[$key]['zeilen_hoehe']) && $this->positionen[$key]['zeilen_hoehe']?$this->positionen[$key]['zeilen_hoehe']:5, ($this->WriteHTMLCell($xbevor,($this->app->erp->ReadyForPDF(($this->positionen[$key]['inhalt_'.$this->language]))))),(!empty($this->positionen[$key]['rahmen_farbe'])?1:0), $align,(!empty($this->positionen[$key]['hintergrund_farbe'])?1:0)); //$this->WriteHTML
|
|
//$this->Multicell($this->positionen[$key]['breite'],isset($this->positionen[$key]['zeilen_hoehe']) && $this->positionen[$key]['zeilen_hoehe']?$this->positionen[$key]['zeilen_hoehe']:5, $this->app->erp->ReadyForPDF(($this->positionen[$key]['inhalt_'.$this->language])),(!empty($this->positionen[$key]['rahmen_farbe'])?1:0), $align,(!empty($this->positionen[$key]['hintergrund_farbe'])?1:0)); //$this->WriteHTML
|
|
|
|
if(!empty($this->positionen[$key]['rahmen_farbe'])|| !empty($this->positionen[$key]['hintergrund_farbe']))
|
|
{
|
|
if($this->positionen[$key]['rahmen'] == 0)$this->positionen[$key]['rahmen_farbe'] = '#ffffff';
|
|
//$this->app->erp->LogFile("rechteck y: ".$this->positionen[$key]['position_y']." rel: ".$posy_rel);
|
|
$this->SetLineWidth($this->positionen[$key]['rahmen']/10);
|
|
$this->SetColors($this->positionen[$key]['schrift_farbe'],$this->positionen[$key]['rahmen_farbe'],$this->positionen[$key]['hintergrund_farbe']);
|
|
$this->Rect($this->positionen[$key]['position_x'], $posy_rel,$this->positionen[$key]['breite'],$this->positionen[$key]['hoehe'],empty($this->positionen[$key]['hintergrund_farbe']) || strtolower($this->positionen[$key]['hintergrund_farbe']) == '#ffffff'?'B':'F');
|
|
|
|
}
|
|
$this->SetXY($xbevor,$ybevor);
|
|
|
|
if($this->positionen[$key]['zeichenbegrenzung'] && $this->positionen[$key]['zeichenbegrenzung_anzahl'])
|
|
{
|
|
$this->positionen[$key]['inhalt_'.$this->language] = substr($this->positionen[$key]['inhalt_'.$this->language],0,$this->positionen[$key]['zeichenbegrenzung_anzahl']);
|
|
}
|
|
|
|
if($this->app->erp->isHTML($this->positionen[$key]['inhalt_'.$this->language])){
|
|
$this->Multicell($this->positionen[$key]['breite'],isset($this->positionen[$key]['zeilen_hoehe']) && $this->positionen[$key]['zeilen_hoehe']?$this->positionen[$key]['zeilen_hoehe']:5, $this->WriteHTML(($this->positionen[$key]['inhalt_'.$this->language])),0, $align,0); //$this->WriteHTML
|
|
}else{
|
|
$this->Multicell($this->positionen[$key]['breite'],isset($this->positionen[$key]['zeilen_hoehe']) && $this->positionen[$key]['zeilen_hoehe']?$this->positionen[$key]['zeilen_hoehe']:5, $this->app->erp->ReadyForPDF($this->positionen[$key]['inhalt_'.$this->language]),0, $align,0); //$this->WriteHTML
|
|
}
|
|
|
|
//$this->app->erp->LogFile($this->positionen[$key]['breite'].' '.(isset($this->positionen[$key]['zeilen_hoehe']) && $this->positionen[$key]['zeilen_hoehe']?$this->positionen[$key]['zeilen_hoehe']:5).' '.($this->WriteHTMLCell($xbevor,($this->app->erp->ReadyForPDF(($this->positionen[$key]['inhalt_'.$this->language]))))).' '.(!empty($this->positionen[$key]['rahmen_farbe'])?1:0).' '.$align);
|
|
$xnach = $this->GetX();
|
|
$ynach = $this->GetY();
|
|
$pnach = $this->page;
|
|
if($pnach == $pvor && $ynach < $ybevor + $this->positionen[$key]['hoehe'])$this->SetY($ybevor + $this->positionen[$key]['hoehe']);
|
|
|
|
//$addy = ($ynach - $ybevor + $this->h*($pnach - $pvor)) - $this->positionen[$key]['hoehe'];
|
|
|
|
//$this->app->erp->LogFile("Bevor: ".$xbevor.", ".$ybevor." nach: ".$xnach.", ".$ynach." Text:".addslashes($this->positionen[$key]['inhalt_'.$this->language]));
|
|
if($this->positionen[$key]['hoehe'] > 0 && ($ynach - $ybevor + $this->h*($pnach - $pvor)) > $this->positionen[$key]['hoehe'])
|
|
{
|
|
$addy = ($ynach - $ybevor + $this->h*($pnach - $pvor)) - $this->positionen[$key]['hoehe'];
|
|
//$this->app->erp->LogFile("addy: ".$addy." hoehe: ".$this->positionen[$key]['hoehe']." Bevor: ".$xbevor.", ".$ybevor." nach: ".$xnach.", ".$ynach." Text:".addslashes($this->positionen[$key]['inhalt_'.$this->language]));
|
|
$found = false;
|
|
foreach($this->positionen as $k => $v)
|
|
{
|
|
if(!$found)
|
|
{
|
|
if($k == $key)$found = true;
|
|
} else {
|
|
if(isset($this->positionen[$k]['position_y']) && $this->positionen[$k]['position_y'] > $this->positionen[$key]['position_y'])
|
|
{
|
|
$alty = $this->positionen[$k]['position_y'];
|
|
$this->positionen[$k]['position_y'] += $addy;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 'barcode':
|
|
$posy_rel = $this->positionen[$key]['position_y'] - $this->h*($this->page-1);
|
|
//$this->app->erp->LogFile("text y: ".$this->positionen[$key]['position_y']." rel: ".$posy_rel);
|
|
|
|
//$this->SetXY($this->positionen[$key]['position_x'], $posy_rel);
|
|
// fuer Anzeige Barcode
|
|
$this->positionen[$key]['inhalt_'.$this->language] = preg_replace('/\{([^{}]*+|(?R))*\}\s*/', '', $this->positionen[$key]['inhalt_'.$this->language]);
|
|
|
|
$xbevor = $this->GetX();
|
|
$ybevor = $this->GetY();
|
|
$pvor = $this->page;
|
|
$this->Code39($this->positionen[$key]['position_x'],$posy_rel, ($this->app->erp->ReadyForPDF(($this->positionen[$key]['inhalt_'.$this->language]))), 0.9, ($this->positionen[$key]['schrift_groesse']?$this->positionen[$key]['schrift_groesse']:5));
|
|
$xnach = $this->GetX();
|
|
$ynach = $this->GetY();
|
|
$pnach = $this->page;
|
|
|
|
//$addy = ($ynach - $ybevor + $this->h*($pnach - $pvor)) - $this->positionen[$key]['hoehe'];
|
|
|
|
//$this->app->erp->LogFile("Bevor: ".$xbevor.", ".$ybevor." nach: ".$xnach.", ".$ynach." Text:".addslashes($this->positionen[$key]['inhalt_'.$this->language]));
|
|
if($this->positionen[$key]['hoehe'] > 0 && ($ynach - $ybevor + $this->h*($pnach - $pvor)) > $this->positionen[$key]['hoehe'])
|
|
{
|
|
$addy = ($ynach - $ybevor + $this->h*($pnach - $pvor)) - $this->positionen[$key]['hoehe'];
|
|
//$this->app->erp->LogFile("addy: ".$addy." hoehe: ".$this->positionen[$key]['hoehe']." Bevor: ".$xbevor.", ".$ybevor." nach: ".$xnach.", ".$ynach." Text:".addslashes($this->positionen[$key]['inhalt_'.$this->language]));
|
|
$found = false;
|
|
foreach($this->positionen as $k => $v)
|
|
{
|
|
if(!$found)
|
|
{
|
|
if($k == $key)$found = true;
|
|
} else {
|
|
//$this->app->erp->LogFile("Addy: ".$addy);
|
|
if(isset($this->positionen[$k]['position_y']) && $this->positionen[$k]['position_y'] > $this->positionen[$key]['position_y'])
|
|
{
|
|
$alty = $this->positionen[$k]['position_y'];
|
|
$this->positionen[$k]['position_y'] += $addy;
|
|
//$this->app->erp->LogFile("Text alty: ".$alty." neu: ".$this->positionen[$k]['position_y']." addy: ".$addy);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 'linie':
|
|
$posy_rel = $this->positionen[$key]['position_y'] - $this->h*($this->page-1);
|
|
//$this->app->erp->LogFile("linie y: ".$this->positionen[$key]['position_y']." rel: ".$posy_rel);
|
|
$this->SetLineWidth($this->positionen[$key]['rahmen']/10);
|
|
if($this->positionen[$key]['rahmen_farbe']){
|
|
$this->SetColors($this->positionen[$key]['schrift_farbe'],$this->positionen[$key]['rahmen_farbe'],$this->positionen[$key]['hintergrundfarbe']);
|
|
$this->Line($this->positionen[$key]['position_x'], $posy_rel,$this->positionen[$key]['position_x']+ $this->positionen[$key]['breite'],$posy_rel+$this->positionen[$key]['hoehe']);
|
|
}
|
|
break;
|
|
case 'rechteck';
|
|
$posy_rel = $this->positionen[$key]['position_y'] - $this->h*($this->page-1);
|
|
//$this->app->erp->LogFile("rechteck y: ".$this->positionen[$key]['position_y']." rel: ".$posy_rel);
|
|
$this->SetLineWidth($this->positionen[$key]['rahmen']/10);
|
|
if($this->positionen[$key]['rahmen_farbe']){
|
|
$this->SetColors($this->positionen[$key]['schrift_farbe'],$this->positionen[$key]['rahmen_farbe'],$this->positionen[$key]['hintergrund_farbe']);
|
|
$this->Rect($this->positionen[$key]['position_x'], $posy_rel,$this->positionen[$key]['breite'],$this->positionen[$key]['hoehe'],empty($this->positionen[$key]['hintergrund_farbe'])?'B':'F');
|
|
}
|
|
break;
|
|
case 'bild':
|
|
$posy_rel = $this->positionen[$key]['position_y'] - $this->h*($this->page-1);
|
|
//$this->app->erp->LogFile("bild y: ".$this->positionen[$key]['position_y']." rel: ".$posy_rel);
|
|
$bildlang = $this->language;
|
|
if(!$this->positionen[$key]['bild_'.$this->language])$bildlang = $this->language == 'englisch'?'deutsch':'englisch';
|
|
|
|
if($this->positionen[$key]['bild_'.$bildlang])
|
|
{
|
|
$type = $this->positionen[$key]['bild_'.$bildlang.'_typ'];
|
|
$bild = base64_decode($this->positionen[$key]['bild_'.$bildlang]);
|
|
|
|
|
|
$im = imagecreatefromstring($bild);
|
|
if ($im !== false) {
|
|
$type = strtolower($type);
|
|
$type = '';
|
|
if($type == '')$type = $this->get_img_type($bild);
|
|
if($type == 'jpg')$type = 'jpeg';
|
|
$this->SetXY($this->positionen[$key]['position_x'], $posy_rel);
|
|
|
|
switch(strtolower($type)){
|
|
case "png":
|
|
imagepng($im, '/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.png');
|
|
$size = getimagesize('/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.png');
|
|
if($this->positionen[$key]['breite'] > 0 && $this->positionen[$key]['hoehe'] > 0)
|
|
{
|
|
$ratiob = $size[0]/$this->positionen[$key]['breite'];
|
|
$ratioh = $size[1]/$this->positionen[$key]['hoehe'];
|
|
if($ratiob < $ratioh){
|
|
$newbreite = $ratiob / $ratioh * $this->positionen[$key]['breite'];
|
|
$this->SetXY($this->positionen[$key]['position_x']+ ($this->positionen[$key]['breite']-$newbreite) / 2, $posy_rel);
|
|
$this->positionen[$key]['breite'] = $newbreite;
|
|
} else {
|
|
$newhoehe = $ratioh / $ratiob * $this->positionen[$key]['hoehe'];
|
|
$this->SetXY($this->positionen[$key]['position_x'], $posy_rel+ ($this->positionen[$key]['hoehe']-$newhoehe) / 2);
|
|
$this->positionen[$key]['hoehe'] = $newhoehe;
|
|
}
|
|
}
|
|
//$this->app->erp->LogFile($this->GetX().' '. $this->GetY());
|
|
$this->Image('/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.png',$this->GetX(), $this->GetY(),$this->positionen[$key]['breite'],$this->positionen[$key]['hoehe'],'png');
|
|
unlink('/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.png');
|
|
break;
|
|
case "jpeg": case "jpg":
|
|
$bla = imagejpeg($im, '/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.jpg');
|
|
$size = getimagesize('/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.jpg');
|
|
if($this->positionen[$key]['breite'] > 0 && $this->positionen[$key]['hoehe'] > 0)
|
|
{
|
|
$ratiob = $size[0]/$this->positionen[$key]['breite'];
|
|
$ratioh = $size[1]/$this->positionen[$key]['hoehe'];
|
|
if($ratiob < $ratioh){
|
|
$newbreite = $ratiob / $ratioh * $this->positionen[$key]['breite'];
|
|
//$this->app->erp->LogFile("breite: ".$this->GetX().' '. $this->GetY());
|
|
$this->SetXY($this->positionen[$key]['position_x']+ ($this->positionen[$key]['breite']-$newbreite) / 2, $posy_rel);
|
|
//$this->app->erp->LogFile("breite: ".$this->GetX().' '. $this->GetY());
|
|
$this->positionen[$key]['breite'] = $newbreite;
|
|
} else {
|
|
$newhoehe = $ratioh / $ratiob * $this->positionen[$key]['hoehe'];
|
|
//$this->app->erp->LogFile("hoehe: ".$this->GetX().' '. $this->GetY());
|
|
$this->SetXY($this->positionen[$key]['position_x'], $posy_rel+ ($this->positionen[$key]['hoehe']-$newhoehe) / 2);
|
|
//$this->app->erp->LogFile("hoehe: ".$this->GetX().' '. $this->GetY());
|
|
$this->positionen[$key]['hoehe'] = $newhoehe;
|
|
}
|
|
}
|
|
//$this->app->erp->LogFile($this->GetX().' '. $this->GetY());
|
|
$this->Image('/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.jpg',$this->GetX(), $this->GetY(),$this->positionen[$key]['breite'],$this->positionen[$key]['hoehe'],'jpg');
|
|
unlink('/tmp/'.md5($this->positionen[$key]['id'].$this->positionen[$key]['bild_'.$bildlang]).'.jpg');
|
|
break;
|
|
default:
|
|
|
|
break;
|
|
}
|
|
imagedestroy($im);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if($this->addpdf)
|
|
{
|
|
foreach($this->addpdf as $addpdf)
|
|
{
|
|
$filename = $addpdf;
|
|
$this->AddPage();
|
|
$this->SetXY(0,0);
|
|
$this->setSourceFile($filename);
|
|
|
|
$tplidx = $this->ImportPage(1);
|
|
$this->useTemplate($tplidx);
|
|
}
|
|
}
|
|
if(isset($this->pagecount) && $this->pagecount > 1 && $this->page < $this->pagecount)
|
|
{
|
|
for($i = $this->page; $i < $this->pagecount; $i++)$this->AddPage();
|
|
}
|
|
}
|
|
|
|
function get_img_type($data) {
|
|
$magics = array(
|
|
'ffd8ff' => 'jpg',
|
|
'89504e470d0a1a0a' => 'png',
|
|
);
|
|
|
|
foreach ($magics as $str => $ext) {
|
|
if (strtolower(bin2hex(substr($data, 0, strlen($str)/2))) == $str) return $ext;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
public function Header() {
|
|
if($this->PageNo() > 1 && $this->pagecount > 1 && $this->page2file != '')
|
|
{
|
|
$this->setSourceFile($this->page2file);
|
|
if($this->pagecount && $this->pagecount > 2 && $this->PageNo() <= $this->pagecount)
|
|
{
|
|
$tplidx = $this->ImportPage($this->PageNo());
|
|
}else{
|
|
$tplidx = $this->ImportPage(2);
|
|
}
|
|
$this->useTemplate($tplidx);
|
|
}
|
|
}
|
|
|
|
public function Footer() {
|
|
|
|
}
|
|
|
|
public function AddPDF($file)
|
|
{
|
|
$filename = '/tmp/'.md5($file.microtime(true)).'.pdf';
|
|
if($fp = fopen($filename, 'wb'))
|
|
{
|
|
fwrite($fp, $file);
|
|
fclose($fp);
|
|
if(file_exists($filename) && is_file($filename)){
|
|
$this->addpdf[] = $filename;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function inlineDocument($name = null) {
|
|
$this->renderDocument();
|
|
if(!is_null($name))
|
|
{
|
|
$this->Output($this->app->erp->GetTMP().$name,'F');
|
|
return true;
|
|
}else{
|
|
header('Content-type: application/pdf');
|
|
$this->Output();
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function ArchiviereDocument($schreibschutz = false)
|
|
{
|
|
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
|
$dir = $this->app->Conf->WFuserdata."/pdfarchiv/".$this->app->Conf->WFdbname;
|
|
if(!is_dir($dir)){
|
|
if(!mkdir($dir, 0700,true))$this->app->erp->LogFile('Fehler beim erstellen von '.$dir);
|
|
// echo "fehlt";
|
|
}
|
|
if(!is_dir($dir))return false;
|
|
if(!is_dir($dir."/".$this->table))
|
|
if(!mkdir ($dir."/".$this->table,0700,true))$this->app->erp->LogFile('Fehler beim erstellen von '.$dir."/".$this->table);
|
|
if(!is_dir($dir."/".$this->table))return;
|
|
$md5alt = false;
|
|
$altesdokument = $this->app->DB->SelectArr("SELECT * from pdfarchiv where table_id = '".$this->id."' and table_name = '".$this->table."' AND doctype = '".$this->app->DB->real_escape_string($this->doctype)."' AND doctypeorig = '".$this->app->DB->real_escape_string($this->doctypeOrig)."' ORDER BY zeitstempel DESC LIMIT 1");
|
|
if($altesdokument)
|
|
{
|
|
$altesdokument = reset($altesdokument);
|
|
$md5alt = $altesdokument['checksum'];
|
|
if(!is_file($dir."/".$this->table."/".$md5alt."_".$this->id."_".$this->filename))
|
|
{
|
|
if(file_exists($dir."/".$this->table."/".$this->id."_".$this->filename))
|
|
{
|
|
rename($dir."/".$this->table."/".$this->id."_".$this->filename,$dir."/".$this->table."/".$md5alt."_".$this->id."_".$this->filename);
|
|
if(file_exists($dir."/".$this->table."/".$md5alt."_".$this->id."_".$this->filename))
|
|
{
|
|
$md5sum_tmp = md5_file($dir."/".$this->table."/".$md5alt."_".$this->id."_".$this->filename);
|
|
if($md5sum_tmp !== $md5alt)
|
|
{
|
|
$this->app->DB->Update("UPDATE pdfarchiv set checksum = '$md5sum_tmp' WHERE id = '".$altesdokument['id']."'");
|
|
$md5alt = $md5sum_tmp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
$this->Output($dir."/".$this->table."/".$this->id."_".$this->filename,'F');
|
|
|
|
if($this->table)$this->app->DB->Update("UPDATE ".$this->table." SET zuarchivieren = 0 WHERE id = '".$this->id."'");
|
|
// neue sicherung
|
|
$md5sum_tmp = md5_file($dir."/".$this->table."/".$this->id."_".$this->filename);
|
|
|
|
if($md5sum_tmp !== $md5alt || empty($altesdokument) || empty($altesdokument['dateiname']))
|
|
{
|
|
|
|
$belegnummer = str_ireplace('.pdf','', substr($this->filename,strrpos($this->filename,'_')+1));
|
|
|
|
$this->app->DB->Insert("INSERT INTO pdfarchiv (zeitstempel, checksum, table_id, table_name, bearbeiter,erstesoriginal,doctype,doctypeorig,dateiname,belegnummer ) values (NOW(),'$md5sum_tmp','".$this->id."','".$this->table."','".$this->app->User->GetName()."',".($md5alt?0:0).",'".$this->app->DB->real_escape_string($this->doctype)."','".$this->app->DB->real_escape_string($this->doctypeOrig)."','".$this->app->DB->real_escape_string($md5sum_tmp."_".$this->id."_".$this->filename)."','".$this->app->DB->real_escape_string($belegnummer)."')");
|
|
$newid = $this->app->DB->GetInsertID();
|
|
if($schreibschutz || $this->app->DB->Select("SELECT schreibschutz FROM ".$this->table." WHERE id = '".$this->id."' LIMIT 1"))$this->app->DB->Update("UPDATE pdfarchiv SET schreibschutz = 1 WHERE id = '$newid' LIMIT 1");
|
|
if(!file_exists($dir."/".$this->table."/".$md5sum_tmp."_".$this->id."_".$this->filename))
|
|
{
|
|
rename($dir."/".$this->table."/".$this->id."_".$this->filename, $dir."/".$this->table."/".$md5sum_tmp."_".$this->id."_".$this->filename);
|
|
}
|
|
}elseif($md5alt && isset($altesdokument['id']) && $altesdokument['id'])
|
|
{
|
|
if($schreibschutz || $this->app->DB->Select("SELECT schreibschutz FROM ".$this->table." WHERE id = '".$this->id."' LIMIT 1"))$this->app->DB->Update("UPDATE pdfarchiv SET schreibschutz = 1 WHERE id = '".$altesdokument['id']."' LIMIT 1");
|
|
}
|
|
}
|
|
|
|
public function archiveDocument()
|
|
{
|
|
if($this->table && $this->id)
|
|
{
|
|
$this->ArchiviereDocument($this->app->DB->Select("SELECT schreibschutz FROM `".trim($this->app->DB->real_escape_string($this->table))."` WHERE id = '".(int)$this->id."' LIMIT 1")?true:false);
|
|
}else{
|
|
$this->ArchiviereDocument();
|
|
}
|
|
return;
|
|
$dir = $this->app->Conf->WFuserdata."pdfmirror/".$this->app->Conf->WFdbname;
|
|
if(!is_dir($dir)){
|
|
mkdir($dir, 0700,true);
|
|
// echo "fehlt";
|
|
}
|
|
if(!is_dir($dir."/".$this->table))
|
|
mkdir ($dir."/".$this->table,0700,true);
|
|
|
|
$this->Output($dir."/".$this->table."/".$this->id."_".$this->filename,'F');
|
|
}
|
|
|
|
public function displayDocument() {
|
|
$this->renderDocument();
|
|
$this->archiveDocument();
|
|
$this->Output($this->filename,'D');
|
|
exit;
|
|
}
|
|
|
|
public function displayTMP() {
|
|
$this->renderDocument();
|
|
$this->archiveDocument();
|
|
$this->Output("/tmp/".$this->filename,'F');
|
|
return "/tmp/".$this->filename;
|
|
}
|
|
|
|
|
|
public function sendDocument() {
|
|
$this->renderDocument();
|
|
$this->archiveDocument();
|
|
$this->Output($this->filename,'S');
|
|
exit;
|
|
}
|
|
|
|
|
|
/***********************************
|
|
* public functions
|
|
***********************************/
|
|
|
|
function GetFont()
|
|
{
|
|
if($this->app->erp->Firmendaten("schriftart")!="")
|
|
return $this->app->erp->Firmendaten("schriftart");
|
|
else
|
|
return 'Arial';
|
|
}
|
|
|
|
|
|
}
|