PD
Gerando mais páginas com TPDFDesigner
Fechado
Seguidamente tem perguntas no fórum sobre como gerar mais páginas com um TPDFDesigner. Procurei alterar esse exemplo que vem junto com o tutor: www.adianti.com.br/framework_files/tutor/index.php?class=PDFDesignSh para gerar mais uma página.
Segue o código-fonte integral. Basta usarmos o método generate(), ele já abre uma página nova, renderiza os elementos desenhados. Após isso, basta adicionarmos os elementos dinâmicos novamente (gotoAnchorXY, Write, etc):
Segue o código-fonte integral. Basta usarmos o método generate(), ele já abre uma página nova, renderiza os elementos desenhados. Após isso, basta adicionarmos os elementos dinâmicos novamente (gotoAnchorXY, Write, etc):
- <?php
- class PDFDesignShapesView extends TPage
- {
- private $form; // form
- /**
- * Class constructor
- */
- function __construct()
- {
- parent::__construct();
- // creates the form
- $this->form = new TForm('form_pdf_shapes');
- // creates a table
- $table = new TTable;
- // add the table inside the form
- $this->form->add($table);
- // create the form fields
- $name = new TEntry('name');
- $name->addValidation( 'Name', new TRequiredValidator );
- $label = new TLabel('Name' . ': ');
- $label->setFontColor('red');
- $table->addRowSet($label, $name);
- $save_button=new TButton('generate');
- $save_button->setAction(new TAction(array($this, 'onGenerate')), 'Generate');
- $save_button->setImage('ico_save.png');
- // add a row for the form action
- $table->addRowSet($save_button);
- // define wich are the form fields
- $this->form->setFields(array($name,$save_button));
- // wrap the page content using vertical box
- $vbox = new TVBox;
- $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $vbox->add($this->form);
- parent::add($vbox);
- }
- /**
- * method onGenerate()
- * Executed whenever the user clicks at the generate button
- */
- function onGenerate()
- {
- try
- {
- $data = $this->form->getData();
- $this->form->validate();
- $designer = new TPDFDesigner;
- $designer->fromXml('app/reports/forms.pdf.xml');
- $designer->replace('{name}', $data->name );
- $designer->generate();
- $designer->gotoAnchorXY('anchor1');
- $designer->SetFontColorRGB('#FF0000');
- $designer->SetFont('Arial', 'B', 18);
- $designer->Write(20, 'Dynamic text !');
- $designer->replace('{name}', $data->name.'2' );
- $designer->generate();
- $designer->gotoAnchorXY('anchor1');
- $designer->SetFontColorRGB('#FF0000');
- $designer->SetFont('Arial', 'B', 18);
- $designer->Write(20, 'Dynamic text 2 !');
- $file = 'app/output/pdf_shapes.pdf';
- if (!file_exists($file) OR is_writable($file))
- {
- $designer->save($file);
- parent::openFile($file);
- }
- else
- {
- throw new Exception(_t('Permission denied') . ': ' . $file);
- }
- new TMessage('info', 'Report generated. Please, enable popups in the browser (just in the web).');
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage());
- }
- }
- }
- ?>
Muito bom!, porém ao gerar o relatório o navegador pede para desbloquear o pop-up, então para evitar esse tipo de situação eu resolvi gerar relatório em uma classe TWindow, realizando selects pelos os parâmetros.
Lembrando se caso for utilizar esse modo que usei, deve ser criada uma div com a tag <iframe>.
Ex: