Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zawijanie tekstu | MODUŁ GD, moim zdaniem ambitny problem do rozwiazania
hrabja
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.11.2008

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


witam

przebrnąłem przez manual php dotyczący modułu GD i nie odnalazłem rozwiązania mojego problemu.

przyjmijmy, iż na zmiennej $tekst mam pewien kilkuset znakowy tekst.
Chcę go wyświetlić na obrazku o wymiarach 400px X 200px

używam czcionki monospace - zatem czcionki w której znaki mają taką samą szerokość.
Podział tekstu na wiersze rozwiązałem za pomocą działań matematycznych,
tj.
1) zliczam ilość znaków w tekście
2) dzielę go przez maksymalą ilość znaków w jednym wierszu i wychodzi mi liczba wierszów które są potrzebne do wyświetlenia tekstu
3) tekst dzielę na porcje i zapisuje w tablicy $tekst_do_wyświetlenia[]
4) tablice wyświetlam kolejno na obrazku za pomocą imagestring

No i pojawia się problem.
Mianowicie tekst przenoszony jest do następnego wiersza bez zachowania zasad języka polskiego,
Jakie proponujecie rozwiązanie? Może istnieje jakaś funkcja o której nie wiem a która ułatwi rozwiązanie tego problemu.

aby zobrazować mój problem, przedstawiam przykładowe teksty umieszczone w tablicy:

$tekst_do_wyświetlenia[1]="jakiś przykładowy tekst do wyświetlenia obrazku który zostanie umieszc";
$tekst_do_wyświetlenia[2]="zony na stronie www";
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




explode" title="Zobacz w manualu PHP" target="_manual na spacje, to będziesz miał podział wg wyrazów. Przeszukaj dział przedszkole; był tam wątek na podobny temat jakiś tydzień temu.
Go to the top of the page
+Quote Post
Kamson
post
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 23.10.2006
Skąd: Warszawa

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


można ten problem rozwiązać na 2 sposoby

zakładając że

  1. <?php
  2. $string = 'używam czcionki monospace - zatem czcionki w której znaki mają taką samą szerokość';
  3. $string_limit = 20;
  4. ?>


pierwszy przy pomocy substr tnąc string i wyszukując spację

  1. <?php
  2. $run = true;
  3.  
  4.        while($run) {
  5.                $wskaznik = (isset($spacja)) ? $spacja : 0; // ustalamy wskaźnik, przy pierwszym uruchomieniu 0, dalej jest to ostatnia spacja na której skończyliśmy cięcie
  6.                $s_string = substr($string,$wskaznik,$string_limit); // pierwsze cięcie
  7.  
  8.                $spacja = strrpos($s_string,' '); // wyszukiwanie ostatniej spacji w wyniku pierwszego cięcia
  9.                if(strlen($string) > $wskaznik+$string_limit) $s_string = substr($s_string,0,$spacja); // sprawdza czy fragment którym się zajmujemy nie wystaje za nasz ciąg znaków, jeśli nie przycina wynik pierwszego ciecia do spacji
  10.                else $run = false; // jeśli tak, nie przycina już do ostatniej spacji i każe zakończyć pętla
  11.  
  12.                $wiersz[] = trim($s_string);
  13.  
  14.                $spacja += $wskaznik; // pozycja spacji dla całego stringu
  15.        }
  16. ?>


lub rozwijając na tablice:

  1. <?php
  2. $s_array = explode(' ',$string); // dzieli ciąg znaków na tablice
  3.        $wiersz_no = 0;
  4.        $wyraz = 0;
  5.        $spacje = 0;
  6.  
  7.        while($wyraz <= count($s_array)){
  8.                if(isset($wiersz[$wiersz_no])){ // podany wiersz istnieje i można zając się dodawaniem wyrazu
  9.                        if(strlen($wiersz[$wiersz_no]) + strlen($s_array[$wyraz]) + $spacje >= $string_limit) { // wyraz nie zmieści się w limicie znaków dla danego wiersza
  10.                                $wiersz_no++; // przesuwamy wskaźnik na nowy wiersz
  11.                                continue;
  12.                        }
  13.                        else { // wyraz zmieści się w limicie znaków
  14.                                $wiersz[$wiersz_no] .= " {$s_array[$wyraz]}"; // dodajemy wyraz
  15.                                $wyraz++; // przesuwamy wskaźnik na nowy wyraz
  16.                                $spacje++;
  17.                        }
  18.                }
  19.                else { // jeśli wiersz nie istniał to utworzymy go i dodamy pierwszy
  20.                        $wiersz[$wiersz_no] = $s_array[$wyraz];
  21.                        $wyraz++;
  22.                        $spacje = 0; // zerujemy ilość spacji
  23.                }
  24.        }
  25. ?>


wynik w $wiersz

Kod
Array
(
    [0] => używam czcionki
    [1] => monospace - zatem
    [2] => czcionki w której
    [3] => znaki mają taką
    [4] => samą szerokość
)


pisane z palca więc coś może nie działać poprawnie

Ten post edytował Kamson 30.11.2008, 07:44:41
Go to the top of the page
+Quote Post
hrabja
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.11.2008

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


dziękuję za porady z całą pewnością mi się przydadzą do dalszej pracy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

obecnie problem rozwiązałem przez wykorzystanie explode(" ", $string) i jest ok, jednak na samym początku zmierzałem do nieco innego rozwiązania.

Chodziło mi o zawijanie zgodnie z zasadami języka polskiego, nie tak - aby caly wyraz został przeniesiony do nowej linijki, tylko tak aby ostatnie sylaby wyrazu nie mieszczące się w wierszu zostały ucinane. Uciąć string normalnie nie jest problemem, ale uciąć go zgodnie z zasadami języka polskiego już tak:)

chodzi o to aby w tablicy zamiast:

Array
(
[0] => używam czcionki
[1] => monospace - zatem
[2] => czcionki w której
[3] => znaki mają taką
[4] => samą szerokość
)

było

Array
(
[0] => używam czcion-
[1] => ki monospace, zatem
[2] => czcionki w któ-
[3] => rej znaki mają ta-
[4] => ką samą szerokość
)


wiem, że być może utrudniam sobie rozwiązanie, ale zależy mi na tym aby wyświetlić na obrazku jak najbardziej zbliżony do wyjustowanego tekst
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No to będziesz miał problem. Jedyne, co znalazłem, to to: http://szafranek.net/blog/archive/2004/09/...elenie_wyrazow/
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 28.09.2025 - 04:49