Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dompdf i polskie znaczki :/
Forum PHP.pl > Forum > PHP
yaotzin
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.
kliper
Czy może masz już rozwiązanie jak w tej klasie lepiej pozyskać polskie znaki?
yaotzin
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 :/
krokiet
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.
Luka
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.