Foros del Web » Programando para Internet » PHP »

Clase fpdf problemillas

Estas en el tema de Clase fpdf problemillas en el foro de PHP en Foros del Web. Estoy intentando generar documentos pdf con la clase fpdf. Tengo en el directiorio asi -www.web.com -Pruebas ->font ->fpdf.php ->generar_pdf.php Son los archivos necesarios para hacer ...
  #1 (permalink)  
Antiguo 25/05/2009, 02:57
 
Fecha de Ingreso: marzo-2009
Mensajes: 105
Antigüedad: 15 años
Puntos: 0
Clase fpdf problemillas

Estoy intentando generar documentos pdf con la clase fpdf.

Tengo en el directiorio asi

-www.web.com
-Pruebas ->font
->fpdf.php
->generar_pdf.php

Son los archivos necesarios para hacer funcionar la calse.

el codigo en el generar_pdf es:

<?php
require('fpdf.php');
define('FPDF_FONTPATH','font/');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'¡Hola, Mundo!');
$pdf->Output();
?>

En teoria no hay ningun fallo y deberia crearme el pdf,pero cuando vamos a ver el resultado(link para verlo online -> http://www.todotrucos.org/pruebas/tucos_pdf.php):

%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream xœ3Rðâ2Ð35W(çr QÐw3T04Ó30PISp êZ*˜[š€…¤(h,ôÈÏIÔQð-ÍKÉWÔTÉ)*7¯ endstream endobj 1 0 obj <> endobj 5 0 obj <> endobj 2 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F1 5 0 R >> /XObject << >> >> endobj 6 0 obj << /Producer (FPDF 1.6) /CreationDate (D:20090525015128) >> endobj 7 0 obj << /Type /Catalog /Pages 1 0 R /OpenAction [3 0 R /FitH null] /PageLayout /OneColumn >> endobj xref 0 8 0000000000 65535 f 0000000229 00000 n 0000000417 00000 n 0000000009 00000 n 0000000087 00000 n 0000000316 00000 n 0000000521 00000 n 0000000596 00000 n trailer << /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 699 %%EOF


Si alguien puede ayudarme .

Gracias de antemano.

Última edición por bertoR; 25/05/2009 a las 02:58 Razón: typo
  #2 (permalink)  
Antiguo 25/05/2009, 03:42
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Clase fpdf problemillas

Yo creo documentos pdf con este codigo


Código HTML:
<html>
<head>
<title>Name Entry Level</title>
</head>
<body>
<table border="0" width="100%" height="100%">
<tr>
<td valign="middle" align="center">
<form method="POST" action="pdf_file.php">
<p>
<font size="3" face="Arial">
Enter your name here please => 
<input type="text" name="userName" size="20" maxlength="20">
</font>
</p>
<p>
<input type="submit" value="Submit" name="B1">
<input type="reset" value="Reset" name="B2">
</p>
</form>
</td>
</tr>
</table>
</body>
</html> 

Código PHP:
<?php 
$user 
$HTTP_POST_VARS["userName"]; 
$pdf pdf_new(); 
pdf_open_file($pdf$_SERVER['DOCUMENT_ROOT'] . "pdf/nombre.pdf"); 
pdf_set_info($pdf"Author""Ben Shepherd"); 
pdf_set_info($pdf"Title""Creating a pdf"); 
pdf_set_info($pdf"Creator""Ben Shepherd"); 
pdf_set_info($pdf"Subject""Creating a pdf"); 
pdf_begin_page($pdf800600); 
$arial PDF_load_font($pdf,"Courier","host",""); 
pdf_setfont($pdf$arial14); 
pdf_show_xy($pdf"aqui va una informacion importante",50400); 

pdf_end_page($pdf); 
pdf_close($pdf); 
echo 
"<A HREF=\"nombre.pdf\" TARGET=\"_blank\">Open pdf in a new window $user</A>"
?>
  #3 (permalink)  
Antiguo 25/05/2009, 07:11
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: Clase fpdf problemillas

esto es lo que dicen las faqs de la pagina de fpdf:

2. Cuando intento crear un PDF, aparecen un montón de caracteres raros. ¿Por qué?
Esos caracteres "raros" constituyen de hecho el contenido del PDF. Este comportamiento es un fallo de IE6. Cuando recibe una página en HTML y después un PDF de la misma URL, lo muestra directamente sin lanzar Acrobat. Esto ocurre con frecuencia durante la fase de desarrollo: al menor fallo en el script, se envía una página HTML y, después de corregirlo, se envía el PDF.
Para resolver el problema, simplemente reinicie IE. También puede irse a otra URL y volver.
Para evitar estas molestias durante el desarrollo, puede generar el PDF directamente a un fichero y abrirlo mediante el navegador.
__________________
La estadística es una ciencia que demuestra que si mi vecino tiene dos coches y yo ninguno, los dos tenemos uno.
  #4 (permalink)  
Antiguo 25/05/2009, 08:24
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
Respuesta: Clase fpdf problemillas

Hola, bertoR!

Le eché una mirada a tu ejemplo y funciona bien. Solo sácale el ): de tu enlace.
Se lo saqué y me sale perfecto el "Hola, mundo!".

Lo que es yo estoy empantanado en algo similar. Tengo este código al cual llego desde el respectivo enlace para que me lea bien lo que estoy solicitando.

Por cierto, amigo bertoR, perdona que ponga acá mi consulta, pero como es más o menos lo mismo, el uso del famoso FPDF, en una de ésas mi ejemplo te sirve y si alguien aporta la solución, también puede servirte.


Código PHP:
<?php
define
('FPDF_FONTPATH','fpdf/font/'); 
require(
'fpdf/fpdf.php'); 
$link mysql_connect("localhost""root""password");
mysql_select_db("BdD"$link);
if(isset(
$_GET['not_ID'])){
   
$not_ID $_GET['not_ID'];
   
$sqlQueryNot mysql_query("SELECT not_ID, notTitulo, notTexto, catCategoria
                               FROM sn_noticias
                               WHERE not_ID = $not_ID"
$link)
                               or die(
mysql_error);        
   while(
$rowNot mysql_fetch_array($sqlQueryNot)){
$pdf=new FPDF(); 
$pdf->AddPage(); 
$pdf->SetFont('Arial','B',16); 
$pdf->Cell(0,10,'notTitulo:'.$rowNot[1],0,1,'R'); 
$pdf->Cell(0,10,'fecha:'.$rowNot[2],0,2,'R');
$pdf->Cell(0,10,'notTexto:'.$rowNot[3],0,3,'R'); 
$pdf->Output();
 }
  }
?>
Bueno, la cosa es que me funciona, la librería me genera el PDF, pero el texto me sale sin formato y no se darle el orden correcto a los rows (por ejemplo, no me sale la fecha y donde se supone que debiera aparecer el texto, aparece la categoría y el texto, sale apenas una línea y con los tags, los divs, etc ... un desastre).

Estoy empantanado en eso. A ver si tb. me pueden dar una mano Gracias!

Última edición por Dragon_Mandarin; 25/05/2009 a las 09:25
  #5 (permalink)  
Antiguo 25/05/2009, 17:11
 
Fecha de Ingreso: marzo-2009
Mensajes: 105
Antigüedad: 15 años
Puntos: 0
Respuesta: Clase fpdf problemillas

espero te sirva este codigo

<?php
//pa generar pdfs
require('fpdf.php');
define('FPDF_FONTPATH','font/');
//includes
include("datos_bd.php");
//obtenemos id tabla
//id tabla
$idt=$_GET['idtruco'];

//datos del juego
$tabla = mysql_query("SELECT * FROM trucos where id='$idt'");


while ($registro = mysql_fetch_array($tabla)) {
$juego=$registro['juego'];
$categoria=$registro['categoria'];
$trucos=$registro['truco'];
$uploader=$registro['uploader'];
}

//pdf con codigo html ;)

//no tocar
class PDF extends FPDF
{
var $B;
var $I;
var $U;
var $HREF;

function PDF($orientation='P',$unit='mm',$format='A4')
{
//Llama al constructor de la clase padre
$this->FPDF($orientation,$unit,$format);
//Iniciación de variables
$this->B=0;
$this->I=0;
$this->U=0;
$this->HREF='';
}

function WriteHTML($html)
{
//Intérprete de HTML
$html=str_replace("\n",' ',$html);
$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
foreach($a as $i=>$e)
{
if($i%2==0)
{
//Text
if($this->HREF)
$this->PutLink($this->HREF,$e);
else
$this->Write(5,$e);
}
else
{
//Etiqueta
if($e[0]=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else
{
//Extraer atributos
$a2=explode(' ',$e);
$tag=strtoupper(array_shift($a2));
$attr=array();
foreach($a2 as $v)
{
if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
$attr[strtoupper($a3[1])]=$a3[2];
}
$this->OpenTag($tag,$attr);
}
}
}
}

function OpenTag($tag,$attr)
{
//Etiqueta de apertura
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,true);
if($tag=='A')
$this->HREF=$attr['HREF'];
if($tag=='BR')
$this->Ln(5);
}

function CloseTag($tag)
{
//Etiqueta de cierre
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,false);
if($tag=='A')
$this->HREF='';
}

function SetStyle($tag,$enable)
{
//Modificar estilo y escoger la fuente correspondiente
$this->$tag+=($enable ? 1 : -1);
$style='';
foreach(array('B','I','U') as $s)
{
if($this->$s>0)
$style.=$s;
}
$this->SetFont('',$style);
}

function PutLink($URL,$txt)
{
//Escribir un hiper-enlace
$this->SetTextColor(0,0,255);
$this->SetStyle('U',true);
$this->Write(5,$txt,$URL);
$this->SetStyle('U',false);
$this->SetTextColor(0);
}
}
//fin clase de pdf generator

//lo k kieras mostrar aqui
$html=' <a href="http://www.ejemplo.org">TodoTrucos.com tu web de trucos online</a><br><br><h2>Trucos de '.$juego.' para '.$categoria.'</h2><br><br>'.$trucos;

$pdf=new PDF();
//Primera página
$pdf->AddPage();
$pdf->SetFont('Arial','',20);

//imagen yo la pondr en la variable $html
//$pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org');

$pdf->SetLeftMargin(45);
$pdf->SetFontSize(14);
//codigo k escribe el html
$pdf->WriteHTML($html);
//sacar pdf
$pdf->Output();
?>
  #6 (permalink)  
Antiguo 25/05/2009, 17:12
 
Fecha de Ingreso: marzo-2009
Mensajes: 105
Antigüedad: 15 años
Puntos: 0
Respuesta: Clase fpdf problemillas

espero te sirva este codigo

<?php
//pa generar pdfs
require('fpdf.php');
define('FPDF_FONTPATH','font/');
//includes
include("datos_bd.php");
//obtenemos id tabla
//id tabla
$idt=$_GET['idtruco'];

//datos del juego
$tabla = mysql_query("SELECT * FROM trucos where id='$idt'");


while ($registro = mysql_fetch_array($tabla)) {
$juego=$registro['juego'];
$categoria=$registro['categoria'];
$trucos=$registro['truco'];
$uploader=$registro['uploader'];
}

//pdf con codigo html ;)

//no tocar
class PDF extends FPDF
{
var $B;
var $I;
var $U;
var $HREF;

function PDF($orientation='P',$unit='mm',$format='A4')
{
//Llama al constructor de la clase padre
$this->FPDF($orientation,$unit,$format);
//Iniciación de variables
$this->B=0;
$this->I=0;
$this->U=0;
$this->HREF='';
}

function WriteHTML($html)
{
//Intérprete de HTML
$html=str_replace("\n",' ',$html);
$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
foreach($a as $i=>$e)
{
if($i%2==0)
{
//Text
if($this->HREF)
$this->PutLink($this->HREF,$e);
else
$this->Write(5,$e);
}
else
{
//Etiqueta
if($e[0]=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else
{
//Extraer atributos
$a2=explode(' ',$e);
$tag=strtoupper(array_shift($a2));
$attr=array();
foreach($a2 as $v)
{
if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
$attr[strtoupper($a3[1])]=$a3[2];
}
$this->OpenTag($tag,$attr);
}
}
}
}

function OpenTag($tag,$attr)
{
//Etiqueta de apertura
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,true);
if($tag=='A')
$this->HREF=$attr['HREF'];
if($tag=='BR')
$this->Ln(5);
}

function CloseTag($tag)
{
//Etiqueta de cierre
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,false);
if($tag=='A')
$this->HREF='';
}

function SetStyle($tag,$enable)
{
//Modificar estilo y escoger la fuente correspondiente
$this->$tag+=($enable ? 1 : -1);
$style='';
foreach(array('B','I','U') as $s)
{
if($this->$s>0)
$style.=$s;
}
$this->SetFont('',$style);
}

function PutLink($URL,$txt)
{
//Escribir un hiper-enlace
$this->SetTextColor(0,0,255);
$this->SetStyle('U',true);
$this->Write(5,$txt,$URL);
$this->SetStyle('U',false);
$this->SetTextColor(0);
}
}
//fin clase de pdf generator

//lo k kieras mostrar aqui
$html=' <a href="http://www.ejemplo.org">TodoTrucos.com tu web de trucos online</a><br><br><h2>Trucos de '.$juego.' para '.$categoria.'</h2><br><br>'.$trucos;

$pdf=new PDF();
//Primera página
$pdf->AddPage();
$pdf->SetFont('Arial','',20);

//imagen yo la pondr en la variable $html
//$pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org');

$pdf->SetLeftMargin(45);
$pdf->SetFontSize(14);
//codigo k escribe el html
$pdf->WriteHTML($html);
//sacar pdf
$pdf->Output();
?>
  #7 (permalink)  
Antiguo 25/05/2009, 18:03
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
Respuesta: Clase fpdf problemillas

Hola, amigo, lo estoy probando, pero por el momento ni me rula, o sea, me escribe el pdf, pero sin la data ...

A ver si le doy el "palo al gato"

Uff, ojalá apareciera RogerTM para que me diera una mano; si al final, se trata de un enchulamiento de su script. En fin, vamos a ver, en una de ésas tengo que nombrarlo 3 veces!! jejejejeje

Gracias por compartir, bertoR.

Última edición por Dragon_Mandarin; 25/05/2009 a las 18:21
  #8 (permalink)  
Antiguo 26/05/2009, 07:43
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
Respuesta: Clase fpdf problemillas

Logré exportar los registros, cada uno de ellos a partir del enlace pertinente, pero por desgracia, me lee los tags, o sea, no procesa la data en html y el pdf me sale con un formato de tabla. por ejemplo:

| Titulo | Fecha | Texto | Categoria |
---------------------------------------------

Y no es la idea. Bueno, estoy usando otra clase, no el FPDF, sino la que pueden descargar desde acá: http://www.ros.co.nz/pdf/

Mi código ha quedado así. Repito, no logro darle formato html.

Código PHP:
<?php
require_once('pdf/class.ezpdf.php');
require_once(
'pdf/class.pdf.php');
//Connect to your database
$link mysql_connect("localhost""root""password");
mysql_select_db("BdD"$link);
if(isset(
$_GET['not_ID'])){
   
$not_ID $_GET['not_ID'];
   
$sqlQueryNot mysql_query("SELECT not_ID, notTitulo, fecha, notTexto, catCategoria
                               FROM sn_noticias
                               WHERE not_ID = $not_ID"
$link)
                               or die(
mysql_error);        
$pdf =& new Cezpdf('LETTER');
$pdf->selectFont('pdf/fonts/Helvetica.afm');
$pdf->ezSetCmMargins(1,1,1.5,1.5);
$ixx 0;
  while(
$rowNot mysql_fetch_array($sqlQueryNot)){
 
$ixx $ixx+1;
 
$data[] = array_merge($rowNot, array('num'=>$ixx));
}
$rowNot = array(
    
'notTitulo'=>'<b>Titulo</b>',
    
'fecha'=>'<b>Fecha</b>',
    
'notTexto'=>'<b>Texto</b>',
    
'catCategoria'=>'<b>Categoria</b>'
   
);
$options = array(
    
'shadeCol'=>array(0.9,0.9,0.9),
    
'xOrientation'=>'center',
    
'width'=>500
   
);
$pdf->ezText($txttit12);
$pdf->ezTable($data$rowNot''$options);
$pdf->ezText("\n\n\n"10);
$pdf->ezText("<b>Fecha:</b> ".date("d/m/Y"), 10);
$pdf->ezText("<b>Hora:</b> ".date("H:i:s")."\n\n"10);
$pdf->ezStream();
 }
?>
Ojalá alguien pueda darme una mano con esto.

Gracias

PD:- Me acabo de percatar, luego de leer el manual de esta clase, que el desarrollador olvidó programar la clase para nuestro idioma!

En fin ...

Última edición por Dragon_Mandarin; 26/05/2009 a las 08:34
  #9 (permalink)  
Antiguo 26/05/2009, 10:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 105
Antigüedad: 15 años
Puntos: 0
Respuesta: Clase fpdf problemillas

te recomiendo la clase que uso yo,ais tal mente pk puedes meter en la variable $html todo el codigo html que quieras,i no tienes que preocuparte para nada,muy pronte pondre otro codigo para generar pdf mas profesionales(imagenes ,tablas,titulo etc..)
  #10 (permalink)  
Antiguo 26/05/2009, 10:18
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
De acuerdo Respuesta: Clase fpdf problemillas

Así es, amigo. Ya me cansé de buscarle la solución al problema, así es que, haré como dices. La verdad que la clase me está funcionando, pero con esos problemas que mencioné antes.

Ojalá puedas indicarme cómo usar el FPDF en el código que he posteando antes. De veras te lo agradeceré mucho.

Saludos
  #11 (permalink)  
Antiguo 26/05/2009, 12:44
Avatar de iandrade  
Fecha de Ingreso: septiembre-2006
Ubicación: Xalapa, Veracruz, MÉXICO.
Mensajes: 171
Antigüedad: 17 años, 7 meses
Puntos: 6
Respuesta: Clase fpdf problemillas

Es un problema de Iexplorer, podras probarlo en firefox y no veras ese detalle, al parecer es un problema clasico, resuelto ya en la nueva version de FPDF que requiere php5
__________________
No todo lo que se hace en segundo plano es AJAX
  #12 (permalink)  
Antiguo 26/05/2009, 15:33
Avatar de Dragon_Mandarin  
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
Respuesta: Clase fpdf problemillas

Es lo que estoy tratando de hacer; probé con la clase que he mencionado antes y me resultó, pero con los problemas ya anotados.

Vamos a ver cómo me va con el FPDF.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:12.