[PHP]Salto de línea con FPDF

Tomrage -  
Nivernus Mensajes publicados 1 Estado Miembro -
¡Hola!
Tengo una base de datos SQL. En ella hay un campo que proviene de un área de texto. Por lo tanto, se aceptan saltos de línea. No tengo problema en mostrar los saltos de línea en mi página PHP.
Sin embargo, estoy mostrando ciertos campos en un documento PDF utilizando la biblioteca FPDF, incluido el campo del área de texto con esos famosos saltos de línea. ¿Sabe usted si es posible mostrar esos saltos de línea en el documento PDF mediante la biblioteca FPDF?
Gracias de antemano por sus respuestas ^^ :)
Configuración: Windows XP Firefox 1.5.0.11

3 respuestas

Ekweel
 
No, precisamente. La función nl2br() lleva bien su nombre. Transforma los caracteres "\n" en "<br />".

En resumen, sirve para transformar los saltos de línea en saltos de línea "al estilo HTML". Porque el carácter "\n" no se interpreta en HTML. Hay que transformarlo en la etiqueta "<br />".

Así que, obviamente, no debes usar esta función para hacer un salto de línea en PDF.

Sin embargo, confieso que tengo el mismo problema que tú para hacer mis saltos de línea en PDF, con FPDF. Así que si alguien tiene la solución... ;)

Mientras tanto, estoy buscando de mi lado.
3
Tomrage
 
He avanzado desde esta mañana. Sin embargo, me queda un pequeño problema por resolver.
De hecho, para gestionar los retornos de carro, he utilizado n2lbr (lo cual es totalmente normal).
Sin embargo, al crear mi PDF, este no interpreta las etiquetas \r\n.
Aquí está mi código:

$reqsql="SELECT marquage from `equipement` where ID='totop'";
if(mysql_query($reqsql,$db))
{
//Lectura de la tabla de resultados
$result=mysql_query($reqsql,$db);
if($res=mysql_fetch_assoc($result))
{
$data=nl2br("$res[marquage]");
$pdf->Cell(0,10,"$data",0,1,"l");
}
}

Y esto es lo que obtengo en el PDF:

Materiales de marcado:
toto<br />titi<br />tutu<br />tata


Gracias por su ayuda ;)
1
younes371
 
Aquí está la solución:

<?php
require('fpdf.php');

class PDF extends FPDF {

function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $indent=0)
{
//Salida de texto con saltos de línea automáticos o explícitos
$cw=&$this->CurrentFont['cw'];
if($w==0)
$w=$this->w-$this->rMargin-$this->x;

$wFirst = $w-$indent;
$wOther = $w;

$wmaxFirst=($wFirst-2*$this->cMargin)*1000/$this->FontSize;
$wmaxOther=($wOther-2*$this->cMargin)*1000/$this->FontSize;

$s=str_replace("\r",'',$txt);
$nb=strlen($s);
if($nb>0 && $s[$nb-1]=="\n")
$nb--;
$b=0;
if($border)
{
if($border==1)
{
$border='LTRB';
$b='LRT';
$b2='LR';
}
else
{
$b2='';
if(is_int(strpos($border,'L')))
$b2.='L';
if(is_int(strpos($border,'R')))
$b2.='R';
$b=is_int(strpos($border,'T')) ? $b2.'T' : $b2;
}
}
$sep=-1;
$i=0;
$j=0;
$l=0;
$ns=0;
$nl=1;
$first=true;
while($i<$nb)
{
//Obtener siguiente carácter
$c=$s[$i];
if($c=="\n")
{
//Salto de línea explícito
if($this->ws>0)
{
$this->ws=0;
$this->_out('0 Tw');
}
$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
$i++;
$sep=-1;
$j=$i;
$l=0;
$ns=0;
$nl++;
if($border && $nl==2)
$b=$b2;
continue;
}
if($c==' ')
{
$sep=$i;
$ls=$l;
$ns++;
}
$l+=$cw[$c];

if ($first)
{
$wmax = $wmaxFirst;
$w = $wFirst;
}
else
{
$wmax = $wmaxOther;
$w = $wOther;
}

if($l>$wmax)
{
//Salto de línea automático
if($sep==-1)
{
if($i==$j)
$i++;
if($this->ws>0)
{
$this->ws=0;
$this->_out('0 Tw');
}
$SaveX = $this->x;
if ($first && $indent>0)
{
$this->SetX($this->x + $indent);
$first=false;
}
$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
$this->SetX($SaveX);
}
else
{
if($align=='J')
{
$this->ws=($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;
$this->_out(sprintf('%.3f Tw',$this->ws*$this->k));
}
$SaveX = $this->x;
if ($first && $indent>0)
{
$this->SetX($this->x + $indent);
$first=false;
}
$this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill);
$this->SetX($SaveX);
$i=$sep+1;
}
$sep=-1;
$j=$i;
$l=0;
$ns=0;
$nl++;
if($border && $nl==2)
$b=$b2;
}
else
$i++;
}
//Último fragmento
if($this->ws>0)
{
$this->ws=0;
$this->_out('0 Tw');
}
if($border && is_int(strpos($border,'B')))
$b.='B';
$this->Cell($w,$h,substr($s,$j,$i),$b,2,$align,$fill);
$this->x=$this->lMargin;
}
}

?>

nombra el archivo por ejemplo: mc_indent.php

<?php
require('mc_indent.php');

$InterLine = 7;

$pdf=new PDF();
$pdf->AddPage();
$pdf->SetMargins(30,10,30);
$pdf->SetFont('Arial','',12);

$txt = "Querido Pierre";
$txtLen = $pdf->GetStringWidth($txt);
$milieu = (210-$txtLen)/2;
$pdf->SetX($milieu);
$pdf->Write(5,$txt);

$pdf->ln(30);
$txt = "Ha llegado el momento de que renueves tu licencia de seguro, ya que está por expirar el 28/9 próximo. Adjuntamos a este documento el certificado de aptitud que debe ser completado por el médico.";
$pdf->MultiCell(0,$InterLine,$txt,0,'J',0,15);

$pdf->ln(10);
$txt = "Me permito recordarte que esta licencia es obligatoria y necesaria para practicar nuestro deporte favorito, tanto en nuestros entrenamientos como en cualquier otra actividad en la que puedas participar, como competiciones, cursos federativos o visitas amistosas a otro club.";
$pdf->MultiCell(0,$InterLine,$txt,0,'J',0,15);

$pdf->ln(10);
$txt = "Por lo tanto, te agradecería que me devolvieras el certificado de aptitud debidamente completado por el médico, junto con tu pago de 31 € o la prueba de este mediante transferencia bancaria. Todo esto lo más pronto posible para no interrumpir la cobertura del mencionado seguro y, al mismo tiempo, evitar que participes en nuestros cursos mientras se regulariza la situación. Es por tu seguridad.";
$pdf->MultiCell(0,$InterLine,$txt,0,'J',0,15);

$pdf->ln(10);
$txt = "Gracias por la confianza que depositas en nuestro club para tu desarrollo deportivo.";
$pdf->MultiCell(0,$InterLine,$txt,0,'J',0,15);

$pdf->ln(10);
$txt = "El comité";
$pdf->MultiCell(0,$InterLine,$txt,0,'R',0);

$pdf->Output();
?>
0
reda
 
Gracias Younes por la ayuda que nos ofreces ;)
0
younes371
 
Es con un gran placer,
Estamos aquí para compartir la información
0
Nivernus Mensajes publicados 1 Estado Miembro
 
¡Muchas gracias por esta ayuda, Younes!
0