Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos do forum, venho até vcs para solucionar meu problema.
Estou desenvolvendo um projeto com zend framework, já esta quase pronto, mas me deparei com problemas para gerar relatórios. Não consegui utilizar o Zend_pdf para distribuir os dados em tabelas. entao parti para o FPDF, está funcionando perfeitamente, desde que eu nao utilize imagens , sempre que eu tento colocar uma imagem exibe este erro.
Warning: getimagesize(baltec.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\xampp\htdocs\sistema_baltec\library\fpdf\fpdf.php on line 1235
FPDF error: Missing or incorrect image file: baltec.jpg
ja tentei colocar o caminho da imagem de todas as formas e sempre caio no mesmo problema....
exatamente, quero colocar a imagem no header do pdf
$this->Image("imagens/logo.jpg", 240, 10);
alguem pode me ajudar ?
como coloco imagem no fpdf ?
sempre que eu tento coloca imagem aparece este erro
Warning: getimagesize(baltec.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\xampp\htdocs\sistema_baltec\library\fpdf\fpdf.php on line 1235
FPDF error: Missing or incorrect image file: baltec.jpg
Olha, parece que o problema é no caminho da imagem, já que está dizendo que não encontrou o arquivo. Reveja a localização e confira se realmente existe, se o nome está correto.
Carlos Eduardo
O mesmo arquivo que da esse erro , coloquei ele num projeto php comum e ele funciona normalmente, mas eu preciso que funcione num projeto zend framework, e ai sempre da esse erro...
Por isto que eu falo, o problema deve estar no local em que o arquivo está. Como você está fazendo a chamada à este arquivo e qual a localização do mesmo?
Carlos Eduardo
a imagem esta na pasta public/images/logo.jpg
e o arquivo que gera o pdf está no controlador da pagina
estou tentando assim :
$this->Image("/sistema_baltec/public/images/logo.jpg", 240, 10);
Post seu Header() inteiro...
Olha, tente criar uma tag img normal, utilizando este endereço. Algo assim.
<img src="/sistema_baltec/public/images/logo.jpg"/>
Veja se aparece. Se aparecer, poste o seu Bootstrap, para ver o que você tem colocado no seu include_path.
Carlos Eduardo
as imagens funcionam normamente, tenho outras imagens no projeto e elas funcionam normalmente o problema esta realmente no pdf, ja testei inclusive com a imagem logo.jpg e ela aparece no navegador normal.
aqui segue meu bootstrap
error_reporting(E_ALL | E_STRICT);
define("CAMINHO","/sistema_baltec/public/");
define("PATCH","/sistema_baltec");
$operatingSystem = stripos($_SERVER['SERVER_SOFTWARE'],'win32')!== FALSE ? 'WINDOWS' : 'LINUX';
$bar = $operatingSystem == 'WINDOWS' ? '\\' : '/' ;
$pathSeparator = $operatingSystem == 'WINDOWS' ? ';' : ':' ;
$documentRoot = $operatingSystem == 'WINDOWS' ? str_replace('/','\\',$_SERVER['DOCUMENT_ROOT']) : $_SERVER['DOCUMENT_ROOT'];
$path = $pathSeparator.$documentRoot.$bar.'sistema_baltec'.$bar.'library';
$path .= $pathSeparator.$documentRoot.$bar.basename(getcwd()).$bar.'application'.$bar.'models';
set_include_path(get_include_path().$path);
include 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Pdf');
Zend_Loader::loadClass('Zend_Registry');
Zend_Loader::loadClass('Zend_Layout');
Zend_Layout::startMvc();
Zend_Loader::loadClass('Zend_Paginator');
Zend_Loader::loadClass('Zend_Paginator_Adapter_Array');
Zend_Loader::loadClass('Zend_View_Helper_PaginationControl');
Zend_Loader::loadClass('Zend_File_Transfer');
Zend_Loader::loadClass('Zend_File_Transfer_Adapter_Http');
Zend_Loader::loadClass('Zend_Session');
Zend_Loader::loadClass('Zend_Form');
Zend_Loader::loadClass('Zend_Form_Element_File');
Zend_Loader::loadClass('Zend_Form_Element_Submit');
Zend_Loader::loadClass('Zend_Controller_Front'); /** Classe de controladores */
Zend_Loader::loadClass('Zend_View'); /** Classe das visões */
Zend_Loader::loadClass('Zend_Config_Ini'); /** Classe usada para configurações */
Zend_Loader::loadClass('Zend_Db'); /** Classe para acesso a base de dados */
Zend_Loader::loadClass('Zend_Db_Table'); /** Classe para usar as tabelas como objetos */
Zend_Loader::loadClass('Zend_Filter_Input'); /** Classe usada para filtrar os dados */
Zend_Loader::loadClass('Zend_Session'); /** Classe usada para gerenciar a sessão */
Zend_Loader::loadClass('Zend_Session_Namespace'); /** Classe usada para armazenar e recuperar dados da sessão */
Zend_Registry::set('post', new Zend_Filter_Input(NULL,NULL,$_POST));
Zend_Registry::set('get', new Zend_Filter_Input(NULL,NULL,$_GET));
$view = new Zend_View(); /** Cria um novo objeto do tipo view */
$view->setEncoding('UTF-8');
$view->setEscape('htmlspecialchars');
$view->setBasePath('./application/views/'); /** Define o diretório onde estarão as visões */
Zend_Registry::set('view', $view); /** Registra na memória a variável view que indica a visão */
Zend_Session::start();
Zend_Registry::set('session',new Zend_Session_Namespace());
$baseUrl = substr($_SERVER['PHP_SELF'], 0, strpos($_SERVER['PHP_SELF'], '/index.php'));
$frontController = Zend_Controller_Front::getInstance();
$frontController->setbaseUrl($baseUrl);
$frontController->setControllerDirectory('./application/controllers');
$frontController->throwExceptions(TRUE);
$config = new Zend_Config_Ini('./application/config.ini', 'database');
Zend_Registry::set('config', $config);
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Zend_Registry::set('db', $db);
setlocale(LC_MONETARY,'ptb');
$frontController->dispatch();você alterou alguma coisa da classe do fpdf esta usando a class PDF extends FPDF ?
você esta montando o header chamando a função header?
$this->image('sistema_baltec/public/images/logo.jpg', 0, 0, 240, 10);
OFF-Tópic - Cara, na real, teu bootstrap tá bem estranho. Tipo, você dá um load em várias classes, mesmo se não for usar todas elas em cada vez. Isto não pode ser bom para o desempenho.
Outra coisa.
$operatingSystem = stripos($_SERVER['SERVER_SOFTWARE'],'win32')!== FALSE ? 'WINDOWS' : 'LINUX';
$bar = $operatingSystem == 'WINDOWS' ? '\\' : '/' ;
$pathSeparator = $operatingSystem == 'WINDOWS' ? ';' : ':' ;
$documentRoot = $operatingSystem == 'WINDOWS' ? str_replace('/','\\',$_SERVER['DOCUMENT_ROOT']) : $_SERVER['DOCUMENT_ROOT'];
$path = $pathSeparator.$documentRoot.$bar.'sistema_baltec'.$bar.'library';
$path .= $pathSeparator.$documentRoot.$bar.basename(getcwd()).$bar.'application'.$bar.'models';
Não precisa utilizar variáveis pra isto. Utilize constantes que é melhor.
Sugiro 2 leituras para você.
http://forum.imasters.com.br/index.php?/topic/284116-zend-framework/
Tutorial do Fabyo. Dá uma olhada no bootstrap dele.
http://forum.imasters.com.br/index.php?/topic/343336-zendframework-1-8-0/
Tutorial do Fabyo também. Aqui ele fala como configurar o Zend_Autoloader a partir da versão 1.8.
Você deve ter seguido o livro do Flavio Gomes. Eu comecei assim. Daí eu vi os tutos do Fabyo e achei MUITO mais fácil. Principalmente o autoloader, que agiliza bastante o desenvolvimento.
Carlos Eduardo
realmente eu me baseio no livro do flavio.. valeu pela dica...
Mais ainda não resolveu, certo? Semana passada estava com um problema assim e passei trabalho pra resolver, mas ao invés de imagens, era um arquivo DBF que eu precisava ler. Era o include_path que estava errado. Quem sabe modificando este include_path você consiga resolver. No meu caso foi tentativa e erro.
Carlos Eduardo
EDIT - Tenta colocar o caminho a partir do public. Assim...
$this->Image("public/images/logo.jpg", 240, 10);
Depois, se não funcionar, tenta assim.
$this->Image("/public/images/logo.jpg", 240, 10);
eu modifiquei o bootstrap de acordo com o exemplo do fabyo, nossa ficou muito melhor mesmo, vou testar o pdf e posto se deu certo ou nao.
olha amigos fiz os teste e continua dando erro, porem tentei colocar uma imagem gif funcionou, o problema parece estar no formato da imagem, ele não aceita jpg e nem png.
$pdf->Image("public/images/ajax.gif",0,0); // assim funcionou
pq o fpdf não esta aceitando jpg e nem png ?
Posta o código completo do action que cria o PDF.
Carlos Eduardo
segue o codigo
<?php
//o cabeçalho e o rodape foram configurados diretamente no arquivo fpdf.php
require_once 'library/fpdf/pdf.php';
require_once 'Zend/Pdf.php'; public function indexAction() {
$session = Zend_Registry::get('session');
if(!isset($session->usuario)){
$this->_redirect('index');
}
$this->_helper->layout->disableLayout();
$get = Zend_Registry::get('get');
$garantia = $get->id;
//consulta a garantia
$db = Zend_Registry::get('db');
$sql = "select * from Garantia g,Clientes c where g.id_cliente = c.Cod_Cliente and g.id_garantia = $garantia";
$result = $db->fetchAll($sql);
foreach ($result as $dados){
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf -> AddPage();
$pdf -> SetFont('Arial','B',9);
$pdf -> Ln(9);
$pdf -> Cell(15,4,"À",0,1,"L");
$pdf -> Cell(100,4,utf8_encode($dados["Fantasia"]),0,1,"L");
$pdf -> Cell(100,4,"Att. Sr. ".utf8_encode($dados["contato"]),0,1,"L");
$pdf -> Cell(15,8,"Assunto: ",0,0,"L");
$pdf -> Cell(80,8,"Análise dos seguinte produtos ref a garantia n.".$dados["id_garantia"]."",0,1,"L");
$pdf -> Ln(4);
//consulta os intens da garantia
$pdf -> SetFont('Arial','',9);
$sqlItens = "select * from ItensGarantia i,Produto p where i.id_produto = p.id_produto and id_garantia = $garantia";
$resultItens = $db->fetchAll($sqlItens);
foreach ($resultItens as $itens){
$conteudo = $itens["cod_produto"]." - ".utf8_decode($itens["descricao"])." Serie: ".$itens["serie"]." - MARCA BALTEC FREIOS";
$pdf->Cell(200,4,$conteudo,0,1,"L");
}
$pdf->Ln(6);
$pdf->Cell(100,3,"Vimos por meio desta, apresentar relatório técnico dos ensaios na peça em epígrafe nos enviada para análise",0,1,"L");
$pdf -> SetFont('Arial','B',10);
$pdf -> ln(6);
$pdf->Cell(200,3,"Relatório de ensaio",0,1,"C");
/* Abre um espaço para o cabeçalho dos campos */
$pdf->Ln(5);
$pdf->SetFont("Arial", "B", 9);
//exibe os procedimentos e a descricao
$sqlItens = "select p.cod_produto, i.serie,pr.procedente, pr.descricaoCli, a.descricaoCli as acao from
ItensGarantia i,
Problemas pr,
AcaoCorrecao a,
Produto p
where i.id_produto = p.id_produto and
i.id_problema = pr.id_problema
and i.id_acao = a.id_acao_correcao and
id_garantia = $garantia";
$resultItens = $db->fetchAll($sqlItens);
$pdf -> SetFont("Arial", "B", 9);
$pdf -> Cell(18,8,"Código",0,0);
$pdf -> Cell(22,8,"Série",0,0);
$pdf ->Cell(22,8,"Procedente",0,0);
$pdf -> Cell(65,8,"Análise",0,0);
$pdf -> Cell(25,8,"Procedimento:",0,1);
foreach ($resultItens as $itens){
$procedente = $itens["procedente"];
if($procedente==1){
$valorProcedente = "Sim";
}
else{
$valorProcedente = "Não";
}
$pdf->SetWidths(array(18,22,22,65,65));//CADA VALOR DESTE ARRAY SERÁ A LARGURA DE CADA COLUNA
srand(microtime()*1000000);
$pdf->Row(array($itens["cod_produto"],$itens["serie"],$valorProcedente,utf8_decode($itens["descricaoCli"]),utf8_decode($itens["acao"])));
}
$pdf -> Ln(12);
$pdf -> SetFont("Arial", "B", 8);
$pdf -> Cell(25,6,"Sem mais para o momento, aproveitamos para agradecer a sua preferência, ficando a disposição para esclarecer quaisquer dúvidas.",0,1);
$pdf -> Ln(6);
$pdf -> Cell(190,6,"Atenciosamente.",0,1,"C");
//consulta o tecnico
$sqlFunc = "select f.Nome from Garantia g, Funcionarios f where g.id_garantia = $garantia and g.id_tecnico = f.Cod_Func";
$resultFunc = $db->fetchAll($sqlFunc);
foreach ($resultFunc as $func){
$pdf -> Ln();
$pdf -> Cell(190,6,$func["Nome"],0,1,"C");
$pdf -> Cell(190,6,"Assistente Técnico",0,1,"C");
}
$pdf->Output();
}
}
}Certo, mas onde está a parte que está com problema? Achei que você estava setando tudo nesta Action.
Off Topic - Tenta manter o padrão MVC. Não é legal fazer as consultas ao BD no controller, isto é função do Model.
Carlos Eduardo
Esta imagem você quer colocar aonde??? header no meio da página??
Post essa parte da imagem