[RESOLVIDO] Problema com TCPDF, na segunda página está perdendo as configurações

Boa tarde,

Estou utilizando a a biblioteca TCPDF para fazer um relatório, a primeira página está funcionando perfeitamente, mas a partir dai as configurações de layout são perdidas.

Se alguém puder me ajudar a identificar algum erro.

Estou anexando o PDF gerado.

[code]sc_include_lib(“tcpdf”);

$pdf = new tcpdf(‘L’,‘mm’,‘A4’);

$pdf->Open();
$pdf->AddPage();

$pdf->SetPrintHeader(false);
$pdf->SetPrintFooter(false);

$relatorio_name = “Respostas da Empresa”;

$pdf->Write(0, $relatorio_name, ‘’, 0, ‘C’, true, 0, false, false, 0);

$empresa_name = “[empresa]”;

$pdf->Write(0, $empresa_name, ‘’, 0, ‘C’, true, 0, false, false, 0);

$x = array(“ano_0”=>150, “ano_1”=>170, “ano_2”=>190, “ano_3”=>210, “ano_4”=>230, “ano_5”=>250, “ano_6”=>270);

$y = 30;

$ano = list_of_years();

$pdf->SetFont(‘courier’,‘B’,10);
$pdf->SetXY($x[‘ano_0’], $y);
$pdf->Write(0, $ano[0][‘ano’], ‘’, 0, ‘L’, true, 0, false, false, 0);

$pdf->SetXY($x[‘ano_1’], $y);
$pdf->Write(0, $ano[1][‘ano’], ‘’, 0, ‘L’, true, 0, false, false, 0);

$pdf->SetXY($x[‘ano_2’], $y);
$pdf->Write(0, $ano[2][‘ano’], ‘’, 0, ‘L’, true, 0, false, false, 0);

$pdf->SetXY($x[‘ano_3’], $y);
$pdf->Write(0, $ano[3][‘ano’], ‘’, 0, ‘L’, true, 0, false, false, 0);

$pdf->SetXY($x[‘ano_4’], $y);
$pdf->Write(0, $ano[4][‘ano’], ‘’, 0, ‘L’, true, 0, false, false, 0);

$pdf->SetXY($x[‘ano_5’], $y);
$pdf->Write(0, $ano[5][‘ano’], ‘’, 0, ‘L’, true, 0, false, false, 0);

$pdf->SetXY($x[‘ano_6’], $y);
$pdf->Write(0, $ano[6][‘ano’], ‘’, 0, ‘L’, true, 0, false, false, 0);

$informacoes = list_of_information();

$y += 10;

$i = 1;
foreach($informacoes as $inf){

$informacao = $i."- ".$inf['informacao'];
$pdf->SetFont('courier','B',10);
$pdf->SetXY(5, $y);
$pdf->Write(0, $informacao, '', 0, 'L', true, 0, false, false, 0);
$i++;

[id_informacao] = $inf['id_informacao']; 
$dados = list_data();

$y +=7;

$pdf->SetFont('courier','',10);
foreach($dados as $d){
	
	$y +=5;
	
	$j=0;
	
	$pdf->SetXY(10, $y);
	$pdf->Write(0, $d['planta'], '', 0, 'L', true, 0, false, false, 0);
	
	while($j < 7){
		
		$pdf->SetXY($x['ano_'.$j], $y);
		$pdf->Write(0, $d['ano_'.$j], '', 0, 'L', true, 0, false, false, 0);
		$j++;
	}
}
$y += 15;

}
$pdf->Output();

[/code]


doc2-1-50.pdf (30.1 KB)

Precisa ver como estão seus controles aí. É um código 100% pessoal.

Faço controles sem problema com report pdf (tcpdf)

já olhou esse vídeo?
https://www.youtube.com/watch?v=aKpkZmsKwis&t=878s

Tentamos utilizar o report pdf, porém estavamos tento bastante difculdades. Devido a tópicos como esse: http://www.scriptcase.com.br/forum/index.php/topic,8067.15.html?PHPSESSID=l7il5iva8a35pqkq44rdf7egf3 achamos melhor desenvolver no Blank.

Eu sei que o código é 100% pessoal, mas minha dúvida é que na primeira página esta tudo posicionado perfeitamente dai sem explicação alguma dados são perdidos e o layout é totalmente desconfigurado.

Gostaria de saber se alguém ja teve problemas como esse e como fez para solucionar.

Não acredito que tenha algo de errado no código, já olhei algumas vezes e não encontrei nada.

O Vídeo demonstra perfeitamente que o Report PDF é 100% livre no desenvolvimento.

Você usa coordenadas em um variável, não podemos avaliar sua lógica, coloco em modo debug e echoe as variáveis da sua rotina para acompanhar os valores.

O vídeo do Haroldo sobre recibos é show.
É só seguir as dicas e prestar atenção nos detalhes.

Att,
Paulo.

Haroldo,

Eu particulamente acho muito fixo o módulo de report pdf, não consigo organizar as informações da maneira como gostaria.

Já assisti alguns vídeos para este módulo e todos possuem o mesmo layout, o que não se encaixa para o padrão escolhido.

Nesse código estou bem próximo do estipulado pelo cliente, porém não estou conseguindo finalizar. Você poderia me ajudar com esse blank?

Obrigado.

Assistiu vários vídeos mas não assistiu especificamente o que sugeri?

Eu demonstro com total liberdade e sem dificuldades e diversas situações diferentes em um mesmo PDF.

No seu código é sua lógica você está fazendo algo que o tcpdf está interpretando de forma indesejada.
Eu terei que ter o exemplo em minha máquina para avaliar.

Infelizmente ainda não consegui finalizar essa questão. Estamos tentando utilizar a biblioteca FPDF. Adicionamos esta biblioteca nas ferramentas do próprio SC.

Em seguida criamos uma biblioteca interna que sobrescreve alguns métodos como “Header” e “Footer” para atender nosso projeto, o problema é que quando eu dou um “extends” na classe que está implementando os métodos eu pego o seguinte erro:

Fatal error: Class ‘FPDF’ not found in /opt/NetMake/v81/wwwroot/scriptcase/app/SGA/relatorio_resposta_empresa_2/classe_PDF.php on line 5

Ela não encontra a Classe FPDF que é a biblioteca externa. Fazendo isso fora do SC ficou bem legal só que sem os dados necessários obviamente.

Alguém consegue dizer o que acontece.

Como vc tá fazendo o include da FPDF ?

Bom adicionamos a a biblioteca na opção: Ferramentas->bibliotecas externas.

A nova classes pra reimplementar alguns metódos foi na opção: Ferramentas->bibliotecas internas.

Na biblioteca interna tentei usar a macro: sc_include_lib(‘fpdf’), porém deu o erro apresentado.

Para incluir a Biblioteca Interna, basta ir em Programação->Bilbliotecas Internas e marcar lá.

Não precisa usar sc_include_lib(‘fpdf’).

Que bagunça que estão fazendo.
Não precisa de fpdf, não precisa sc Include lib.

Veja esse vídeo. https://youtu.be/esYVd2SHx-M
Nele explico como usar a classe FPDF no scriptcase

Cleidson, Obrigado pelo vídeo mas não consegui entender como resolver meu problema a partir dele, acho que o foco do vídeo é outro.

Acho que não consegui explicar direito qual é o nosso problema.

Temos uma aplicação: gerar_relatorio;
Temos uma a biblioteca externa: Fpdf;

Nosso problema é que através do mecanismo de herança queremos reimplementar algumas funções básicas da classe Fpdf.

Para isso criamos uma biblioteca interna: classes_fpdf com a classe MyPDF que extende a classe fpdf.

class MyPDF extends FPDF{ #código novo aqui }

Bom com isso gerou o problema que a nova biblioteca interna(classes_fpdf) com a classe (MyPDF) não consegue identificar a biblioteca externa FPDF.

Será necessário inclui a biblioteca externa de alguma maneira e não sabemos como fazer isso dentro de uma biblioteca interna.

Este é o erro gerado:

Fatal error: Class 'FPDF' not found in /opt/NetMake/v81/wwwroot/scriptcase/app/SGA/gerar_relatorio/classe_fpdf.php on line 5

class MyPDF extends FPDF{
#código novo aqui
}

tem que estar em bibliotecas externas.

e o include a classe pdf utilize require_once.

ou utilize require_once para ambos.

Sem form em uma blank, escreva a extensão da classe dentro da blank mesmo

http://www.fpdf.org/en/tutorial/tuto2.htm

http://www.fpdf.org/en/tutorial/tuto2.php

Haroldo,

Você saberia dizer o path de onde fica as bibliotecas internas e externas dentro do scriptcase?

bibliotecas internas, ou seja métodos php são incorporados dentro do fonte da aplicação gerado pelo SC.

bibliotecas externas você captura a url da mesma usando a referida macro sc_url_library.
http://www.scriptcase.com.br/docs/pt_br/v81/macros-scriptcase/macros-scriptcase#sc_url_library

não precisa saber o path pois tem macro para incluí-la na aplicação:
http://www.scriptcase.com.br/docs/pt_br/v81/macros-scriptcase/macros-scriptcase#sc_include_library

aqui vc pode ver como usar bibliotecas externa,
http://iw.servehttp.com:81/sc81/app/forum_sc/control_campo_select_dinamico (clique em fontes).

Aqui exemplo de report pdf:
http://iw.servehttp.com:81/sc81/app/forum_sc/form_recibos/

Vídeo demonstrando a criação do exemplo acima:
https://www.youtube.com/watch?v=aKpkZmsKwis&t=880s

Tentei utilizar a macro sc_include_library na biblioteca interna dessas duas maneiras:
1-

sc_include_library("sys", "fpdf", "fdpf.php");

e gerou este erro:

Fatal error: require_once(): Failed opening required '../_lib/libraries/sys/fpdf/fdpf.php' (include_path='.:/extra/build/php/lib/php') in /opt/NetMake/v81/wwwroot/scriptcase/app/SGA/_lib/lib/php/nm_functions.php on line 200

2-

sc_include_library("sys", "fpdf", "fdpf.php", true, true);

e gerou este erro:

Fatal error: require_once(): Failed opening required '../_lib/libraries/sys/fpdf/fdpf.php' (include_path='.:/extra/build/php/lib/php') in /opt/NetMake/v81/wwwroot/scriptcase/app/SGA/_lib/lib/php/nm_functions.php on line 200

Acabei de conseguir, utilizei a seguinte função:

require('../../../devel/conf/sys/libraries/fpdf/fpdf/fpdf.php');

Você foi em ferramentas/bibliotecas externas e fez o upload da biblioteca fpdf?

Se ela não for registrada e adicionada ao projeto a macro não vai identifica-la mesmo.

/----------------------------------------------------------------/

sc_include_library(“Escopo”, “Nome da Biblioteca”, “Arquivo”, “include_once”, “Require”)
Esta macro inclui na aplicação, um arquivo PHP de uma biblioteca. É necessário ter uma biblioteca criada no Scriptcase para fazer uso desta macro. Para criar uma biblioteca, vá até o menu “Ferramentas -> Bibliotecas”.