LC
Alterar Imagem PDFDesigner
Pessoal fiz uma alteração na classe AdiantiPDFDesigner, no metodo generate(), para alterar imagens.
Pode indicar uma imagem como parâmetro direto no ->genetere( 'caminhdo-da-imagem' )
Também pode colocar dentro do arquivo xml, só que alterando manualmente na tag file com uma variável, exemplo: <file>{nome-variavel}</file> , e na classe que vai gerar o relatório, colocar para fazer a troca: $designer->replace( '{nome-variavel}', 'caminhdo-da-imagem' );
Pode indicar uma imagem como parâmetro direto no ->genetere( 'caminhdo-da-imagem' )
Também pode colocar dentro do arquivo xml, só que alterando manualmente na tag file com uma variável, exemplo: <file>{nome-variavel}</file> , e na classe que vai gerar o relatório, colocar para fazer a troca: $designer->replace( '{nome-variavel}', 'caminhdo-da-imagem' );
- <?php
- /**
- * Generate one PDF page with the parsed elements
- * @param $image caminhdo da imagem para substituir - Leandro - Imprime Informática
- * @author Pablo Dall'Oglio
- */
- public function generate($image = null)
- {
- $this->AddPage( $this->orientation, $this->format );
- $style = '';
- foreach ($this->elements as $element)
- {
- if (isset($element['class']))
- {
- switch ($element['class'])
- {
- case 'Rectangle':
- if ($element['shadowoffset'] > 0)
- {
- $this->setFillColorRGB($element['shadowcolor']);
- $this->Rect($element['x'] + $element['shadowoffset'], $element['y'] + $element['shadowoffset'], $element['width'], $element['height'], 'F');
- }
- parent::SetLineWidth($element['linewidth']);
- $this->setDrawColorRGB( $element['linecolor'] );
- $this->setFillColorRGB( $element['fillcolor'] );
- $mode = $element['linewidth'] > 0 ? 'FD' : 'F';
- parent::Rect($element['x'], $element['y'], $element['width'], $element['height'], $mode);
- break;
- case 'Ellipse':
- $x = $element['x'] + ($element['width']/2);
- $y = $element['y'] + ($element['height']/2);
- if ($element['shadowoffset'] > 0)
- {
- $fillc = $this->rgb2int255($element['shadowcolor']);
- parent::SetFillColor($fillc[0], $fillc[1], $fillc[2]);
- $this->ellipse($x + $element['shadowoffset'], $y + $element['shadowoffset'], $element['width']/2, $element['height']/2, 'F');
- }
- $mode = $element['linewidth'] > 0 ? 'FD' : 'F';
- parent::SetLineWidth($element['linewidth']);
- $this->setDrawColorRGB( $element['linecolor'] );
- $this->setFillColorRGB( $element['fillcolor'] );
- $this->ellipse($x, $y , $element['width']/2, $element['height']/2, $mode);
- break;
- case 'Text':
- $height_factor['Courier'] = 0.335;
- $height_factor['Arial'] = 0.39;
- $height_factor['Times'] = 0.42;
- $text = str_replace( array_keys($this->replaces), array_values($this->replaces), $element['text'] );
- $x = $element['x'] - 2;
- $y = $element['y'] + ($element['size'] * $height_factor[ $element['font'] ]) - (30 * (1/$element['size']));
- if ($element['shadowoffset'] > 0)
- {
- $this->setFontColorRGB($element['shadowcolor']);
- parent::SetFont($element['font'], $style, $element['size']);
- $this->writeHTML($x + $element['shadowoffset'], $y + $element['shadowoffset'], $text);
- }
- parent::SetFont($element['font'], $style, $element['size'] );
- $this->setFontColorRGB($element['color']);
- $this->writeHTML($x, $y, $text);
- break;
- case 'Line':
- parent::SetLineWidth($element['linewidth']);
- $this->setDrawColorRGB( $element['linecolor'] );
- parent::Line($element['x'], $element['y'], $element['x2'], $element['y2']);
- break;
- case 'Image':
- /*
- * - Alterado por Leandro - Imprime Informática
- * - No Desenho colocar um campo imagem com uma imagem qualquer
- * - Abrir o arquivo que foi salvo nomedoarquivo.pdf.xml, localizar a tag <file> e coloca uma variavel entre chaves {nomeLogo}
- * - Fazer o raplece, exemplo: $designer->replace( '{nomeLogo}', 'app/images/nome-da-image.jpg' );
- */
- // Verifica se no elemento file tem um chave '{' para fazer substituição por varialvel
- if ( strpos($element['file'], '{') === 0 )
- {
- $element['file'] = str_replace( array_keys($this->replaces), array_values($this->replaces), $element['file'] );
- }
- //var_dump($image);
- if ( !empty($image) )
- {
- $element['file'] = $image;
- }
- //var_dump($element['file']);
- if (file_exists($element['file']))
- {
- parent::Image($element['file'], $element['x'], $element['y'], $element['width'], $element['height']);
- }
- break;
- }
- }
- }
- }
- ?>
Só lembrando que eu fiz a alteração direto na classe AdiantiPDFDesigner, e esta classe faz parte da lib do Adianti, então, o correto seria criar uma classe para estender essa, como esse exemplo:
https://www.adianti.com.br/forum/pt/view_851?criando-cabecalhos-e-rodapes-nos-re