Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Imagem dentro do PDF Estou gerando um arquivo PDF onde preciso colocar uma imagem no cabeçalho, alguém pode me dar um exemplo de como faço isso? Apenas no cabeçalho preciso inserir uma imagem tentei colocar a imagem via código HTML dentro de um TR mas não deu certo em vez de carregar a imagem saiu escrito dentro do arquivo. ...
LB
Imagem dentro do PDF  
Fechado
Estou gerando um arquivo PDF onde preciso colocar uma imagem no cabeçalho, alguém pode me dar um exemplo de como faço isso?
Apenas no cabeçalho preciso inserir uma imagem tentei colocar a imagem via código HTML dentro de um TR mas não deu certo em vez de carregar a imagem saiu escrito dentro do arquivo.

  1. <?php e
  1. <?php
  2. $tr->addRow();
  3. $tr->addCell('<img src='.$cabecalho->imagem.'/>','center','header');
  4. ?>

?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (8)


LE

olá Leandro.
Você deve, no arquivo xml que gera o pdf, inserir o código à seguir:

<image id="4">
<class>Image</class>
<x>14</x>
<y>8</y>
<width>137</width>
<height>112</height>
<file>suaimagen.jpg</file>
</image>

Esse código irá puxar a imagem indicada e apresentá-la no cabeçalho pra você.
LB

Problema que não estou trabalhando com XML, veja abaixo meu código. Sou iniciante no framework estou apanhando bastante rssrrsr.

<? php e
<? php
/**
* ProvaReport Report
* @author Leandro J N Barbosa
*/
class ProvaReport extends TPage
{
private $form; // form
protected $notebook;

/**
* Class constructor
* Creates the page and the registration form
*/
function __construct()
{
parent::__construct();

// creates the form
$this->form = new TForm('form_Prova_report');
$this->form->class = 'tform'; // CSS class
$this->form->style = 'width: 500px';

// creates the table container
$table = new TTable;
$table->width = '200%';

// add the table inside the form
$this->form->add($table);

// define the form title
$table->addRowSet( new TLabel('Report'), '' )->class = 'tformtitle';



// create the form fields
$cod_prova = new TDBSeekButton('cod_prova','super_prova','form_Prova_report','Prova','descricao','cod_prova','descricao');
$descricao = new TEntry('descricao');
$cod_cab = new TEntry('cod_cab');
$cabecalho_descricao = new TEntry('cabecalho_descricao');
$observacao = new TText('observacao');
$output_type = new TRadioGroup('output_type');


// define the sizes
$cod_prova->setSize(80);
$descricao->setSize(600);
$cod_cab->setSize(80);
$observacao->setSize(600,60);
$output_type->setSize(100);
$cabecalho_descricao->setSize(600);


// validations
$output_type->addValidation('Output', new TRequiredValidator);


// add one row for each form field
$table->addRowSet( new TLabel('Cód. Prova:'), $cod_prova );
$table->addRowSet( new TLabel('Descrição:'), $descricao );
$table->addRowSet( new TLabel('Cód. Cabecalho:'), $cod_cab );
$table->addRowSet( new TLabel('Descrição Cabeçalho:'), $cabecalho_descricao );
$table->addRowSet( new TLabel('Observação:'), $observacao );
$table->addRowSet( $label_output_type = new TLabel('Output:'), $output_type );
$label_output_type->setFontColor('#FF0000');

//desabilitando campo
$descricao->setEditable(False);
$cod_cab->setEditable(False);
$observacao->setEditable(False);
$cabecalho_descricao->setEditable(False);

//CRIANDO EXIT PARA BUSCA DE DADOS DA PROVA
$exit_action = New TAction(array($this, 'onProva'));
$cod_prova->setExitAction($exit_action);


$this->form->setFields(array($cod_prova,$descricao,$cod_cab,$observacao,$output_type));


$output_type->addItems(array('html'=>'HTML', 'pdf'=>'PDF', 'rtf'=>'RTF'));;
$output_type->setValue('pdf');
$output_type->setLayout('horizontal');

$generate_button = TButton::create('generate', array($this, 'onGenerate'), _t('Generate'), 'ico_apply.png');
$this->form->addField($generate_button);

// add a row for the form action
$table->addRowSet( $generate_button, '' )->class = 'tformaction';

parent::add($this->form);
}

/**
* method onGenerate()
* Executed whenever the user clicks at the generate button
*/
public function onGenerate()
{
try
{
// open a transaction with database 'super_prova'
TTransaction::open('super_prova');
//TTransaction::setLogger(new TLoggerSTD());
$conn = TTransaction::get();

// get the form data into an active record
$formdata = $this->form->getData();

$repository = new TRepository('Prova');
$criteria = new TCriteria;

if ($formdata->cod_prova)
{
$criteria->add(new TFilter('cod_prova', ' = ', "{$formdata->cod_prova}"));
}

$objects = $repository->load($criteria);
$format = $formdata->output_type;

if ($objects)
{
$widths = array(50,100,50,100);

switch ($format)
{
case 'html':
$tr = new TTableWriterHTML($widths);
break;
case 'pdf':
$tr = new TTableWriterPDF($widths);
break;
case 'rtf':
if (!class_exists('PHPRtfLite_Autoloader'))
{
PHPRtfLite::registerAutoloader();
}
$tr = new TTableWriterRTF($widths);
break;
}


//Grave chave de acesso da prova
$key = $formdata->cod_prova;

// Instancia registro da prova
$prova = new Prova($key);

// Instancia cabeçalho
$cabecalho = new Cabecalho($prova->cod_cab);

//define estilo da celula
$tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#6B6B6B');

// Query para busca de questões
$query = 'select quest_prova.cod_prova, quest_prova.cod_quest_prov, quest_prova.cod_quest, quest_prova.valor, questoes.enunciado, '.
'questoes.imagem, questoes.alternativas, questoes.resposta, questoes.imagem_resposta from quest_prova, questoes where '.
'quest_prova.cod_prova = '.$prova->cod_prova.' and questoes.cod_quest = quest_prova.cod_quest';

$result = $conn->query($query);

foreach($result as $row)
{
$tr->addRow();
$tr->addcell($row['enunciado'],'right', 'title');
}


// create the document styles
$tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#6B6B6B');
$tr->addStyle('datap', 'Arial', '10', '', '#000000', '#E5E5E5');
$tr->addStyle('datai', 'Arial', '10', '', '#000000', '#ffffff');
$tr->addStyle('header', 'Times', '16', 'B', '#4A5590', '#C0D3E9');
$tr->addStyle('footer', 'Times', '12', 'BI', '#4A5590', '#C0D3E9');

//Cabeçalho
$tr->addRow();
$tr->addCell('<img src='.$cabecalho->imagem.'/>','center','header');
//$tr->addCell(''$cabecalho->imagem,'center','header');
//$tr->addCell('Prova', 'center', 'header', 4);

// add titles row
$tr->addRow();
$tr->addCell('cod_prova', 'right', 'title');
$tr->addCell('descricao', 'left', 'title');
$tr->addCell('cod_cab', 'right', 'title');
$tr->addCell('observacao', 'left', 'title');


// controls the background filling
$colour= FALSE;

// data rows
foreach ($objects as $object)
{
$style = $colour ? 'datap' : 'datai';
$tr->addRow();
$tr->addCell($object->cod_prova, 'right', $style);
$tr->addCell($object->descricao, 'left', $style);
$tr->addCell($object->cod_cab, 'right', $style);
$tr->addCell($object->observacao, 'left', $style);


$colour = !$colour;
}

// footer row
$tr->addRow();
$tr->addCell(date('Y-m-d h:i:s'), 'center', 'footer', 4);
// stores the file
if (!file_exists("app/output/Prova.{$format}") OR is_writable("app/output/Prova.{$format}"))
{
$tr->save("app/output/Prova.{$format}");
}
else
{
throw new Exception(_t('Permission denied') . ': ' . "app/output/Prova.{$format}");
}

// open the report file
parent::openFile("app/output/Prova.{$format}");

// shows the success message
new TMessage('info', 'Report generated. Please, enable popups in the browser (just in the web).');
}
else
{
new TMessage('error', 'No records found');
}

// fill the form with the active record data
$this->form->setData($formdata);

// close the transaction
TTransaction::close();
}
catch (Exception $e) // in case of exception
{
// shows the exception error message
new TMessage('error', 'Error ' . $e->getMessage());

// undo all pending operations
TTransaction::rollback();
}
}

/**
** Função de busca dados da prova
** - Desenvolvido por Leandro J N Barbosa
** - Utilizando para buscar a descricao do cabeçalho, codigo do cabeçalho e a observação da prova da tabela prova em tempo de execuçao
**/
public static function onProva($param)
{
if (isset($param['key']))
{
$obj = new StdClass;
$key=$param['key']; // get the parameter $key
TTransaction::open('Super_Prova'); // open a transaction with the database
$object = new Prova($key); // instantiates the Active Record
$Prova_cod_cab = $object->cod_cab;
$Prova_cabec_desc = $object->cabecalho_descricao;
$Prova_obser = $object->observacao;
}

$obj->cod_cab = $Prova_cod_cab;
$obj->cabecalho_descricao = $Prova_cabec_desc;
$obj->observacao = $Prova_obser;
TForm::sendData('form_Prova_report', $obj);
}
}
?>
?>
NR

A função addCell só aceita texto como parâmetro. Para adicionar uma imagem você deve trabalhar diretamente com a instância da FPDF:
  1. <?php
  2. $fpdf $tr->getNativeWriter();
  3. $fpdf->Image($file$x=null$y=null$w=0$h=0$type=''$link='');
  4. ?>
LB

Deu certo a imagem com o exemplo do Nataniel, agora preciso sóde mais um help como eu faço para pular uma linha. Estou usnado o objeto TPDFDesigner.
<? php e

  1. <?php  
  2.  $designer = new TPDFDesigner;
  3. $designer->fromXml('app/reports/Super_Prova/prova.pdf.xml');
  4. $designer->Write(20utf8_decode($str_quest));
  5. //Aqui preciso pular uma linha para depois escrever outro campo/variavel
  6. ?>


?>
LB

Conseguir fazer pelo comando SetXY, obrigado a ajuda de vocês.
ES

Eu não consegui integrar o código que o Nataniel Rabaioli passou, tem como postar um exemplo de como inserir a imagem com FPDF integrado com o TPDFDesigner?

O que estou tentando fazer é a impressão do pedido, já tenho ele todo pronto em xml e já imprimindo todas as infos no PDF, mas preciso colocar o codigo de barras, esse código já está previamente salvo em PNG.

Grato!
NR

A classe TPDFDesigner é filha da FPDF, então você deve chamar a função Image diretamente na instância criada:
  1. <?php
  2. $pdf = new TPDFDesigner;
  3. $pdf->Image($file$x=null$y=null$w=0$h=0$type=''$link='');
  4. ?>


MG

Nataniel
Estou com a seguinte situação.
Um html que possui uma imagem dentro dele.
Ao usar $pdf->writeHtml(0,0,$html), funciona muito bem.
Mas quanto tem uma imagem, parece que o base64 é impresso.
Como resolver isso?
Obrigado.