Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][FPDF] Biały kwadrat w tekście
Bajaczysko
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.01.2015

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


Witam,
Tworzę PDF'a dynamicznie i mam problem z tą linijką:
Kod
$this->WriteHTML(iconv("UTF-8","ISO-8859-2", $_POST['jezyk']));

WriteHTML to funkcja, która zamiast <b>blabla</b> wypisze blabla.
Mój problem polega na tym, że zawsze początek tekstu wygląda tak:
(IMG:http://i.imgur.com/5sHaEor.png)
Znajduje się biały kwadracik z przodu. Dlaczego on tutaj jest i jak go usunąć?

Pozdrawiam
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A czasem nie ma przed tym oryginalnym tekstem jakiegoś kółka lub kreski?
Go to the top of the page
+Quote Post
Bajaczysko
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.01.2015

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


Nie, oryginalny tekst wygląda tak (umieszczę w cytacie, żeby tagi pozostały (IMG:style_emoticons/default/smile.gif) ):
Cytat
<p style="text-align: justify;">
Dla Europejczyków jedynym dokumentem wymaganym przy wjeździe jest paszport, ważny przynajmniej 6 miesięcy od daty planowanego odlotu. Wizę (w cenie około 15 USD) można otrzymać na dowolnym lotnisku lub w porcie. W celu uzyskania bliższych informacji sugerujemy skontaktować się z najbliższym egipskim konsulatem bądź ambasadą lub w biurze egipskich linii lotniczych.</p>

Wydaje mi się, że to sprawka tabulatora ale pewien nie jestem.

EDIT: Tabulator jest przed słowem "Dla"

Ten post edytował Bajaczysko 15.06.2015, 17:48:35
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Pokaż co jest na początku podglądając plik jakimś hexedytorem.
Go to the top of the page
+Quote Post
Bajaczysko
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.01.2015

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


Znaczy się tekst jest pobierany ze zmiennej $_POST. Sam tekst jest wprowadzany w formularzu i na jego podstawię tworzę PDF'a.
Jeszcze jakieś 'ideas'? (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
pasman
post
Post #6





Grupa: Zarejestrowani
Postów: 70
Pomógł: 4
Dołączył: 16.03.2012

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


ideas jest taki że na pewno to nie jest tabulator.
szklana kula też nic nie mówi, więc jak napisał @trueblue
przekonwertuj to na kody heksadecymalne.

dobrze byłoby żebyś też wkleił funkcję WriteHTML bo na pewno ma ona błędy.

pokaż też jak generujesz tego pdfa

Ten post edytował pasman 16.06.2015, 09:45:31
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


zapewne jest tam \r\n (\n\r ?) i najprawdopodobniej to generuje błąd. przepuść treść przez nl2br() i wtedy zobacz co się stanie.
Go to the top of the page
+Quote Post
Bajaczysko
post
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.01.2015

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


nl2br() nie działa.
Przekonwertowałem pdf'a na kod 16 ale pokazały mi się same znaczki i nie wiem co zrobić - pierwszy raz takie coś zrobiłem. Jak znaleźć interesującą mnie linijkę tekstu w hexEdytorze?
WriteHTML wygląda w ten sposób (znajduje się to w klasie wraz z moimi innymi funkcjami):
  1. var $B=0;
  2. var $I=0;
  3. var $U=0;
  4. var $HREF='';
  5. var $ALIGN='';
  6.  
  7. function WriteHTML($html)
  8. {
  9. //HTML parser
  10. $html=str_replace("\n",' ',$html);
  11. $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
  12. foreach($a as $i=>$e)
  13. {
  14. if($i%2==0)
  15. {
  16. //Text
  17. if($this->HREF)
  18. $this->PutLink($this->HREF,$e);
  19. elseif($this->ALIGN=='center')
  20. $this->Cell(0,5,$e,0,1,'C');
  21. else
  22. $this->Write(5,$e);
  23. }
  24. else
  25. {
  26. //Tag
  27. if($e[0]=='/')
  28. $this->CloseTag(strtoupper(substr($e,1)));
  29. else
  30. {
  31. //Extract properties
  32. $a2=explode(' ',$e);
  33. $tag=strtoupper(array_shift($a2));
  34. $prop=array();
  35. foreach($a2 as $v)
  36. {
  37. if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
  38. $prop[strtoupper($a3[1])]=$a3[2];
  39. }
  40. $this->OpenTag($tag,$prop);
  41. }
  42. }
  43. }
  44. }
  45.  
  46. function OpenTag($tag,$prop)
  47. {
  48. //Opening tag
  49. if($tag=='B' || $tag=='I' || $tag=='U')
  50. $this->SetStyle($tag,true);
  51. if($tag=='A')
  52. $this->HREF=$prop['HREF'];
  53. if($tag=='BR')
  54. $this->Ln(5);
  55. if($tag=='P')
  56. $this->ALIGN=$prop['ALIGN'];
  57. if($tag=='HR')
  58. {
  59. if( !empty($prop['WIDTH']) )
  60. $Width = $prop['WIDTH'];
  61. else
  62. $Width = $this->w - $this->lMargin-$this->rMargin;
  63. $this->Ln(2);
  64. $x = $this->GetX();
  65. $y = $this->GetY();
  66. $this->SetLineWidth(0.4);
  67. $this->Line($x,$y,$x+$Width,$y);
  68. $this->SetLineWidth(0.2);
  69. $this->Ln(2);
  70. }
  71. }
  72.  
  73. function CloseTag($tag)
  74. {
  75. //Closing tag
  76. if($tag=='B' || $tag=='I' || $tag=='U')
  77. $this->SetStyle($tag,false);
  78. if($tag=='A')
  79. $this->HREF='';
  80. if($tag=='P')
  81. $this->ALIGN='';
  82. }
  83.  
  84. function SetStyle($tag,$enable)
  85. {
  86. //Modify style and select corresponding font
  87. $this->$tag+=($enable ? 1 : -1);
  88. $style='';
  89. foreach(array('B','I','U') as $s)
  90. if($this->$s>0)
  91. $style.=$s;
  92. $this->SetFont('',$style);
  93. }
  94.  
  95. function PutLink($URL,$txt)
  96. {
  97. //Put a hyperlink
  98. $this->SetTextColor(0,0,255);
  99. $this->SetStyle('U',true);
  100. $this->Write(5,$txt,$URL);
  101. $this->SetStyle('U',false);
  102. $this->SetTextColor(0);
  103. }
Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


http://stackoverflow.com/a/4225813
Go to the top of the page
+Quote Post
pasman
post
Post #10





Grupa: Zarejestrowani
Postów: 70
Pomógł: 4
Dołączył: 16.03.2012

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


możesz poeksperymentować z linią

  1. $html=str_replace("\n",' ',$html);


np. wyciąć więcej znaków kontrolnych

  1. $html=preg_replace('/[\x00-\x20]/g',' ',$html);


i zobacz czy to pomoże.

EDIT: php chyba nie obsłuży /g , spróbuj bez tego.

Ten post edytował pasman 16.06.2015, 15:48:42
Go to the top of the page
+Quote Post
Pyton_000
post
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


albo zastosuj:
  1. $html = str_ireplace(array("\r","\n","\r\n"),'', $html);

lub całkiem wywal tą linijkę.
Go to the top of the page
+Quote Post
Bajaczysko
post
Post #12





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 28.01.2015

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


@pasman - dzięki teraz działa (IMG:style_emoticons/default/smile.gif) Zamiast kwadratu jest zwykła spacja.
Możesz mi powiedzieć co oznacza [\x00-\x20] ?
Dzięki wszystkim za odpowiedzi (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #13





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


przedział znaków wyrażony w Hex

http://www.asciitable.com/ - znaki od 0 do 32 (Dec)
Go to the top of the page
+Quote Post
pasman
post
Post #14





Grupa: Zarejestrowani
Postów: 70
Pomógł: 4
Dołączył: 16.03.2012

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


dodam tylko że jest sporo tutoriali o wyrażeniach regularnych

https://www.google.pl/search?q=wyra%C5%BCen...UA-H4ygPz6YCIDg

Ten post edytował pasman 17.06.2015, 10:27:27
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: 23.08.2025 - 06:56