TCPDF - Customizável

Esqueci de mencionar para criar uma pasta “imagens” dentro da biblioteca externa com o logotipo em torno de 450px width e com o nome logo.png, se quiserem modificar esta estrutura, o código está dentro da Biblioteca externa:

Abraço.

Ola dominiquini

Obrigado pela colaboração. vou testar.

Muito interessante, dominiquini. Isto tende a ser melhorado, certo?

Olá Kleyber, boa tarde

A minha próxima ação é fazer os totalizadores e depois as quebras, mas estou um pouco atarefado agora e por contas destas tarefas procurei algo para me ajudar no desenrolar das listagens/relatórios mais simples. No caso dos totalizadores está fácil de fazer e controlar como fazíamos antigamente, mas com certeza terá novas implementações.

Abraço.

Muito obrigado por este caso. Ele foi extremamente útil.

Posso perguntar como imprimir uma tabela de duas linhas? Eu tenho 12 campos na tabela e precisaria de duas linhas para a impressão.

Obrigado pela sua resposta já.

Peço desculpas por escrever. Este é um tradutor do Google.

Rik

Nesse artigo exemplifica sua necessidade. No caso o uso do colspan.

http://www.scriptcaseblog.com.br/usando-biblioteca-externa-para-montar-datagrids-em-formularios-e-report-pdf/

Obrigado Harold,

mas acho que não fiz bem as perguntas. Eu estou procurando uma solução para exibir em 2 linhas.
Eu anexo uma foto.

se fez entender sim e a resposta que eu dei é a solução: colspan na classe do artigo citado.

Veja que o cabeçalho e a linha de total diferem em colunas das linhas do registro.

Você deve montar 2 linhas (rows) para cada registro, e adicionar o atributo colspan = 2 por exemplo na primeira célula da segunda linha.
Estará informando que a célula ocupará duas colunas da linha anterior, assim você pode mesclar colunas diferentes para cada linha.

Exatamente como fez na sua imagem.

https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_td_rowspan
https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_td_colspan

Desculpe, Harold,
talvez eu tenha parecido mal ou há uma barreira de idioma aqui.
Agora vejo o que você tem em mente.
“TOTAL DE VENDAS” é a segunda linha.

O exemplo é ótimo, mas agora preciso encontrar uma maneira de ler os dados do banco de dados Mysql e usá-los neste caso.
Espero ter sucesso.

Obrigado novamente por ajuda.

Um sc_lookup retorna um array.
O artigo baseia os registros em um array.
Símples de tudo.

Obrigado Haroldo,

Você provavelmente pensou assim, mas não funciona comigo:
[iw] = new StdClass;

sc_lookup(my_data, “id, id_user, datum, ura from user_data_01”);
if ({my_data} === false)
{
echo “Access error. Message=”. {my_data_erro} ;
}
elseif (empty({my_data}))
{
echo “Select command didn’t return data”;
}
else
{
{id} = {my_data[0][0]};
{id_user} = {my_data[0][1]};
{datum} = {my_data[0][2]};
{ura} = {my_data[0][3]};
}

$_arr[] = {my_data}->fields[0];
$_arr[] = {my_data}->fields[1];
$_arr[] = {my_data}->fields[2];
$_arr[] = {my_data}->fields[3];

[iw]->arr=$_arr;
Error = Trying to get property of non-object

na verdade não.
vou montar um exemplo.

Na prática:

** clique em grade 2 para ver o resultado **
https://v9.infinitusweb.com.br/forum_sc/control_datagrid_sc_lookup/

O Artigo demonstra o uso da classe com TCPDF e com uma app Controle.

http://www.scriptcaseblog.com.br/usando-biblioteca-externa-para-montar-datagrids-em-formularios-e-report-pdf/

//tabela do banco de dados do projeto Samples
sc_lookup(ds,"SELECT
   customerid,
   companyname,
   contactname,
   contacttitle,
   country,
   stateid,
   city,
   phone,
   fax,
   creditlimit,
   birthdate
  FROM
   customers limit 15");  //sc_lookup retorno em $ds um array multi dimensional

$dg = new DataGrid(7); //INSTANCIANDO  A CLASSE COM 7 COLUNAS
/* PRIMEIRA LINHA DO CABEÇALHO */
$dg->setStyle('Header', 'style', 'background-color: #001B47'); // COR DA PRIMEIRA LINHA DO CABEÇALHO
$dg->setStyle('Header_Cell', 'colspan', '2'); //Como tinha dito uso do colspan // CODIGO IRÁ USAR 2 COLUNAS
$dg->addHeader("CODIGO");
$dg->setStyle('Header_Cell', 'colspan', '3'); // EMPRESA IRÁ USAR 3 COLUNAS
$dg->addHeader("EMPRESA");
$dg->addHeader(['CONTATO','FUNÇÃO']); // CONTATO E FUNÇÃO CADA UM OCUPA UMA COLUNA

/* SEGUNDA LINHA DO CABEÇALHO (7 COLUNAS) */
$dg->setStyle('Header', 'style', 'background-color: #002766'); // COR DA 2 LINHA DO CABEC
$dg->addHeader(['PAÍS','ESTADO','CIDADE','FONE','FAX','LIMITE CRÉD','DATA NASC']);

$dg->setStyle("Cell", 'style', 'text-align:center'); // ALINHAMENTO PARA TODAS AS CÉLULAS DAS LINHAS DE REGISTROS (DETALHE)
$dg->setStyle("Cell", 'style', 'padding:1px 2px'); // ESPAÇAMENTO ENTRE TEXT E BORDAS PARA TODAS AS CÉLULAS

/* QUARTO PARÂMETRO DE setStyle INFORMA A COLUNA QUE SE DESEJA APLICAR O ESTILO */


$Z=FALSE; /* COMO O DETALHE CONTERÁ DUAS LINHAS O ZEBRADO SERÁ CONTROLADO MANUALMENTE */


/* LOOP DE LEITURA LEITURA DOS REGISTROS QUE ESTÃO NO ARRAY RETORNADO PELO sc_lookup -> $ds */
foreach ($ds as $value) {
	
        /* FORMATANDO CAMPOS */

	$value[9] = number_format($value[9], 2, ',', '.');
	$date = date_create( $value[10]);
	$value[10] = date_format($date,"d/m/Y");
	
	/* APLICA ZEBRADO PARA PRIMEIRA LINHA DO DETALHE */
	if ($Z):
		$dg->setStyle("Row", 'style', 'background-color: WHITE');
	else:
		$dg->setStyle("Row", 'style', 'background-color: #D1EAFF');
	endif;
    	

	$dg->setStyle('Cell', 'colspan', '2'); //VALOR ID EMPRESA
	$dg->addCell($value[0]);
	$dg->setStyle('Cell', 'colspan', '3'); //VALOR EMPRESA
	$dg->addCell($value[1]);
	$dg->addCell($value[2]); //CONTATO
	$dg->addCell($value[3]); //FUNÇÃO
	
       /* APLICANDO ZEBRADO NA SEGUNDA LINHA DO DETALHE
	if ($Z):
		$dg->setStyle("Row", 'style', 'background-color: WHITE');
		$Z=FALSE;
	else:
		$dg->setStyle("Row", 'style', 'background-color: #D1EAFF');
		$Z=TRUE;
	endif;
	
        /* ESCREVENDO VALORES DA SEGUNDA LINHA DO DETALHE
        $dg->addCell($value[4]);
	$dg->addCell($value[5]);
	$dg->addCell($value[6]);
	$dg->addCell($value[7]);
	$dg->addCell($value[8]);
	$dg->addCell($value[9]);
	$dg->addCell($value[10]);

}

//HTML GERADO E APLICADO NO LABEL DE UM CAMPO DA APP CONTROLE
sc_label("Campo_DG") = $dg->create();

TAGS: HAROLDO, CLASSE, PHP, DATAGRID, BIBLIOTECA, EXTERNA, DIVIDINDO, CÉLULA, COLSPAN, TABELA, HTML, TCPDF

Eu tenho algo parecido com TCPDF, mas da pra fazer o mesmo com HTML. A única coisa que vai precisar é montar o SQL da consulta bem estruturado e montar o HTML ou TCPDF dependendo como queira que seja visualizado.

Harold, obrigada.

Eu tentei. Desculpe, eu tenho um erro novamente.Error: Invalid argument supplied for foreach()Vou tentar isso amanhã com um banco de dados de amostra e me avise.

FredKeyster
Eu não sei se entendi bem, mas estou interessado.
Rik

Poste seu código aqui.
Provavelmente esta errando em seu código.

veja:
http://www.scriptcase.com.br/forum/index.php/topic,8285.0.html

e veja também:
https://pt.stackoverflow.com/questions/156414/warning-invalid-argument-supplied-for-foreach

Este é o meu código:
sc_lookup(ds, “id, id_pacienta, ura_operacije, predviden_datum_operacije, zdravnik_kirurg, ekipa2, ekipa3, ekipa4, cave, opombe, zdravnik_v_ambulanti from kila_pot_01 limit 15”);

$dg = new DataGrid(7);

$dg->setStyle(‘Header’, ‘style’, ‘background-color: #001B47’);
$dg->setStyle(‘Header_Cell’, ‘colspan’, ‘2’); //Como tinha dito uso do colspan
$dg->addHeader(“CODIGO”);
$dg->setStyle(‘Header_Cell’, ‘colspan’, ‘3’);
$dg->addHeader(“EMPRESA”);

$dg->addHeader([‘CONTATO’,‘FUNÇÃO’]);
$dg->setStyle(‘Header’, ‘style’, ‘background-color: #002766’);

$dg->addHeader([‘PAÍS’,‘ESTADO’,‘CIDADE’,‘FONE’,‘FAX’,‘LIMITE CRÉD’,‘DATA NASC’]);

$dg->setStyle(“Cell”, ‘style’, ‘text-align:center’);
$dg->setStyle(“Cell”, ‘style’, ‘padding:1px 2px’);

$Z=FALSE;
foreach ($ds as $value) {

//$value[0] = number_format($value[0], 2, ',', '.');
//$date = date_create( $value[3]);
//$value[3] = date_format($date,"d/m/Y");


if ($Z):
    $dg->setStyle("Row", 'style', 'background-color: WHITE');
else:
    $dg->setStyle("Row", 'style', 'background-color: #D1EAFF');
endif;
    
$dg->setStyle('Cell', 'colspan', '2');
$dg->addCell($value[0]);
$dg->setStyle('Cell', 'colspan', '3');
$dg->addCell($value[1]);
$dg->addCell($value[2]);
$dg->addCell($value[3]);

if ($Z):
    $dg->setStyle("Row", 'style', 'background-color: WHITE');
    $Z=FALSE;
else:
    $dg->setStyle("Row", 'style', 'background-color: #D1EAFF');
    $Z=TRUE;
endif;

$dg->addCell($value[4]);
$dg->addCell($value[5]);
$dg->addCell($value[6]);
$dg->addCell($value[7]);
$dg->addCell($value[8]);
$dg->addCell($value[9]);
$dg->addCell($value[10]);

}

sc_label(“Campo_DG”) = $dg->create();

Você copiou meu código e só colocou o seu select?
Você tem que adaptar todo o codigo a sua situação.

Você tem conhecimentos em programação? PHP? HTML? CSS?

Sim, copiei apenas o código e organizei a instrução select para a minha situação.

Minhas habilidades de software, no entanto, são mais ruins.

Meus campos são:

id = int
id_pacienta = int
ura_operacije = TIME
predviden_datum_operacije = DATE
zdravnik_kirurg = int
ekipa2 = int
ekipa3 = int
ekipa4 = int
cave = varchar
opombe = varchar
zdravnik_v_ambulanti = int

// ******************************************************************************
No caso do primeiro tópico deste debate, eu uso isso e funciona para mim:

$check_sql = "SELECT
kila.id,
kila.ura_operacije,
kila.predviden_datum_operacije,
kila.id_pacienta,
kila.mesto_operacije,
diagnoza.naziv,
pacient.ime,
kila.zdravnik_kirurg,
osebje.ime_osebja

FROM
kila_pot_01 kila LEFT OUTER JOIN pacienti pacient ON kila.id_pacienta = pacient.id_pacienta
LEFT OUTER JOIN diagnoze diagnoza ON kila.mesto_operacije = diagnoza.id
LEFT OUTER JOIN osebje osebje ON kila.zdravnik_kirurg = osebje.id_osebja
WHERE koncano1 = ‘1’ AND predviden_datum_operacije > curdate()
ORDER BY
kila.predviden_datum_operacije ASC, kila.ura_operacije ASC";

sc_select(meus_dados, $check_sql);
// ******************************************************************************

mas não consigo definir 2 linhas.

Olá rik

Refiz a função prn_rampup_body() acrescentando um parâmetro ao final ($arg_element2) para que seja inserido o conteúdo do outro campo, porém seu relatório sairá com as definições de colunas já estabelecidas na configuração inicial.

function prn_rampup_body($arg_element,$arg_element_perc,$arg_element_align,$arg_font_size,$arg_element2)
{
$arg_html = ’






';
if (isset($arg_element2)) {
    $arg_html .= '		  <tr>
			<td width="100%"><font size="'.$arg_font_size.'px"> '.$arg_element2.'</font></td>
		  </tr>';
}
			  
$arg_html .= '		</tbody>
		</table>      	
	  </td>';

return $arg_html;		  

}

Você precisará substituir a função existente por essa acima e acrescentar o segundo parâmetro:

$html .= prn_rampup_body(‘Andre’,‘30’,‘left’,8,‘Luiz’);

Vou elaborar algo para totalização e vejo se consigo mesclar as colunas.

Abraço e espero ter ajudado!


teste.pdf (28.2 KB)

‘.$arg_element.’