Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: FPDF - problem z polskimi znakami
Forum PHP.pl > Forum > PHP
Age1869
Problem jest pewnie dość banalny, ale niestety męczę się nad nim już od dawna i nie mogę znaleźć rozwiązania...

Mam skrypt rejestracyjny, który wrzuca wprowadzone dane do bazy danych (kodowanie UTF-8). Przy pomocy biblioteki FPDF chcę generować plik PDF z wprowadzonymi danymi i niestety ciągle mam krzaczki zamiast polskich znaków. Poniżej mój plik generujący:

  1. <?php
  2. if (include $_SERVER['DOCUMENT_ROOT'].'/fpdf181/fpdf.php') {
  3.  
  4. class PDF extends FPDF
  5. {
  6. // Page header
  7. function Header()
  8. {
  9. if ($this->PageNo() > 3) {
  10. // Arial bold 15
  11. $this->Image('http://www.strona.pl/naglowek.jpg',0,0,-300);
  12. $this->SetFont('Arial','',10);
  13. $this->Cell(80);
  14. // Move to the right
  15. // $this->Cell(0,5,'', 1, 0, 'c', true);
  16. // Line break
  17. $this->Ln(60);
  18. }
  19. }
  20.  
  21. // Page footer
  22. function Footer()
  23. {
  24. if ($this->PageNo() > 2) {
  25. // Position at 1.5 cm from bottom
  26. $this->SetY(-15);
  27. // Arial italic 8
  28. $this->SetFont('Arial','b',10);
  29. // Page number
  30. $this->Cell(0,5,''.$this->PageNo().'', 0, 1, 'C');
  31. }
  32. }
  33. }
  34. //DB connection
  35. $dbtype = 'baza';
  36. $host = 'localhost';
  37. $user = 'baza';
  38. $password = 'baza';
  39. $db = 'baza';
  40.  
  41.  
  42. // Create connection
  43. $conn = new mysqli($host, $user, $password, $db);
  44.  
  45. // Check connection
  46. if ($conn->connect_error) {
  47. die("Connection failed: " . $conn->connect_error);
  48. }
  49.  
  50. $sql = "SELECT * FROM abstract ORDER BY ses";
  51. $result = $conn->query($sql);
  52.  
  53. // Instanciation of inherited class
  54. $pdf = new PDF();
  55. $pdf->AliasNbPages();
  56. $pdf->AddFont('arial_ce','','arial_ce.php');
  57. $pdf->AddFont('arial_ce','I','arial_ce_i.php');
  58. $pdf->AddFont('arial_ce','B','arial_ce_b.php');
  59. $pdf->AddFont('arial_ce','BI','arial_ce_bi.php');
  60.  
  61. $x = 1;
  62. $pdf->AddPage();
  63. $pdf->Image('http://www.strona.pl/front.jpg', 0, 0, 210, 297);
  64. $organiser[] = 'imie naziwsko';
  65. $pdf->AddPage();
  66. $pdf->SetY(-60);
  67. $pdf->SetFont('arial_ce','B',15);
  68. $pdf->Cell(0,5, iconv('UTF-8', 'windows-1250//TRANSLIT', 'Organizacja'), 0, 1, 'C');
  69. $pdf->Ln(1);
  70. $pdf->SetFont('arial_ce','B',15);
  71. $pdf->Cell(0,5,'www.strona.pl', 0, 1, 'C');
  72. $pdf->Ln(1);
  73. $pdf->SetFont('arial_ce','B',15);
  74. $pdf->Cell(0,5,'Organizacja', 0, 1, 'C');
  75. $pdf->Ln(5);
  76. $pdf->SetFont('arial_ce','B',15);
  77. $pdf->Cell(0,5,'Miejsce data', 0, 1, 'C');
  78. $pdf->Ln(5);
  79. $pdf->AddPage();
  80. $pdf->SetFont('arial_ce','B',15);
  81. $pdf->Cell(0,5,'ORGANISING COMMITTEE', 0, 1, 'C');
  82. $pdf->Ln(5);
  83. $osoby = array();
  84. $osoba_str = array();
  85. foreach ($organiser as $organ) {
  86. $org=iconv('UTF-8', 'windows-1250//TRANSLIT//IGNORE', $organ);
  87. $pdf->SetFont('arial_ce','',12);
  88. $pdf->Cell(0,5,$org, 0, 1, 'C');
  89. $pdf->Ln(5);
  90. }
  91. $n = $result->num_rows;
  92. print $n;
  93. if ($result->num_rows > 0) {
  94. // output data of each row
  95. while($row = mysqli_fetch_array($result)) {
  96. if (!empty($row['paper'])) {
  97. if (empty($sesja)) {
  98. $sesja = $row['ses'];
  99. $pdf->header = 0;
  100. $pdf->footer = 0;
  101. $pdf->AddPage();
  102. $pdf->SetFont('arial_ce','B',15);
  103. $pdf->Write(50,$sesja);
  104. }
  105. elseif ($sesja != $row['ses']) {
  106. $sesja = $row['ses'];
  107. $pdf->header = 0;
  108. $pdf->footer = 0;
  109. $pdf->AddPage();
  110. $pdf->SetFont('arial_ce','B',15);
  111. $pdf->Write(50,$sesja);
  112. }
  113.  
  114.  
  115. $pdf->header = 0;
  116. $pdf->footer = 0;
  117. $pdf->AddPage();
  118.  
  119. $authors = $row['name1'] . ' ' . $row['surname1'];
  120. if (!empty($row['name2'])) {
  121. $authors .= ', ' . $row['name2'] . ' ' . $row['surname2'];
  122.  
  123. $osoba2 = $row['surname2'] . ' ' . $row ['name2'];
  124. $osoba_str[$osoba2][$x] = $pdf->PageNo();
  125.  
  126. }
  127. if (!empty($row['name3'])) {
  128. $authors .= ', ' . $row['name3'] . ' ' . $row['surname3'];
  129.  
  130. $osoba3 = $row['surname3'] . ' ' . $row ['name3'];
  131. $osoba_str[$osoba3][$x] = $pdf->PageNo();
  132. }
  133. if (!empty($row['name4'])) {
  134. $authors .= ', ' . $row['name4'] . ' ' . $row['surname4'];
  135.  
  136. $osoba4 = $row['surname4'] . ' ' . $row ['name4'];
  137. $osoba_str[$osoba4][$x] = $pdf->PageNo();
  138. }
  139. if (!empty($row['name5'])) {
  140. $authors .= ', ' . $row['name5'] . ' ' . $row['surname5'];
  141.  
  142. $osoba5 = $row['surname5'] . ' ' . $row ['name5'];
  143. $osoba_str[$osoba5][$x] = $pdf->PageNo();
  144. }
  145.  
  146. $title=$row['title'];
  147. $pdf->SetFont('arial_ce','B',15);
  148. $pdf->Write(5,$title);
  149. $pdf->Ln(5);
  150. $pdf->SetFont('arial_ce','',12);
  151. $pdf->Write(5, $authors);
  152. $pdf->Ln(5);
  153. $pdf->SetFont('arial_ce','b',12);
  154. $pdf->Write(5,'Scientific supervisor: ');
  155. $pdf->SetFont('arial_ce','',12);
  156. $pdf->Write(5,$row['supervisor']);
  157. $pdf->Ln(5);
  158. $pdf->SetFont('arial_ce','',12);
  159. $pdf->Write(5, $row['affiliation']);
  160. $pdf->Ln(10);
  161. $paper=$row['paper'];
  162. if ($paper=='experimental') {
  163. $pdf->SetFont('arial_ce','b',14);
  164. $pdf->Write(5,'Introduction: ');
  165. $pdf->SetFont('arial_ce','',14);
  166. $pdf->Write(5, html_entity_decode(trim(preg_replace('/\s\s+/', ' ', $row['introduction']))));
  167. $pdf->Ln(5);
  168. $pdf->SetFont('arial_ce','b',14);
  169. $pdf->Write(5,'Methods: ');
  170. $pdf->SetFont('arial_ce','',14);
  171. $methods = html_entity_decode(trim(preg_replace('/\s\s+/', ' ', $row['material'])));
  172. $pdf->Write(5,$methods);
  173. $pdf->Ln(5);
  174. $pdf->SetFont('arial_ce','b',14);
  175. $pdf->Write(5,'Results: ');
  176. $pdf->SetFont('arial_ce','',14);
  177. $results = html_entity_decode(trim(preg_replace('/\s\s+/', ' ', $row['results'])));
  178. $pdf->Write(5,$results);
  179. $pdf->Ln(5);
  180. $pdf->SetFont('arial_ce','b',14);
  181. $pdf->Write(5,'Conclusions: ');
  182. $pdf->SetFont('arial_ce','',14);
  183. $pdf->Write(5,html_entity_decode(trim(preg_replace('/\s\s+/', ' ', $row['conclusions']))));
  184. $pdf->Ln(10);
  185. }
  186. elseif($paper=='case-report') {
  187. $pdf->SetFont('arial_ce','b',14);
  188. $pdf->Write(5,'Background: ');
  189. $pdf->SetFont('arial_ce','',14);
  190. $pdf->Write(5,html_entity_decode($row['crbackground']));
  191. $pdf->Ln(5);
  192. $pdf->SetFont('arial_ce','b',14);
  193. $pdf->Write(5,'Case report: ');
  194. $pdf->SetFont('arial_ce','',14);
  195. $methods = html_entity_decode($row['crcasereport']);
  196. $pdf->Write(5,$methods);
  197. $pdf->Ln(5);
  198. $pdf->SetFont('arial_ce','b',14);
  199. $pdf->Write(5,'Conclusions: ');
  200. $pdf->SetFont('arial_ce','',14);
  201. $pdf->Write(5,html_entity_decode($row['crconclusions']));
  202. $pdf->Ln(10);
  203. }
  204. $pdf->SetFont('arial_ce','b',12);
  205. $pdf->Write(5,'Keywords: ');
  206. $pdf->SetFont('arial_ce','',12);
  207. $keywords=$row['keywords'];
  208. $pdf->Write(5,$keywords);
  209. $x++;
  210.  
  211. // Dodanie do spisu tresci
  212. $content['title'][$x] = $title;
  213. $content['pageno'][$x] = $pdf->PageNo();
  214. // Dodanie do indeksu osób
  215. $osoba1 = $row['surname1'] . ' ' . $row ['name1'];
  216. $osoba_str[$osoba1][$x] = $pdf->PageNo();
  217.  
  218.  
  219.  
  220.  
  221. if (!in_array($osoba1, $osoby)) {
  222. $osoby[] = $osoba1;
  223. }
  224. if (!in_array($osoba2, $osoby)) {
  225. $osoby[] = $osoba2;
  226. }
  227. if (!in_array($osoba3, $osoby)) {
  228. $osoby[] = $osoba3;
  229. }
  230. if (!in_array($osoba4, $osoby)) {
  231. $osoby[] = $osoba4;
  232. }
  233. if (!in_array($osoba5, $osoby)) {
  234. $osoby[] = $osoba5;
  235. }
  236.  
  237. }}
  238.  
  239. } else {
  240. echo "0 results";
  241. }
  242. $y = 2;
  243. $pdf->AddPage();
  244. $pdf->SetFont('arial_ce','b',14);
  245. $pdf->Write(5,'TABLE OF CONTENTS');
  246. $pdf->Ln(20);
  247. while ($y <= $x) {
  248. $pdf->SetFont('arial_ce','b',10);
  249. $pdf->Write(5,trim(preg_replace('/\s\s+/', ' ', $content['pageno'][$y])) . ' ....... ');
  250. $pdf->SetFont('arial_ce','',10);
  251. $pdf->Write(5,trim(preg_replace('/\s\s+/', ' ', $content['title'][$y])));
  252. $pdf->Ln(5);
  253. $y++;
  254. }
  255.  
  256. $y = 2;
  257. sort($osoby);
  258. $pdf->AddPage();
  259. $pdf->SetFont('arial_ce','b',14);
  260. $pdf->Write(5,'INDEX OF AUTHORS');
  261. $pdf->Ln(20);
  262.  
  263. $oss = array();
  264. foreach($osoby as $key=>$val) {
  265. $oss[$val] = true;
  266. }
  267. $oss = array_keys($oss);
  268.  
  269.  
  270. foreach ($oss as $os) {
  271. $pdf->SetFont('arial_ce','b',10);
  272. $pdf->Write(5,trim(preg_replace('/\s\s+/', ' ', $os)) . ' ');
  273. $pdf->SetFont('arial_ce','',10);
  274. $numery_stron = '';
  275.  
  276. foreach ($osoba_str[$os] as $stronka) {
  277. if (!empty($numery_stron)) {
  278. $numery_stron .= ', ';
  279. }
  280. $numery_stron .= $stronka;
  281. }
  282. $pdf->Write(5,trim(preg_replace('/\s\s+/', ' ', $numery_stron)));
  283. $pdf->Ln(5);
  284. $y++;
  285. }
  286.  
  287. echo 'Liczba zgłoszonych prac: ' . $x . '';
  288.  
  289. $pdf->Output('abstrakty.pdf', F);
  290.  
  291. $conn->close();
  292. }
  293. else {
  294. }
  295. die();
  296. ?>


Będę wdzięczny za każdą pomoc, bo ja już nie mam chyba więcej pomysłów - próbowałem różne metody z Gugla, żadna nie pomogła. Próbowałem przestawić się na biblioteki pochodne - tfpdf i ufpdf i niestety nie mogę się z nimi w ogóle dogadać...
Niree
Biblioteki PDF często nie mają polskich ogonków. Użyj czcionki:
  1. freeserif
Age1869
Dzięki za podpowiedź, jak się okazuje nie to było problemem - serwer narzucał niewłaściwe kodowanie w zapytaniu do bazy. Dodanie linijki:

  1. $conn->set_charset("utf8");


I późniejsza konwersja z UTF-8 do 'windows-1250//TRANSLIT//IGNORE' za pomocą funkcji iconv(); załatwiły sprawę :-)

Temat do zamknięcia.
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.