Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dompdf i polskie znaczki :/, w jaki sposób uzyskać pdf z polskimi znakami + ode mnie lekka poprawka
yaotzin
post 6.05.2007, 00:18:43
Post #1





Grupa: Zarejestrowani
Postów: 157
Pomógł: 0
Dołączył: 12.02.2007
Skąd: Zielona Góra

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


witam używam dompdf do generowania PDF. w klasie tej jest pewien błąd chodzi o styl

line-trough czyli tekst przekreślony, za każdym razem przekreśla niżej albo wyżej aby to poprawić należy otworzyć plik text_renderer.cls.php, a następnie odnaleźć ten fragment kodu

  1. <?php
  2. case "underline":
  3. $deco_y += $height * (+ self::UNDERLINE_OFFSET);
  4. break;
  5.  
  6. case "overline":
  7. $deco_y += $height * self::OVERLINE_OFFSET;
  8. break;
  9.  
  10. case "line-through":
  11. $deco_y -= $height * ( 0.25 + self::LINETHROUGH_OFFSET);
  12. break;
  13. ?>


i zmienić linię przedostatnią na

  1. <?php
  2. $deco_y -= $height * ( -0.75 + self::LINETHROUGH_OFFSET);
  3. ?>


z polskimi fontami próbowałem sobie radzić w ten sposób iż skonwertowałem tekst na windows-1250 i uzyskałem jakieś tam polskie litery i jest git, ale pojawił się inny problem, polskie litery przesuwają się na siebie tzn jak mam śćę to one nakładają sie na siebie i jest problem z ich poprawką. Czy ktoś już rozwiązywał problem polskich liter w dompdf questionmark.gif?

PROSZĘ O POMOC!!!

Zasada uzyskania polskich liter w dompdf (niezbyt dobry ale działa):

1. Należy ściągnąć ten plik http://pdf.brabosoft.com/class.pdf.php.zip i zastąpić nim plik w pdf/lib

2. podczas tworzenia dokumentu przy pomocy DOMPDF
Należy wykonać to tak:

  1. <?php
  2. require_once("pdf/dompdf_config.inc.php");
  3. require_once("konwersja/konv.php");
  4.  
  5.  
  6.  
  7. $dompdf = new DOMPDF();
  8. ini_set("memory_limit", "32M");
  9.  
  10. $tablica = array("ą","Ą","ć","Ć","Ś","ś","ę","Ę","ż","Ż","ę ", "ż ", "ć ");
  11. $tablicaspacji = array("ą ","Ą ","ć ","Ć ","Ś ","ś ","ę ","Ę ", "ż ","Ż ","ę&nbsp", "ż&nbsp", "ć&nbsp");
  12. $pdf = str_replace($tablica,$tablicaspacji, $pdf);
  13.  
  14. $pdf = UTF8_2_WIN1250($pdf);
  15. $dompdf->load_html($pdf);
  16. $dompdf->set_paper("a4", "portrait");
  17.  
  18. $dompdf->render();
  19. $pdf = $dompdf->output();
  20. file_put_contents("strona1.pdf", $pdf);
  21. ?>


3. wygląd pliku konv.php

  1. <?php
  2. //funkcja zapo�yczona z <a href="http://4programmers.net/PHP/FAQ/Jak_zmieni%C4%87_kodowanie_tekstu_nie_maj%C4%85c_dost%C4%99pu_do_funkcji_iconv_" target="_blank">http://4programmers.net/PHP/FAQ/Jak_zmieni..._funkcji_iconv_</a>
  3. function win2utf(){
  4.  $tabela = Array(
  5. "xb9" => "xc4x85", "xa5" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
  6. "xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
  7. "xf3" => "xc3xb3", "xd3" => "xc3x93", "x9c" => "xc5x9b", "x8c" => "xc5x9a",
  8. "x9f" => "xc5xbc", "xaf" => "xc5xbb", "xbf" => "xc5xba", "xac" => "xc5xb9",
  9. "xf1" => "xc5x84", "xd1" => "xc5x83");
  10.  return $tabela;
  11. }
  12.  
  13. function iso2utf(){
  14.  $tabela = Array(
  15. "xb1" => "xc4x85", "xa1" => "xc4x84", "xe6" => "xc4x87", "xc6" => "xc4x86",
  16. "xea" => "xc4x99", "xca" => "xc4x98", "xb3" => "xc5x82", "xa3" => "xc5x81",
  17. "xf3" => "xc3xb3", "xd3" => "xc3x93", "xb6" => "xc5x9b", "xa6" => "xc5x9a",
  18. "xbc" => "xc5xbc", "xac" => "xc5xbb", "xbf" => "xc5xba", "xaf" => "xc5xb9",
  19. "xf1" => "xc5x84", "xd1" => "xc5x83");
  20.  return $tabela;
  21. }
  22.  
  23. function ISO88592_2_UTF8($tekst){
  24.  return strtr($tekst, iso2utf());
  25. }
  26.  
  27. function UTF8_2_ISO88592($tekst){
  28.  return strtr($tekst, array_flip(iso2utf()));
  29. }
  30.  
  31. function WIN1250_2_UTF8($tekst){
  32.  return strtr($tekst, win2utf());
  33. }
  34.  
  35. function UTF8_2_WIN1250($tekst){
  36.  return strtr($tekst, array_flip(win2utf()));
  37. }
  38.  
  39. function ISO88592_2_WIN1250($tekst){
  40.  return strtr($tekst, "xa1xa6xacxb1xb6xbc", "xa5x8cx8fxb9x9cx9f");
  41. }
  42.  
  43. function WIN1250_2_ISO88592($tekst){
  44.  return strtr($tekst, "xa5x8cx8fxb9x9cx9f", "xa1xa6xacxb1xb6xbc");
  45.  
  46. }
  47. ?>



Pozdrawiam i jeśli zrobił to ktoś w inny lepszy sposób to proszę pisać.

P.S. oczywiście cały bład tkwi WinAnsiEncoding. Natomiast błąd nakładani się liter jest wynikiem definicji znaków w WinAnsiEncoding, np. nakładały mi się znaki ŚĆ ponieważ w WinAnsiEncoding Ś to znak | jego szerokośc nie jest równa szerokości Ś więc kiedy wyświetliłem znaki ŚĆ to one się nałożyły na siebie ponieważ w klasie DomPDF były one definiowen jako |Ć

POZDRO i szukam lepszych rozwiązań od powyższego.

Ten post edytował yaotzin 6.05.2007, 00:22:52


--------------------
------
Per Aspera Ad Astra
Go to the top of the page
+Quote Post
kliper
post 25.06.2007, 09:13:16
Post #2





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 2.01.2006

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


Czy może masz już rozwiązanie jak w tej klasie lepiej pozyskać polskie znaki?
Go to the top of the page
+Quote Post
yaotzin
post 25.06.2007, 16:40:14
Post #3





Grupa: Zarejestrowani
Postów: 157
Pomógł: 0
Dołączył: 12.02.2007
Skąd: Zielona Góra

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


Ponoć wystarczy czcionki sobie dokonwertować, z polskimi znakami. Mi się nie udało może coś źle robiłem. Ale jeśli ci się uda podaj rozwiązanie na forum.

Pozdrawiam....

P.S. Chodzi mi o rozwiązanie tej konwersji czcionek. używałem do tego bodajże ttf2pt1-3.4.4.tgz Ale coś cholerstwo albo źle zrobiło albo nie wiem :/

Ten post edytował yaotzin 25.06.2007, 16:42:09


--------------------
------
Per Aspera Ad Astra
Go to the top of the page
+Quote Post
krokiet
post 31.08.2007, 15:24:44
Post #4





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 31.08.2007

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


Mnie się udało odpalić polskie znaki w DOMPDF, po ciężkich bojach (i dzięki Waszym komentarzom również smile.gif

Oto jak rozwiązałem sprawę:

Jak uzyskać polskie znaki w DOMPDF:

1. Należy przekonwertować tekst z bieżącego kodowania na CP1250:

$pdf = iconv('UTF-8', 'CP1250', $pdf);

2. Należy zaktualizować bibliotekę CPDF, tj ściągnąć

http://pdf.brabosoft.com/class.pdf.php.zip

i zastąpić nim plik w podkatalogu lib

3. Należy zmienić domyślne ustawienia w pliku dompdf_config.inc.php

z

define("DOMPDF_PDF_BACKEND", "auto");

na

define("DOMPDF_PDF_BACKEND", "CPDF");

4. Zainstalować ttf2pt1 (http://ttf2pt1.sourceforge.net/).

Instalacja z uprawnieniami root-a, make install

Należy też ustawić w dompdf_config.inc.php ścieżkę do tt2pt1, np. :

define("TTF2AFM", "/usr/local/bin/ttf2pt1");


5. Aby naprawić szerokości czcionek, należy wykorzystać wbudowany w DOMPDF skrypt.

UWAGA - uprzednio zmienić prawa do zapisu (chmod 0666) do katalogu z czcionkami .../lib/fonts



load_font.php

Przykład wykorzystania:

./load_font.php Tahoma ./tahoma.ttf ./tahomabd.ttf


Nie piszcie, że odgrzebuję wątek, bo wiem o tym ;], ale może komuś się przyda takie podsumowanie.

Ten post edytował krokiet 31.08.2007, 17:04:27
Go to the top of the page
+Quote Post
Luka
post 10.01.2008, 10:58:36
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 19.04.2005

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


Hej,
Wiem, że to stary wątek, ale mam problem właśnie z tą szerokością polskich znaków. Czy ktoś, kto to rozkminił mógłby mi pomóc. Mam polskie litery, ale próby z load_font.php nie przynoszą rezultatu. Pewnie coś gdzieś robię - nie tworzą mi się odpowiednie pliki afm.. Wyskakuje mi komunikat:
'Generating .afm for trebuc.ttf..
Składnia polecenia jest niepoprawna...'

Może ktoś by mi mógł udostępnić takie pliki przekonwertowanej czcionki (najlepiej Trebuchet winksmiley.jpg ).
Rozumiem, że load_font.php odpalam z linii poleceń z podanymi atrybutami, tak?
Bardzo proszę o pomoc.

Ten post edytował Luka 10.01.2008, 11:40:22
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 5.05.2025 - 08:03