 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
poveste3k
Data înscrierii: 30/Sep/2007
Mesaje: 18
|
| Trimis: Dum Mai 04, 2008 12:46 am Titlul subiectului: Lungime in pixli a unui text |
|
|
Salutare
Vara trecuta tot de pe acest forum mi-am rezolvat aproape integral problema cu calculul lunigimii unui sir in pixeli, nu in numar de caractere.
De ce spun aproape integral pt ca perfect-perfect nu functiona si in situatia de-atunci era ok si asa.
In schimb acum patesc acelas lucru dar de data asta tre sa mearga perfect.
mai jos va descriu codul:
fisier calcul_lungime.php
<?
$font_file="times.ttf";
$angle="0";
$font_size="8";
$bbox = ImageFtBbox($font_size, $angle, $font_file, $n);
$coordonata = abs($bbox[0]) + abs($bbox[2]);
?>
alt fisier
$pdf->SetXY($coo_pag, $coo);
$pdf->Cell(0, 8, $d,0,0);
......................................
$n=$iiii;
require("calcul_lungime.php");
$c2=395-$coordonata;
$pdf->SetXY($c2, $coo);
$pdf->Cell(0, 8,$n,0,0);
$coo=$coo+10;
Chestia asta intra intr-un while si ar vrea sa samene cu un cuprins de carte.
Rezultatul apare cam asa
asdasdas.....................asd
asdasdasdas...............fdsf
dsadas.............................j
Practic daca in pagina imi intra sa zicem 400 de pixeli si vreau sa afisez textul "mama" si pe celalalt rand "mama si tata", aliniate la dreapta;
ar trebui sa fac 400-lungime_text "mama" apoi celula cu textu "mama"
si 400-lingime_text_"mama si tata" apoi celula cu test "mama si tata".
Aveti voi o solutie pentru problema mea?
PS -am inceput deja treaba cu FPDF-ul - preferabil ar fi sa raman la formatul PDF
- tipul de font este acelas si in cazul fisierului ce calculeaza lungimea textului si in biblioteca chimata in restul sursei php
Multumesc mult |
|
| Sus |
|
hpuiu
Data înscrierii: 05/Apr/2005
Mesaje: 10
Locație: Bucuresti
|
| Trimis: Dum Mai 04, 2008 12:35 pm Titlul subiectului: |
|
|
Am scris un mic cod care face exact ceea ce ai nevoie, e destul de comentat, sper sa te descurci, daca ai intrebari posteaza-le :)
Cod:
// include FPDF-ul
include '../fpdf153/fpdf.php';
// Creaza un obiect FPDF
$_pdf=new FPDF();
// seteaza fontul si marimea
$_pdf->SetFont('Arial','',8);
// inaltimea randului (5mm)
$_rowHeight=5;
// pozitia de unde incepe un rand fata de marginea din stanga a paginii (10mm)
$_leftMargin=10;
// latimea randului (190mm - sa fie centrat in A4)
$_rowWidth=190;
// Adauga o noua pagina la fisierul PDF
$_pdf->AddPage();
// seteaza culoarea pentru fill
$_pdf->SetFillColor(255,255,255);
// scoate spatiul din stanga la continutul celulelor (padding)
// daca nu setam aceasta valoare, la afisarea unui text intr-o celula de exact
// dimensiunea returnata de GetStringWidth() ar da un pic pe afara din cauza marginii din
// interiorul celulei, lasat automat de FPDF
$_pdf->cMargin=0;
// creaza 20 de randuri
for ($i=1;$i<=20;$i++){
// seteaza titlul si pagina pentru randul curent ( text generat aleator, functia e mai jos )
$_title=generateString(4,30);
$_page=generateString(2,10);
// calculeaza latimea pentru titlu si numar pagina
$_titleWidth=$_pdf->GetStringWidth($_title);
$_pageWidth=$_pdf->GetStringWidth($_page);
// calculeaza pozitia y pentru rand
$_startY=$i*$_rowHeight;
// seteaza pozitia de scriere
$_pdf->SetXY($_leftMargin,$_startY);
// adauga o celula ce contine un sir de '.' . 242 a fost gasit prin
// trial & error, astfel incat sa umple exact un rand, fara sa dea pe afara
$_pdf->Cell($_rowWidth,$_rowHeight,str_repeat('.',242),0,0,'L');
// reseteaza pozitia de scriere la inceputul randului curent
$_pdf->SetX($_leftMargin);
// scrie titlul, foloseste culoarea de fill setata mai devreme (alb)
// pentru a ascunde punctele din spatele textului
$_pdf->Cell($_titleWidth,$_rowHeight,$_title,0,0,'L',1);
// seteaza pozitia de scriere pentru numarul paginii ( latime rand + margine stanga - latime text )
$_pdf->SetX($_rowWidth+$_leftMargin-$_pageWidth);
// scrie numarul paginii, foloseste culoarea de fill setata mai devreme (alb)
// pentru a ascunde punctele din spatele textului
$_pdf->Cell($_pageWidth,$_rowHeight,$_page,0,0,'R',1);
}
// genereaza fisierul PDF
$_pdf->Output();
/**
* Functie ce genereaza si returneaza un sir aleator, folosita pentru testare
*
* @param int $_minLength Lungimea minima a stringului
* @param int $_maxLegth Lungimea maxima a stringului
*
* @return string Stringul generat
*/
function generateString($_minLength,$_maxLegth)
{
// caracterele posibile
$_characters='1234567890abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ';
// alege o lungime aleatoare intre parametrii dati
$_length=rand($_minLength,$_maxLegth);
// initializeaza sirul
$_result='';
// adauga la sir un caracter aleator din cele posibile pana se ajunge la lungimea dorita
for($i=1;$i<=$_length;$i++){
$_result.=$_characters[rand(0,strlen($_characters)-1)];
}
// returneaza rezultatul
return $_result;
}
Scuze daca am greseli pe undeva, scriu dupa o noapte de mers cu trenul ;) |
|
| Sus |
|
poveste3k
Data înscrierii: 30/Sep/2007
Mesaje: 18
|
| Trimis: Lun Mai 05, 2008 9:15 am Titlul subiectului: |
|
|
Multumesc mult
Si de data asta am reusit sa fentez si in cele din urma cei pentru care lucram au fost multumiti.
Oricum m-am uitat peste ce ai facut tu mai sus si promit ca atunci cand o sa mai am putin timp o sa verific si te anunt daca iese cum trebuie.
Am fentat tot cam pe ideea asta
ceva de genul
celula cu .........................................................................
si peste ea puse 2 celule cu fundal alb
doar ca dimensiunea celulei o calculam tot cu metoda mea care da gres.
Oricum de cat sa puna ...... cu o anumita marje de eroare (avand un aspect urat), am preferat sa puna fundal alb la celula cu o anumita marje de eroare, automat rezultand ceva nu perfect dar oarecum apropiat.
Merci mult inca odata si sper ca metoda ta sa fie cea cautata.
Sunt 100% ca o sa mai trebuiasca sa fac chestii din astea. |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|