Generowanie grafiki rastrowej w PHP

0

Witam.

Zajmuję się rozwojem sporego systemu generowania statystyk w PHP. Co za tym idzie, potrzebuję narzędzi do generowania wykresów na podstawie danych zwracanych mi przez bazę (w tym przypadku MsSQL). Jak dotąd korzystałem z SVG w html5 i napisałem klasę rysującą wykres.

Ostatnio pojawiła się potrzeba gnerowania raportów w formie PDF. Jako że żadne api nie radziło sobie z SVG, zacząłem "przerabiać" je na grafikę rastrową na potrzeby PDF'a (JPG). Używam funkcji zaimplementowanych w PHP ImageCreate etc. Problem jest taki że kiedy danych jest sporo, wykres w pewnym momencie przestaje rysować niektóre elementy. Zastanawiam się czy problemem są ograniczenia PHPa, konfiguracji serwera lub czegoś jeszcze innego.

Ktoś ma jakiś pomysł?

Ew. zna api konwertujące HTML do pdf'a które radzi sobie z <svg>. Wymogiem jest całkowite odizolowanie od JavaScript.

1

spróbuj wkhtmltopdf (zewnętrzny program, który musisz odpalać przez exec), albo być może rozszerzenie ImageMagick sobie poradzi (bo obsługuje mnóstwo formatów).

1

Drukowanie do PDF wchodzi w rachubę? Bullzip PDF Printer drukuje <svg>.

0

Zewnętrzny program niestety nie wchodzi w rachubę, system stoi na hostingu home jeśli się nie mylę (w każdym razie zewnętrzne programy odpadają).

Musi to być api PHP. Mam panel wyświetlający tabelkę z danymi i rysujący wykres i teraz po kliknięciu na przycisk "zapisz raport PDF" PHP musi użytkownikowi wygenerować plik PDF zawierający tą tabelkę (to już działa) i wykres (z svg api html2fpdf i inne które znalazłem sobie nie radzi).

Dla tego zacząłem pisać specjalnie na potrzeby PDFu metodę która wygeneruje mi wykres w formie rastrowej bo z tym api nie robi problemów... no ale jest tak jak napisałem.

1

no to ImageMagick sprawdź.

ja nie miałem dostępu do takich cudów, a mam konto na mydevil.net - tam sobie napisałem własne "api" do konwersji svg->png (nie pamietam juz jaka metoda, chyba imagemagickiem wlasnie) - i to podpiąłem klientowi do systemu.

edit:
nawet nie na mydevil, tylko na shared hostingu od hekko.pl

<?php
$image = new IMagick();
    $image->setBackgroundColor(new ImagickPixel('transparent'));
    $add = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>';
    $image->readImageBlob($add.$_POST['svg']);
    $image->setImageFormat("png32");
    $img = $image->getimageblob();
    header("Content-Type: application/force-download");
    header("Content-Description: File Transfer");
    header('Content-Disposition: attachment; filename="'.makeLink($_POST['name'] ? $_POST['name'] : 'obraz').'.png"');
    header("Content-Transfer-Encoding: binary");
    die($img);
0

Ok, zaraz będę testował ;)

EDIT: Działa. Wielkie dzięki za pomoc! :) Bo męczyłem to od wczoraj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1