Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can't I use č,ć,đ charters in TCPDF table?

Tags:

html

php

tcpdf

I'm building a tcpdf file for my web site, in that tcpdf file ther is a table with some data, But I cant get this charters to work properly. for encoding I'm using windows-1250. The charters witch are not working : č,ć,đ. I have tried with utf-8 but still not geting this charters is there something wrong with tcpdf?

here is my php:

    <?php

require_once('tcpdf_files/config/lang/hrv.php');
require_once('tcpdf_files/tcpdf.php');

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'windows-1250', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 061');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

//set some language-dependent strings
$pdf->setLanguageArray($l);

// ---------------------------------------------------------

// set font
$pdf->SetFont('times', '', 10);

// add a page
$pdf->AddPage();

//START OF DATA FOR PDF DOSJE


         $ime = "šiš čevap";
         $prezime = "čušpaiz";
         $rodjenje = "čakardič";
         $odjel = "četnik";
         $radno_mjesto = "čaćijađ";
         $poduzece = "čitluk";
         $putovnica = "čošak";
         $vozacka = "pićkica";


$html = <<<EOF
<!-- EXAMPLE OF CSS STYLE -->
<table width="100%" style="padding:3px;">
<tr>

<td>

    <table border="1" style="border:1px solid grey; width:60%;">

            <tr>

                <td rowspan="3">
                <p style="margin-top:-38px;">POSLODAVAC:</p>
                </td>

                <td>
                Ime firme
                </td>
            </tr>

            <tr>        


                <td>
                    adresa firme
                </td>
            </tr>

            <tr>        

                <td>
                    oib firme
                </td>
            </tr>
    </table><br>

    <table  border="1" style="border:1px solid #dddddd; width:60%;">    
            <tr>            
                <td>
                RADNIK: 
                </td>

                <td>
                $ime $prezime
                </td>
            </tr>

            <tr>        
                <td>
                Oib
                </td>

                <td>
                $rodjenje
                </td>
            </tr>

            <tr>        
                <td>
                Spol
                </td>

                <td>
                $odjel
                </td>
            </tr>

            <tr>        
                <td>
                Dan, mjesec i godina rođenja
                </td>

                <td>
                $radno_mjesto
                </td>
            </tr>

            <tr>        
                <td>
                Državljanstvo
                </td>

                <td>
                $radno_mjesto
                </td>
            </tr>
        </table><br>






EOF;

// output the HTML content
$pdf->writeHTML($html, true, false, true, false, '');


// reset pointer to the last page
$pdf->lastPage();


//Close and output PDF document
$pdf->Output('example_061.pdf', 'I');
like image 478
Intex Avatar asked Oct 20 '25 16:10

Intex


2 Answers

It will not work with times font. Our letters works with this font:

$pdf->SetFont('dejavusans', '', 11, '', true);

And UTF-8

EDIT After some time, I think that this is better:

$pdf->SetFont('freeserif', '', 11, '', true);
like image 165
jare25 Avatar answered Oct 22 '25 06:10

jare25


I'm not sure if it will work, but try iconv. I had to use it when I was making Japanese PDFs. I don't know what your encoding needs to be, but this is what I used:

$newtext = iconv("UTF-8", "SJIS", $oldtext);

Obviously change 'SJIS' to whatever encoding you are using.

EDIT

Just repeating what I said in the comments below, but hopefully it is easier to read up here:

Try changing the fourth constructor variable to TRUE, so it uses UTF-8:

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'windows-1250', false);
                                                                    ⇓
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'windows-1250', false);

If that doesn't work, I don't know what to tell you :-/

EDIT (again)

Probably a silly question, but did you look at the examples?

http://www.tcpdf.org/examples/example_018.phps

Is there nothing there that can help you?

YET ANOTHER EDIT

Okay, hopefully this should do it:

<?php 

require_once('tcpdf/config/lang/hrv.php'); 
require_once('tcpdf/tcpdf.php'); 

// create new PDF document 
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'utf-8', false);

// set document information 
$pdf->SetCreator(PDF_CREATOR); 
$pdf->SetAuthor('Nicola Asuni'); 
$pdf->SetTitle('TCPDF Example 061'); 
$pdf->SetSubject('TCPDF Tutorial'); 
$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); 

// set default header data 
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING); 

// set header and footer fonts 
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 

// set default monospaced font 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 

//set margins 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 

//set auto page breaks 
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 

//set image scale factor 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 

//set some language-dependent strings 
$pdf->setLanguageArray($l); 

// --------------------------------------------------------- 

// set font 
$pdf->SetFont('freesans', '', 10); 

// add a page 
$pdf->AddPage(); 

//START OF DATA FOR PDF DOSJE 

  $ime = "šiš čevap";
  $prezime = "čušpaiz";
  $rodjenje = "čakardič";
  $odjel = "četnik";
  $radno_mjesto = "čaćijađ";
  $poduzece = "čitluk";
  $putovnica = "čošak";
  $vozacka = "pićkica";

$html = <<<EOF
<!-- EXAMPLE OF CSS STYLE --> 
<table width="100%" style="padding:3px;"> 
  <tr>
    <td>
      <table border="1" style="border:1px solid grey; width:60%;"> 
        <tr>
          <td rowspan="3"> 
            <p style="margin-top:-38px;">POSLODAVAC:</p> 
          </td>
          <td>
            Ime firme
          </td>
        </tr>
        <tr>
          <td>
            adresa firme
          </td>
        </tr>
        <tr>
          <td>
            oib firme
          </td>
        </tr>
      </table>
      <br>
      <table  border="1" style="border:1px solid #dddddd; width:60%;">     
        <tr>             
          <td> 
            RADNIK:  
          </td>
          <td> 
            $ime $prezime 
          </td> 
        </tr>
        <tr>         
          <td> 
            Oib
          </td>
          <td>
            $rodjenje
          </td>
        </tr>
        <tr>
          <td> 
            Spol 
          </td>
          <td>
            $odjel
          </td> 
        </tr>
        <tr>         
          <td>
            Dan, mjesec i godina rođenja 
          </td>
          <td>
            $radno_mjesto
          </td>
        </tr>
        <tr>
          <td>
            Državljanstvo
          </td>
          <td>
            $radno_mjesto 
          </td>
        </tr>
      </table>
      <br> 
    </td>
  </tr>
</table>

EOF;

// output the HTML content 
$pdf->writeHTML($html, true, false, true, false, ''); 


// reset pointer to the last page 
$pdf->lastPage(); 


//Close and output PDF document 
$pdf->Output('example_061.pdf', 'I');

?>

If you are using values from your 1250-encoded database, you will need to convert them like this:

$db = mysql_connect('localhost', 'user', 'password');
mysql_select_db('databasename', $db);
mysql_set_charset("cp1250");

$query = mysql_query("SELECT * FROM `yourtable`");

while ($row = mysql_fetch_assoc($query)) {
  $converted_value = iconv("windows-1250", "utf-8", $row['column_name']);
}

I made a test table with 1250 collation in my own database, and used the words you supplied. This worked for me. Let me know if it helps!

like image 26
David John Welsh Avatar answered Oct 22 '25 07:10

David John Welsh