Höhe von einanderliegenden Mulicell Boxen angleichen

Alles andere zum Thema FPDF und PDF Format
sg_joergi
Benutzer
Beiträge: 24
Registriert: Mo 24. Sep 2007, 12:35

Höhe von einanderliegenden Mulicell Boxen angleichen

Beitragvon sg_joergi » Mo 8. Jun 2015, 16:47

Hi,

ich benutze FPDF auch schon seit längerem, bin aber immer noch Anfänger. Zur Zeit versuche ich verzweifelt nach der Lösung des oben genannten Problems. Ein guter Einfall scheint mir hier der Befehl "NBLines" zu sein, den ich aus http://fpdf.de/downloads/addons/3/ herauskopiert habe. Leider will der Script nicht laufen, wenn ich die den Befehl

$hoehe=NbLines(120, $zeile*5);


aktiviere. Bin leider etwas ratlos. Könnt Ihr mir helfen? Unten findet Ihr den Quellcode :cool:


[PHP]
<?php

function NbLines($w, $txt)
{
//Computes the number of lines a MultiCell of width w will take
$cw=&$this->CurrentFont['cw'];
if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
$s=str_replace("\r", '', $txt);
$nb=strlen($s);
if($nb>0 and $s[$nb-1]=="\n")
$nb--;
$sep=-1;
$i=0;
$j=0;
$l=0;
$nl=1;
while($i<$nb)
{
$c=$s[$i];
if($c=="\n")
{
$i++;
$sep=-1;
$j=$i;
$l=0;
$nl++;
continue;
}
if($c==' ')
$sep=$i;
$l+=$cw[$c];
if($l>$wmax)
{
if($sep==-1)
{
if($i==$j)
$i++;
}
else
$i=$sep+1;
$sep=-1;
$j=$i;
$l=0;
$nl++;
}
else
$i++;
}
return $nl;
}



define('FPDF_FONTPATH','fonts/');
require('fpdf/fpdf.php');
$pdf=new FPDF('P','mm','A4');
$pdf->SetTopMargin(5);
$pdf->AddPage();
$zeile="Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... ";
$pdf->SetXY(10, 25);
$pdf->SetFont('Times','',12);

$hoehe=5;

//$hoehe=NbLines(120, $zeile*5);

$pdf->MultiCell( 70, $hoehe, "Frage: ", 1, 'R', 0);
$pdf->SetXY(80, 25);
$pdf->MultiCell( 120, $hoehe, $zeile , 1, 'L', 0);

$pdf->Output('test.pdf', 'I');
?>
[/PHP]

sg_joergi
Benutzer
Beiträge: 24
Registriert: Mo 24. Sep 2007, 12:35

Höhe von einanderliegenden Mulicell Boxen angleichen

Beitragvon sg_joergi » Mo 8. Jun 2015, 17:12

Hi,

ich habe mir einen Teil der Antwort soeben selbst gegeben. Mit dem Script http://fpdf.de/downloads/addons/49/ scheint die Sache auch gut zu funktionieren. Jedoch ist der Text in der ersten Box vertikal zentriert. Gibt es eine Möglichkeit, den Text dann oben auszurichten? Hier der Quellcode:

[PHP]
<?php
define('FPDF_FONTPATH','fonts/');
require('fpdf/fpdf.php');
class PDF extends FPDF
{
function WordWrap(&$text, $maxwidth)
{
$text = trim($text);
if ($text==='')
return 0;
$space = $this->GetStringWidth(' ');
$lines = explode("\n", $text);
$text = '';
$count = 0;

foreach ($lines as $line)
{
$words = preg_split('/ +/', $line);
$width = 0;

foreach ($words as $word)
{
$wordwidth = $this->GetStringWidth($word);
if ($width + $wordwidth <= $maxwidth)
{
$width += $wordwidth + $space;
$text .= $word.' ';
}
else
{
$width = $wordwidth + $space;
$text = rtrim($text)."\n".$word.' ';
$count++;
}
}
$text = rtrim($text)."\n";
$count++;
}
$text = rtrim($text);
return $count;
}
}


$pdf=new PDF('P','mm','A4');
$pdf->SetTopMargin(5);
$pdf->AddPage();
$zeile="Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... Das ist ein test... ";
$pdf->SetXY(10, 25);
$pdf->SetFont('Times','',12);
$nb=$pdf->WordWrap($zeile, 120);
$hoehe=$nb*5;
$pdf->MultiCell( 70, $hoehe, "Frage:", 1, 'R', 0);
$pdf->SetXY(80, 25);
$pdf->MultiCell( 120, 5, $zeile, 1, 'L', 0);
$pdf->Output('test.pdf', 'I');
?>
[/PHP]

Benutzeravatar
Wirus!
Beiträge: 1492
Registriert: Do 22. Jun 2006, 18:23

Beitragvon Wirus! » Mo 8. Jun 2015, 22:20

Grundsätzlich macht Script #3 schon genau das was Du willst und NbLines() ist genau die richtige Funktion dafür. Was nicht funktioniert ist Dein Aufruf

[PHP]$hoehe=NbLines(120, $zeile*5);[/PHP]

$zeile ist ein String und NbLines erwartet auch einen String an dieser Stelle.

Du multipliziert den String noch mit einer Zahl (was Schwachfug ist).

Dabei kommt immer eine Zahl und meistens null raus (wenn der String nicht mit einer Zahl beginnt).

Da der String nun nur noch eine Ziffer enthält ist er sehr kurz und hat nur eine Zeile ....

sg_joergi
Benutzer
Beiträge: 24
Registriert: Mo 24. Sep 2007, 12:35

Höhe von einanderliegenden Mulicell Boxen angleichen

Beitragvon sg_joergi » Fr 12. Jun 2015, 20:39

Jau

danke für die Antwort :-))


Zurück zu „Sonstiges“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast