Ronald: Text manuell in Zeilen zerbröseln (umständlich?)

Hi,

ich möchte einen Text mauell in einzelne Zeilen zerbröseln, weil ich diese dann später besser per fpdf (cell) in ein Formular einfügen kann. Wenn ich bei fpdf->Multicell Zeilenabstände einstellen könnte, bräuchte ich das gar nicht, aber das scheint nunmal nicht zu gehen.

Mein Anfang sieht so aus:

$laenge_text=strlen($text);
if ($laenge_text>40) {
$text_1 = substr($text,0,40); //
$cut_1 = strrpos($text_1," "); //
$text_1 = substr($text,0,$cut_1); //

$text_2 = substr($text,40,$laenge_text); //
$cut_2 = strpos($text_2," "); //
$text_2 = substr($text,0,$cut_2); //
}

Das ganze würde ja auch klappen, wenn der Text z.B. aus weniger als 80 Buchstaben (incl. Zeichen) besteht.

Ist das sehr umständlich? Gibt es einfachere Wege?

Und vor allem: Fall ich nicht weiß, ob der Text ggf. 150 Buchstaben hat, kann ich das vorab berücksichtigen? Oder müßte ich dazu jedesmal den Resttext "durchzählen" und dann nach if-Abfrage $text_3, $text_4 usw. erstellen.

Gibts da nicht irgendwas rekursives? (Sorry, wenn ich den Begriff falsch nutze, ich meine damit, einen Durchlauf, der immer wieder benutzt wird, falls der Restwert > irgendwas ist.

Danke und Grüße

Ronald

  1. Öhm, wieso kannst du nicht die Zeilenabstände einstellen? Dafür ist doch das kleine h bei MultiCell da?! http://www.cat.jtis.de/fpdf/doc/multicell.htm

    Funktioniert wunderbar bei mir, Zeilenumbrüche erfolgen dann wie üblich mit \n und der Text wird auch automatisch umgebrochen.

    Der Yeti

    --
    Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
    Durchaus studiert, mit heißem Bemühn.
    Da steh' ich nun, ich armer Thor!
    Und bin so klug als wie zuvor!
    1. Öhm, wieso kannst du nicht die Zeilenabstände einstellen? Dafür ist doch das kleine h bei MultiCell da?! http://www.cat.jtis.de/fpdf/doc/multicell.htm

      Funktioniert wunderbar bei mir, Zeilenumbrüche erfolgen dann wie üblich mit \n und der Text wird auch automatisch umgebrochen.

      Der Yeti

      »»

      Nö, das kleine h ist für die Höhe der Zelle gedacht. Also bspw. wäre  $pdf->MultiCell(145,30,$Firma,1,1,L); eine Zelle von 145 mm oder pt Breite und 30 mm oder pt Höhe.
      Danch wird der vorhandene Text innerhalb dieser Zelle höhenmäßig zentriert.
      Hast Du also nur eine Zeile, steht diese genau in der Mitte (von der Höhe her gesehen).
      Ich muß aber innerhalb der 30 mm oder pt hohen Zelle auch noch Linien bedienen und nicht einfach mitten reinschreiben :(

      Grüße

      Ronald

      1. Sorry, versteh immer noch nicht ganz was du vorhast. Willst du im Fließtext Linien unterbringen? Oder hast du eine Art <table> (dafür gibt es ja auch ein schönes Beispiel im FPDF Tutorial)?

        Aber dein Code sah schon nicht schlecht aus beim ersten Drüberfliegen, musst ihn halt nur so lange ausführen, bis nicht das Ende des Strings erreicht bzw. überschritten wurde ( >= strlen($wasauchimmer) ).

        Der Yeti

        1. Sorry, versteh immer noch nicht ganz was du vorhast. Willst du im Fließtext Linien unterbringen? Oder hast du eine Art <table> (dafür gibt es ja auch ein schönes Beispiel im FPDF Tutorial)?

          Nö, ich hab' ein Formular zum Ausfüllen, das in den Drucker kommt. Dieses Formulat hat leider Linien, die ich treffen muß.
          Daher nützt es mir wenig, nur die Gesamthöhe der Multicell zu haben, sondern ich muß die (z.B. 3) Linien innerhalb der Multicell treffen, egal ob der Text (der aus einer db kommt und jedesmal unterschiedlich ist) nun 1 Zeile lang ist oder 2 oder 3 zeilen.

          Ist er aber z.B. 2 Zeilen lang und ich benutze nur Multicell, wird der in der Zelle vorhandene Höhenplatz auf 2 Zeilen verteilt und ich schreiben genau in die Linien anstelle auf den Linien.

          Grüße

          Ronald

          1. Aaaah, ok.
            Funktioniert es denn jetzt?

            Der Yeti

            --
            Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
            Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
            Und bin so klug als wie zuvor!
            1. Aaaah, ok.
              Funktioniert es denn jetzt?

              Der Yeti

              Nö, ich versuche mich gerade daran, kanst ja mal reinsehen...

              $text="Blablabla blallallalla lala, blabl lalla bbblalla lalala blabla, lalala blablablabalalla";
              while ($out != "ja") {
              $laenge_text=strlen($text);
              if ($laenge_text>40) {
              $text[$i] = substr($text,0,40); //
              $cut[$i] = strrpos($text[$i]," "); //
              $text[$i] = substr($topic_title,0,$cut[$i]); //
              $rest = substr (strrchr ($text[$i]," "), 1 );
              $text=$rest . substr($text,$cut[$i],)
              $i++;
              } else {
               $out = "ja";
              }
              for($a=1;$a<=$i;$a++) {
              echo "$text[$i] <br>";
              }

              Habe aber nunmehr Parse Errors... Bin leider noch nicht so gut in php :(

              Ist wenigstens verständlich, was ich mit dem Code machen möchte? ;)

              Grüße

              Ronald

              1. Ich hatte einen Denkfehler bzgl. fpdf->Multicell.

                Danke für den hinweis

                Ronald

                1. Da bin ich ja beruhigt. ;-)
                  Der Yeti

                  --
                  Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
                  Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
                  Und bin so klug als wie zuvor!
                  1. Da bin ich ja beruhigt. ;-)
                    Der Yeti

                    Ich erst... :)

                    Grüße

                    Ronald

  2. hallo

    Wenn ich bei fpdf->Multicell Zeilenabstände einstellen könnte, bräuchte ich das gar nicht, aber das scheint nunmal nicht zu gehen.

    schon mal folgendes probiert:
    $pdf->MultiCell(200,10,'ganz viel text mit 10 pkt zeilenabstand ...');

    Ist das sehr umständlich? Gibt es einfachere Wege?

    nimm doch arrays, eine zählschleife und ceil

    Gibts da nicht irgendwas rekursives? (Sorry, wenn ich den Begriff falsch nutze, ich meine damit, einen Durchlauf, der immer wieder benutzt wird, falls der Restwert > irgendwas ist.

    eine zählschleife und ne if-abfrage

    Danke und Grüße

    Ronald

    cu
    ulli

    1. hallo

      Wenn ich bei fpdf->Multicell Zeilenabstände einstellen könnte, bräuchte ich das gar nicht, aber das scheint nunmal nicht zu gehen.
      schon mal folgendes probiert:
      $pdf->MultiCell(200,10,'ganz viel text mit 10 pkt zeilenabstand ...');

      Hi,

      IMHO wäre  $pdf->MultiCell(145,30,$Firma,1,1,L); eine Zelle von 145 mm oder pt Breite und 30 mm oder pt Höhe.
      Danch wird der vorhandene Text innerhalb dieser Zelle höhenmäßig zentriert.
      Hast Du also nur eine Zeile, steht diese genau in der Mitte (von der Höhe her gesehen).
      Ich muß aber innerhalb der 30 mm oder pt hohen Zelle auch noch Linien bedienen und nicht einfach mitten reinschreiben :(

      Ist das sehr umständlich? Gibt es einfachere Wege?
      nimm doch arrays, eine zählschleife und ceil

      Kannst Du mal etwas genauer werden, irgendwie steh ich ein bißchen auf dem Schlauch und weiß nicht, in welche Richtung Du möchtest...

      Danke erstmal

      Ronald

      1. IMHO wäre  $pdf->MultiCell(145,30,$Firma,1,1,L); eine Zelle von 145 mm oder pt Breite und 30 mm oder pt Höhe.

        leider falsch.
        probiere es doch mal aus ...

        Kannst Du mal etwas genauer werden, irgendwie steh ich ein bißchen auf dem Schlauch und weiß nicht, in welche Richtung Du möchtest...

        ja klar aber erläuter doch bitte nochmal ganz genau was du eigentlich machen möchtest ...

        cu
        ulli

        1. IMHO wäre  $pdf->MultiCell(145,30,$Firma,1,1,L); eine Zelle von 145 mm oder pt Breite und 30 mm oder pt Höhe.
          leider falsch.
          probiere es doch mal aus ...

          Tatsächlich :)
          Hm, ich war felsenfest der Meinung, das zuletzt schon ausprobiert zu haben...war aber wohl nicht so.
          Danke für ie Hilfe, somit haben sich meine Probleme gelöst.
          Grüße
          Ronald

          1. Tatsächlich :)
            Hm, ich war felsenfest der Meinung, das zuletzt schon ausprobiert zu haben...war aber wohl nicht so.

            sach ich doch =)

            Danke für ie Hilfe, somit haben sich meine Probleme gelöst.

            kein problem

            cu
            ulli