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 $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 $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'; } }