2009-05-14 14 views
25

Ich erzeuge einige PDF-Datei im laufenden Betrieb mit PHP. Mein Problem ist, dass ich Zeilenumbrüche in einen Teil des Textes einfügen muss, der in die PDF-Datei eingefügt wird. Etwas wie:Einfügen von Zeilenumbrüchen in PDF

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

So druckt:

Linie ein

Linie zwei

Ich weiß \n nicht auf PDF funktioniert, aber tun Sie Jungs wissen, jeder Zeichen oder etwas, das einen Zeilenumbruch für diese Dateien darstellt?

+1

"Irgendein Third-Party-Code": Es wäre einfacher für alle gewesen, wenn Sie die Lib genau gesagt hätten (zum Glück sieht es aus wie Thomasrutter) – siukurnin

+0

InsertText() erscheint nicht im fpdf-Handbuch, also bezweifle ich das Der Code von Drittanbietern ist fpdf. Ich denke, dass es am besten sein könnte, das fpdf-Tag zu entfernen – danio

+0

Zurück zu dieser Frage fast 3 Jahre später ist es mir peinlich, wie vage es ist. Es tut uns leid. Ich bin mir ziemlich sicher, dass ich mich auf fpdf bezog, oder eine Variante davon, die ich irgendwo gefunden habe. Ich habe meinen Plan aufgegeben, trotzdem auf PDF zu schreiben (oder zumindest habe ich es eine Weile benutzt, und es war gut, dann habe ich es aufgegeben). – thomasrutter

Antwort

33

Wenn Sie fpdf verwenden, um Zeilenumbrüche verwenden zu können, müssen Sie einen multi-line text cell as described here verwenden.

Wenn Sie dies verwenden, sollten Zeilenumbrüche in Ihrem Text korrekt interpretiert und konvertiert werden.

Nur ein kurzes Beispiel:

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

Hier 2 ist die Höhe des mehrzeiligen Textfeld ein. Ich weiß nicht, in welchen Einheiten gemessen wird, oder ob Sie es einfach auf 0 setzen und ignorieren können. Vielleicht versuche es mit einer großen Zahl, wenn es zunächst nicht funktioniert.

+2

Sir, es interpretiert das \ n nicht als Zeilenumbruch, es druckt es nur auf der PDF-Datei als \ n – sqlchild

+8

@sqlchild - Sie müssen die Anführungszeichen verwenden, wie unten erwähnt, mit dem \ n wie hier erwähnt. Es funktioniert. Ich habe es nur selbst versucht. – JM4

+0

@thomasrutter, ich benutze auch FPDF. Gibt es eine Möglichkeit, '\ n' in' Cell() 'Funktion zu lesen? Ich habe Probleme beim Positionieren neben "MultiCell()", wenn es auf der 2. Seite druckt. Ich muss wirklich '\ n' in' Cell() 'lesen. Bitte helfen Sie. Vielen Dank. – xjshiya

12

Ihr Code liest

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

Ich weiß nicht, über die PDF-Bibliothek, die Sie verwenden, aber normalerweise, wenn Sie \ n wollen als Zeilenumbruch interpretiert werden Sie doppelte Anführungszeichen in PHP verwenden müssen, z

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

Sie feststellen, dass

2 ist die Höhe des mehrzeiligen Textfeld

Nein, es ist nicht. 2 ist der Abstand zwischen den Zeilen des Textes.

Ich glaube nicht, dass es eine reale Möglichkeit ist, die Höhe des tatsächlichen resultierenden Textfeldes für die Berechnung, es sei denn, Sie GetY() verwenden und subtrahieren dann den ursprünglichen Wert Y in Ihrer SetXY() Anweisung für die ulticell an erster Stelle platzieren.

+2

Oh mein Gott. Ich konnte nicht herausfinden, warum das verdammte Ding nicht richtig funktionierte - Ich wollte nur neue Zeilen drucken! Dann habe ich das plötzlich gelesen. Wie nervig. Es könnte spezifischer in der Dokumentation sein. Für * w * sagt es nur "Höhe der Zellen". Dieser Plural dort ist entscheidend, um zu verstehen, was es bedeutete. Ich nahm an, dass es nur die Höhe der Schachtel war, in der ich drucken wollte. D'oh! – Chud37

+0

Wie auch immer ich versuche zu sagen ist danke :) lol – Chud37

0

Vielleicht ist es zu spät, aber ich habe dieses Problem sehr einfach gelöst, Ich benutze die Multicell-Option und der Text kommt aus einem Formular, wenn ich ein Eingabefeld benutze, um den Text zu bekommen, den ich nicht kann Einfügen von Zeilenumbrüchen in irgendeiner Weise, aber wenn ein Textarea-Feld verwenden, die Zeilenumbrüche im Textbereich sind Zeilenumbrüche in der multicell ...und das ist es, es funktioniert auch, wenn ich utf8_encode($text) Option Akzente erhalten

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

in jeder Spalte, bevor Sie die X-Position zuerst die Y-Position anzuzeigen, so dass es wie diese wurde

Säule 1

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

Spalte 2

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

Hoffnung es hilft ..

+0

Nach der Dokumentation http://www.fpdf.org/en/doc/multicell.htm ist das erste Argument von MultiCell "Breite" nicht "Höhe". –

3

Eine andere Option ist TCPDF::Ln() zu verwenden. Es fügt der PDF-Datei eine Zeile mit der Option zum Festlegen der Höhe hinzu.

Wenn die Zeilenumbrüche innerhalb Ihre Inhalte sind bereits dann MultiCell() ist wahrscheinlich der Weg zu gehen, wie andere schon erwähnt haben, aber ich finde, ich mag mit:

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

Es verwirrt mich, dass Cell() und MultiCell() nehmen in verschiedenen Argumente, so tendiere ich dazu, nur Cell() zu verwenden. Auch liest es sich wie ein Newline-Zeichen für das PDF genauso wie \n liest wie ein Newline-Zeichen in Text oder <br> in HTML.

0

Oder versuchen Sie es einfach nach jeder Textpassage für eine neue Zeile.

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

-1

\n Verwendung ist alles schön und gut, aber das funktioniert auch und ist viel einfacher:

$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); 

Sie die MultiCell konfigurieren können HTML-Datei auf einer grundlegenden Ebene zu lesen.

0

andere Lösungen (funktioniert mit TCPDF)

Verwenden HEREDOC für eine lange Zeichenfolge. Setzen Sie HERDOC für eine CONST zum Beispiel (definieren verschiedene Sprachen)

$_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); 

Werke für mich wery gut ....

4

Ich habe einfach ersetzt die "\n" mit "<br>" Tag. Hat gut funktioniert. Es scheint TCPDF den Text als HTML-Render

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

Können Sie Ihren Code mit den Parametern aktualisieren, die Sie übergeben? zum Beispiel $ w = 205, $ h = 10. Es mag für erfahrene Benutzer einfach zu verstehen sein, ich nicht. Danke für Ihre Hilfe – user5249203

7

I '\n' für chr (10) verändert und es funktionierte:

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

Dies ist, weil PHP Text in Hochkommata (') wörtlich nimmt, während Text in Anführungszeichen (")' interpretiert 'ist, so dass' \ n 'ist eine 2-stellige Zeichenfolge, mit einem Schrägstrich und ein n-Zeichen, während "\ n" eine 1-stellige Zeichenfolge ist, die ein einzelnes Zeichen für eine neue Zeile enthält.;) – enhzflep

+0

'utf8_decode (chr (10))' funktioniert –

1

Nach so vielen Alpträume, ich habe eine Lösung gefunden.

utf8_decode(chr(10)) 

Ich versuchte \n, <br/> und chr(10) aber nichts funktionierte. Dann stellte ich fest, dass es utf-8 war und versuchte das oben genannte einfach.Es funktioniert gut mit MultiCell, aber nicht mit Cell.

+0

funktioniert für mich ... – ramiromd

Verwandte Themen