Üdv!
Valahogy nem megy ez nekem :/
Ami kellene, felül 2 tábla alatta 1 nagy tábla ami több sorból áll, alatta egy kis tábla.
Az adatok sqlből jönnek.
Amiket próbáltam:
class.ezpdf.php
Ez a legegyszerűbb.
A táblák létre is jönnek a hiba:
A cellákban lévő szöveg mérete nem változtatható.
Nem kezel utf-8 at?
html2fpdf.php
Elvileg html-ből generálna pdf-et.
Hibák:
Mindig szép fehér oldal generálódik.
próbáltam az egész html részt egy változóba tenni, és próbáltam require_once val is.
fpdf.php
Nah ez sehogyse megy. tutoriált átolvastam, de amint egy php generálja a táblát fehér html oldal, tehát pdf se generálódik.
Kérem akinek megy, vagy egy leírással vagy egy kis kóddal mutassa meg hol rontom el.
Szal
kell tudnia táblázatot képpel.
táblázatba szöveg igazítása
táblázatba szöveg méretváltás
php generálja adatbázisból a szöveget.
pch
- 1881 megtekintés
Hozzászólások
http://www.php.net/manual/en/book.haru.php
Esetleg?
( http://www.php.net/manual/en/refs.utilspec.nontext.php - itt nezz korul, meg http://pecl.php.net/package-search.php?pkg_name=pdf&bool=AND&submit=Sea… - pear.php.net -en nem lattam ertelmeset)
Vagy: http://framework.zend.com/manual/en/zend.pdf.html
Ha mast nem, akkor alkalmazd az aszinkron feldolgozas pattern-t:
Kliens:
1)kerest kuld hogy csinalj PDF-et adott parameterekkel
2) Pliz vejt abra kirak
Szerver (on PDF adott parameterekkel):
1) csinald meg valami olyan formatumba, amibol parancssorban tudsz PDF-et rantani (latex, odf)
2) mentsd el ezt valami taszk queue-ba (pl. dobd be egy konyvtarba egy random nevvel)
3) Kuldd vissza a taszk ID-jet
Feldolgozo (on: vagy valami file system watch, vagy cron):
1) fogd meg a legkozelebbi taszkot
2) allitsd in progressre (lockold, valami), hogy veletlenul se fusson ket feldolgozo egymasra
3) dolgozd fel
4) az eredmenyt mentsd el valahova egy PDF fajlba
5) allitsd a taszkot keszre
Kliens (on taszk ID) :
1) kerdezzuk meg, kesz-e a taszk
2) ha igen, redirecteljunk a PDF fajl letoltohelyere
3) ha nem, kerdezzuk meg megint 30 mp mulva.
Szerver: (on taszk ID):
1) Nezzuk meg, kesz-e a taszk
2) Valaszoljunk a kliensnek a statuszrol ha nem
3) Kuldjuk el a kliensnek az eredmenyt (vagy a linkjet) ha igen
Magyarazoabra: link
Esetleg c) megoldasnak: csinalj egy odf doksit, told fel a google docsnak GData-n (pl. Zend GData library -n keresztul) es kerd vissza a PDF-et.
A pattern-leirasert bocsi, tudom, picit bonyesz, viszont mindenre jo, nem csak PDF-re.
- A hozzászóláshoz be kell jelentkezni
Esetleg ez:
- A hozzászóláshoz be kell jelentkezni
1. höhöhöhöööööööööö :D mennyit sz*pattak ezzel az előző munkahelyemen :D :D (kitöltött, lezárt adatlapok nyomtatási képe egy az adatlapból generált pdf lett, utána ezt nyomtathatták, illetve iktatták elektronikusan)
2. azt hiszem tcpdf html2fpdf lesz a nyerő, de ha gondolod előkeresem, hogy én mivel csináltam, de készülj, hogy sok munkád lesz vele.
UPDATE: ja, html2fpdf-fel csináltam, dobok egy mintát, hogy kb. hogyan, nekem nem volt vele problémám, bár tény, hogy a jól használható és univerzális fogalmaktól távol áll. Ha üres pdf-et kapsz, érdemes belenézni az error.log-ba, mert oda lehet írkálja, hogy mi a gondja.
Az alábbi kód egy elég kiherélt valami, az adatok
$_SESSION
-ből jöttek és tkp. a
$htmlOutput
változóba a teljes html forrást raktam, a megfelelő értékekhez meg odaechóztam a
$_SESSION['valtozo']
értéket.
<?php
ob_start();
session_start();
require_once('html2fpdf.php');
class MyPdfWriter
{
public function __construct()
{
$outputFName = session_id().'.pdf';
$pdf=new HTML2FPDF();
$pdf->adjustFont('arial', '', 12);
$pdf->setTitle('Foobar');
$pdf->setAuthor('foosystems');
$pdf->setCreator('html2fpdf hacked');
$pdf->setDisplayMode('real');
$pdf->UseTableHeader(false);
$pdf->AddPage();
$htmlContent = $this->buildContent();
$pdf->WriteHTML($htmlContent);
$pdf->Output($outputFName, "D");
}
//Build content from session data
private function buildContent()
{
//Write HTML source into $htmlOutput and place the corresponding $_SESSION['variableName'] value where needed
$htmlOutput =
"<html><!-- CONTENT HERE --></html>";
return $htmlOutput;
}
}
$pdfInstance = new MyPdfWriter;
ob_end_flush();
?>
UPDATE 2: ronda, szar, insecure, tudom. De működött.
UPDATE 3: több oldalas PDF esetén, ha tudod, hogy hol van oldaltörés, akkor célszerű minden oldalhoz egy külön generátorfv.-t definiálni és a konstruktorban egy-egy AddPage() hívással körbevenni őket pl:
$pdf->AddPage();
$htmlContent = $this->buildContent();
$pdf->WriteHTML($htmlContent);
helyett
$pdf->AddPage();
$htmlContent = '';
$htmlContent = $this->buildPage(1);
$pdf->WriteHTML($htmlContent);
$pdf->AddPage();
$htmlContent = '';
$htmlContent = $this->buildPage(2);
$pdf->WriteHTML($htmlContent);
//...
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Ha jol emlekszem ezt a html2pdf probaltam egyszer, kicsiben jo volt, de nekunk egy sok-sok oldalas pdf kellett bonyolult tablakkal - na ott brutalisan lelassult, percekig generalt egy pdft, meg erdekes is volt az eredmeny. Vegul mas megoldast valasztottunk - egyenesen phpbol jott a pdf, de arra mar nem emlekszem hogy hogyan, csak arra, hogy sokkal gyorsabb es korrektebb volt a vegeredmeny. Na sokat nem segitettem :)
- A hozzászóláshoz be kell jelentkezni
Nekem maximum talán 13 oldalas pdf volt, azon végig táblázatok, volt, ami fekvő A/4-es lapra is úgy fért ki, hogy a függőleges tengely mentén kettészedtem és 2 oldalra bontottam (~60 oszlop + ~ 100 sor). Percekig nem is, de 2-3 másodpercig molyolt rajta, akiknek készítettem viszont nem panaszkodtak. Mondjuk náluk sem volt nagyszámú konkurrens tranzakció... :)
Zend_PDF modult/osztályt nézegettem, de ahhoz fel kellene rántani az egész frameworköt...
Vagy ott van a PHP PDFlib, de az vagy zárt/fizetős volt vagy valamiért kiesett a pixisből.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
mPDF esetleg?
- A hozzászóláshoz be kell jelentkezni
szábszkrájb
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
En is kellett pdf-et generaljak, itt a hupon adtak egy jo megoldast link, a masodik link a hozzaszolasban vagy link2
Igaz kulon program, exec-el lehet futtatni telepites utan (telepites = masolas ebben az esetben).
Nem tudom mennyire felel meg neked, nekem tokeletes megoldas volt.
- A hozzászóláshoz be kell jelentkezni