Autor Zpráva
Vareee
Profil
Dobrý deň,

mám PDF kde je pomerne dosť veľa textu (je to zmluva o sprostredkovaní predaja). V aplikácií mám zoznam ľudí, ktorý majú záujem o podpis tej zmluvy (rádovo ich môže byť aj x, momentálne je ich cca 100). Chcel by som docieliť to že ak sa niektorý s tých zujemcov prihlási tak si bude môcť po kliknutí sám vygeneruje tú zmluvu s iniciálmi z databázi (teda s tými ktoré mám a ukladám samozrejme v rámci platných zákonov) ostatné doplní sám a zmluvu pošle mailom alebo prinesie na podpis druhej strane.

Viem že sa dá pomocou FPDF (TCPDF) generovať PDF priamo zo skriptu ale to sa mi veľmi nechce nakoľko je dosť kompikované s tým riešiť dlhšie texty, ktoré by mali mať navyše nejako formátované. Lepšie by bolo ak to mohlo fungovať podobne ako klasický templatovací systém, tj. mám základný dokument zmluva pdf, na miesto kde chcem generovať s databázi meno a priezvisko zadám napr. {meno} a na miesto kde chcem generovať {priezvisko} a skript vygeneruje pdf s tým že vo výsledku už nebude {meno} a {priezvisko} ale údaje generované s db.

Neviete niekto poradiť ako na to? Klasicky ako s tpl súbormi to nejde..

ďakujem za pomoc.
donny
Profil
Existuje knižnica ktorá umožňuje načítať pdf a po stranách import do noveho pdf volá sa FPDI pričom v kombinácií napr. s FPDF sa dá docieliť do čo chceš asi tak že tam importuješ jednotlivé strany a následne pomocou metód s FDPF na určitý riadok dopíšeš čo potrebuješ..

Samotné nahradenie {meno} za Meno takto ale nepôjde pretože to tam importuje ako obrázok.

<?php
require('fpdf.php');            
require('fpdi.php');

$pdf = new FPDI();
$pagecount = $pdf->setSourceFile('zmluva.pdf');
//prvá strana
  $tplidx = $pdf->importPage(1);
  $pdf->addPage();
  $pdf->useTemplate($tplidx, 10, 10, 0);
  $pdf->SetFont('Arial','I',8);
  $pdf->SetTextColor(0,0,0);
  $pdf->SetXY(90, 160);  
  $pdf->Write(50, "Hello World");  

//druha strana..
...

//tretia strana
...
//vystup + stiahnutie
$pdf->Output('newpdf.pdf', 'D');
?>  
Vareee
Profil
ďakujem nie je to celkom to čo som chcel ale je to super. Napriek som narazil na problém, tak ako to už v zmluvách býva mám úvodnú stranu zarovnanú na stred a keďže metoda write nepoznám zarovanie, nahradil som ju metódou cell.. tá si ale robí čo chce, resp. posúva to o cca 2 cm mimo stred a vyzerá to hm slušne povedané zle.

Urobil som to takto
          $pdf->SetXY(0, 160);                 
          $pdf->Cell("0", 18, $celeMeno, 1, 2,'C');   

alebo takto
          $pdf->SetXY(0, 160);                 
          $pdf->Cell("210", 18, $celeMeno, 1, 2,'C');   
V prvom prípade by bunka mala tým pádom zabrať celú stranu, čo aj urobí ale text do stredu nedá.
V druhom prípade som napevno nastavil šírku strany na 210mm a výsledok je ten istý.

Nejaký nápad?

Vzhľadom na to že zmluva má 10 strán a nahradzovať potrebujem skoro na všektých, tak toto riešenie nie je ideálne radšej by som bol ak by niekto vedel ako to nahradzovač.. ak ale iné riešenie nie aspoň to zarovanie by pomohlo.

Dík


pozn. metodu setXY som potreboval na posunutie zhore 0 je kraj, 160 je zhora.. nema to žiadnu súvislosť s tým posunitím podľa mňa
donny
Profil
Vareee:
pozn. metodu setXY som potreboval na posunutie zhore 0 je kraj, 160 je zhora.. nema to žiadnu súvislosť s tým posunitím podľa mňa

Si si istý? Tak ja ti poviem tajomstvo, každý dokument má nejaký štandardný ľavý okraj, tým že ho nastavíš na 0 ho defakto vo vkladanom objekte vynuluješ, ale zbytok textu ktorý tam už bol ten okraj stále . Tvojou domácou úlohou na dnešný deň bude zistiť aký ten štandardný okrej je a doplniť ho do SetXY.. :)


poznámka.. bacha na rámček v cell

$pdf->Cell("210", 18, $celeMeno, 1, 2,'C');

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0