2009-05-14 21 views
25

Estoy generando algún archivo PDF sobre la marcha usando PHP. Mi problema es que necesito insertar saltos de línea en alguna parte del texto que se insertará en el archivo PDF. Algo así como:Insertar saltos de línea en PDF

$pdf->InsertText('Line one\n\nLine two'); 

Así se imprime:

Línea uno

La línea dos

\n no funciona en PDF, pero ¿ustedes saben cualquier personaje o algo que representa un salto de línea en estos archivos?

+1

"código de un tercero": hubiera sido más fácil para todos si dijera qué lib exactamente (afortunadamente parece que thomasrutter lo reconoció) – siukurnin

+0

InsertTexto() no aparece en el manual de fpdf así que dudo que el el código de un tercero es fpdf. Creo que sería mejor eliminar la etiqueta de fpdf – danio

+0

Volviendo a esta pregunta casi 3 años después, me avergüenza cuán vago es. Lo siento. Estoy bastante seguro de que me estaba refiriendo a fpdf, o una variante que encontré en alguna parte. Abandoné mi plan de escritura en PDF de todos modos (o al menos, lo usé por un tiempo, y estuvo bien, luego lo abandoné). – thomasrutter

Respuesta

33

Si está utilizando fpdf, para poder utilizar los saltos de línea necesitará usar un multi-line text cell as described here.

Si utiliza esto, los saltos de línea en el texto se deben interpretar y convertir correctamente.

Sólo un ejemplo rápido:

$pdf->Multicell(0,2,"This is a multi-line text string\nNew line\nNew line"); 

Aquí, 2 es la altura de la caja de texto de varias líneas. No sé en qué unidades se mide o si puede simplemente configurarlo en 0 e ignorarlo. Tal vez intente con un gran número si al principio no funciona.

+2

señor, no está interpretando la \ n como nueva línea, solo está imprimiéndola en el pdf como \ n – sqlchild

+8

@sqlchild - Debe usar las comillas dobles como se menciona a continuación usando \ n como se menciona aquí. Funciona. Solo me probé. – JM4

+0

@thomasrutter, también estoy usando FPDF. ¿Hay alguna forma de leer '\ n' en la función' Cell() '? Tengo problemas para colocar el 'MultiCell()' adyacente cuando se imprime en la segunda página. Realmente necesito leer '\ n' en' Cell() '. Por favor ayuda. Gracias. – xjshiya

12

Su código lee

$pdf->InsertText('Line one\n\nLine two'); 

no sé acerca de la biblioteca de PDF que está utilizando, pero normalmente si quiere \ n que se interpreta como un salto de línea debe utilizar comillas dobles en PHP, por ejemplo,

$pdf->InsertText("Line one\n\nLine two"); 
4

usted afirma que

2 es la altura de la caja de texto de varias líneas

, no lo es. 2 es la distancia entre las líneas de texto.

No creo que haya una forma real de calcular la altura del cuadro de texto resultante real, a menos que use GetY() y restar el valor Y original utilizado en su declaración SetXY() para colocar el Multicell en primer lugar.

+2

Oh, Dios mío. No pude entender por qué la maldita cosa no funcionaba correctamente. ¡Todo lo que quería hacer era imprimir nuevas líneas! Entonces, de repente, leí esto. Que molesto. Podría ser más específico en la documentación. Para * w * simplemente dice 'Altura de las células'. Ese plural es crucial para entender lo que significa. Supuse que era exactamente la altura de la caja en la que quería imprimir. ¡Oh! – Chud37

+0

De todos modos, lo que intento decir es gracias :) lol – Chud37

0

Quizás sea demasiado tarde pero resolví este problema de una manera muy simple, Estoy usando la opción Multicell y el texto proviene de un formulario, si utilizo un campo de entrada para obtener el texto no puedo inserte saltos de línea de cualquier manera, pero si utiliza un campo de área de texto, la línea se rompe en el área de texto son saltos de línea en el multicell ...y eso es todo, que funciona incluso si uso utf8_encode($text) opción para conservar los acentos

1
$pdf->SetY($Y_Fields_Name_position); 
$pdf->SetX(#); 
$pdf->MultiCell($height,$width,"Line1 \nLine2 \nLine3",1,'C',1); 

En cada columna, antes de establecer la posición X indican en primer lugar la posición Y, por lo que llegó a ser como este

Columna 1

$pdf->SetY($Y_Fields_Name_position); 
$pdf->SetX(#); 
$pdf->MultiCell($height,$width,"Line1 \nLine2 \nLine3",1,'C',1); 

columna 2

$pdf->SetY($Y_Fields_Name_position); 
$pdf->SetX(#); 
$pdf->MultiCell($height,$width,"Line1 \nLine2 \nLine3",1,'C',1); 

Hope ayuda ..

+0

De acuerdo con la documentación http://www.fpdf.org/en/doc/multicell.htm, el primer argumento de MultiCell es 'ancho' no' altura'. –

3

Otra opción es usar TCPDF::Ln(). Agrega una línea al PDF con la opción de establecer la altura.

Si los saltos de línea están dentro de su contenido ya continuación MultiCell() es probablemente el camino a seguir, como otros han mencionado, pero me parece me gusta usar:

$pdf->Cell(0, 0, 'Line 1', 0, 0, 'C'); 
$pdf->Ln(); 
$pdf->Cell(0, 0, 'Line 2', 0, 0, 'C'); 

Me confunde que Cell() y MultiCell() toma en diferentes argumentos, por lo que tiendo a usar Cell() solamente. También se lee como un carácter de nueva línea para el PDF igual que \n se lee como un carácter de nueva línea en el texto o <br> en HTML.

0

O simplemente intente esto después de cada pasaje de texto para una nueva línea.

$pdf->Write(0, ' ', '*', 0, 'C', TRUE, 0, false, false, 0) ;

-1

Usando \n es todo muy bien, pero esto funciona también y es mucho más fácil:

$pdf->MultiCell(0,5,"Line one here 
Line 2 here 
Line 3 here",0); 
1
MultiCell($w, $h, 'text<br />', $border=0, $align='L', $fill=1, $ln=0, 
    $x='', $y='', $reseth=true, $reseth=0, $ishtml=true, $autopadding=true, 
    $maxh=0); 

Puede configurar el MultiCell para leer HTML en un nivel básico.

0

Otras soluciones (trabaja con TCPDF)

Uso heredoc de una larga cadena. Puso HERDOC para una CONST por ejemplo (definir diferentes idiomas)

$_prepare_const_EN = <<<EOT 
this is a long string 
and new line as well ... 
EOT; 

$define('STR_EN', $_prepare_const_EN); 

$pdf->InsertText(STR_EN); 

funciona para mí pueblo muy bien ....

4

simplemente he sustituido el "\n" con la etiqueta "<br>". Funcionó bien. Parece TCPDF representar el texto como HTML

$strText = str_replace("\n","<br>",$strText); 
$pdf->MultiCell($width, $height,$strText, 0, 'J', 0, 1, '', '', true, null, true); 
+0

¿Puedes actualizar tu código con qué parámetros estás pasando? por ejemplo, $ w = 205, $ h = 10. Puede ser fácil de entender para los usuarios expertos, no lo soy. Gracias por su ayuda – user5249203

7

he cambiado '\n' para CHR (10) y funcionó:

$pdf->MultiCell(0,5,utf8_decode($variable1 . chr(10) . $variable2),1); 
+1

Esto es porque PHP toma texto entre comillas simples (') literalmente, mientras que el texto entre comillas dobles (") es' interpretado ', entonces eso significa' \ n 'es una cadena de 2 caracteres, con una barra inclinada un carácter n, mientras que "\ n" es una cadena de 1 carácter, que contiene un solo carácter de nueva línea.) – enhzflep

+0

'utf8_decode (chr (10))' funciona –

1

Después de tener tantas pesadillas, he encontrado una solución.

utf8_decode(chr(10)) 

me trataron \n, <br/> y chr(10) pero nada funcionó. Entonces me di cuenta de que era utf-8 y acabo de probar el anterior.Funciona bien con MultiCell pero no con Cell.

+0

funciona para mí ... – ramiromd