Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PDF i orientacja strony
suazael
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 3.10.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam.
Mam dziwny problem:
eksportuję dane z tabeli do PDFa. Wszystko działa prawie dobrze, ale jak ustawię rozmiar strony A4 pionowo, to wszystko jest ok, natomiast jak ustawię A4 poziomo, to występuje problem:
Wyświetlane są wszystkie wiersze, ale wygląda na to, że kilka z nich ma nieprawidłowo obliczoną odległość od góry strony i są przykrywane następnymi.
Niezależnie od ilości danych (stron) zawsze dzieje się to w tym samym miejscu strony (w tej samej odległości od góry).

Poniżej kod nieco okrojony, żeby nie zaśmiecać grupy. Usunięty jest podział na strony i rysowanie ramek, ale idea działania pozostała.

CODE
function makePdf($columns = array(), $values = array(), $reportname = 'raport', $landscape = 0)

function mm2pt($val)
{
return floatval($val * 2.835016835017);
}

function printtext($pdfdoc, $text, $x, $y, $w, $align)
{
$f = PDF_get_value($pdfdoc, 'font', 0);
$fs = PDF_get_value($pdfdoc, 'fontsize', 0);
$textLength = PDF_stringwidth($pdfdoc, $text, $f, $fs);
$textHeight = ceil($textLength / $w) * $fs;
if ($textLength > $w)
while(PDF_show_boxed($pdfdoc, $text, $x, $y, $w, $textHeight, $align, 'blind') > 1)
$textHeight += $fs;
PDF_show_boxed($pdfdoc, $text, $x, $y - $textHeight, $w, $textHeight, $align, '');
return $textHeight + 4;
}

if ($landscape)
{
$pageWidth = mm2pt(297);
$pageHeight = mm2pt(210);
}
else
{
$pageWidth = mm2pt(210);
$pageHeight = mm2pt(297);
};

$pdf = PDF_new();
PDF_open_file($pdf, '');
PDF_set_info($pdf, 'Author', 'autor');
PDF_set_info($pdf, 'Title', 'tytul');
PDF_set_info($pdf, 'Subject', 'report');
PDF_set_parameter($pdf, 'FontOutline', "Courier=cour.ttf");
$font = PDF_load_font($pdf, 'Courier', 'iso8859-2', '');
PDF_setfont($pdf, $font, 14);

$colWidth = ($pageWidth - 20) / count($columns);
$top = $pageHeight - 10;

foreach($values as $array)
{
$boxH = 0;
foreach ($array as $name)
{
$boxH = max($boxH, printtext($pdf, $name, 12 + ($colWidth * $x), $top, $colWidth, $colAligns[$x]));
$x++;
}
$top -= $boxH;
}

}

// Wywołanie funkcji:
$columns = array('opis' => 'left',
'data ostatniego nadania' => 'center',
'minęło' => 'center',
'klient' => 'left');
$values = array();
foreach($devices as $key => $array)
{
$val = array();
$val[] = $array[description];
$val[] = date('H:i Y-m-d', $array[lasttimeutc]);
$val[] = $array[age];
$val[] = $array[client];
$values[] = $val;
}
makePdf($columns, $values, $raportTitle, 1);

Co jest nie tak z tym kodem?
Dlaczego błąd występuje tylko przy poziomej orientracji strony?

Dziękuję za odpowiedzi i pozdrawiam
Suazael
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:02