Comment utiliser les jeux de characters "supportes" par FPDF dans HTML2PDF, genre cp1251 ?
Spipu Le 24/09/2009 à 09:38 normalement, si il marche sous FPDF, il faut utiliser la même technique pour HTML2PDF.
quel est ton pb exactement ?
Ben, j'ai un code html genere en UTF-8, je lui passe un $html=iconv('UTF-8','cp1251//TRANSLIT',$html), qui me genere un cote HTML en CP1251 (je vois sur firefox que l'encodage est bien cp1251)
puis je le passe dans HTML2PDF, et la, tous les charactere cyrillic sont transformes en ÷ÁÛ ÁÇÅÎÔ : ïÌØÇÁ ôÕÚÏ×Á .....
(note que mes docs PDF en Anglais passsent tres bien dasn HTML2PDF)
Spipu Le 24/09/2009 à 20:30 et ces meme charactères marchent sous FPDF ?
ben, FPDF dit que CP1251 est supporte (comme cp1252, isoXXX, etc...) (mais pas utf-8), donc je pense que HTML2PDF doit se conformer a ce que fait FPDF, mais visiblement il y a un truc que je ne comprends pas entre les 2
Existe-t-il une methode dans la classe HTML2PDF qui indique quel "encoding" on utilise ?
ahahahahaha le bon codage en dur ;-)
J'ai rajotue dans la classe HTTP2PDF
var $encoding = 'ISO-8859-15';
function HTML2PDF($sens = 'P', $format = 'A4', $langue='fr', $marges = array(5, 5, 5, 8), $force_page = false, $encoding='ISO-8859-15')
{
...
$this->encoding=$encoding;
...
}
puis dans o_WRITE:
$txt = html_entity_decode($txt, ENT_QUOTES, $this->encoding);
Pas beaucoup de progres cepandant sur le format de sortie. Exist-t-il un autre endroit avec un ISO-8859 ?
Spipu Le 25/09/2009 à 12:06 LoL, je venais de faire de même.
par contre, il vaut mieux que tu ne touches pas au constructeur, car il est utilisé pour la création de sous objet HTML2PDF, et ca risque de foiré. Il vaut créer une methode setEncoding();
et rajoute également dans la méthode createSubhtml une ligne du style $subhtml->setEncoding($this->encoding); car sinon tu ne passera pas l'encodage quand HTML2PDF créé des sous éléments pour les tableaux.
enfin, il faut que ta fonte soit compatible.
as-tu essayé sous FPDF si tes caractères apparaissaient normalement ?
Comment je peux tester mes polices sous FPDF ?
Ok, mes fonts s'affichent bien sous FPDF
reste a voir pourquoi HTML2PDF ne les prends pas ...
C'est le passage a SubHTML qui merdoie... une idee ?
je fais HTML2PDF d'un texte simple, ca marche nickel, mais des que cé st dans un tableau, ca merdoie, d'ou ma suspission pour le SubHTML...
J'ai rajoute:
function setEncodingFont($font)
{
$this->encoding_font=$font;
if(strlen($font)>0)
{
$this->pdf->SetFont($font);
}
}
puis dans le subHtml:
$sub_html->setEncodingFont($this->encoding_font);
GOT IT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
I added in o_Write (in addition to the above)
if(strlen($this->encoding_font)>0)
{
mail('admin@grosjo.net','HTML2PDF',"SetFont($this->encoding_font)");
$this->pdf->SetFont($this->encoding_font);
}
PARTY TIME !!!!!
Par contre, je perds le gras / italique/ etc...
BILAN DES COURSES:
class HTML2PDF
{
...
var $encoding = 'ISO-8859-15';
var $encoding_font = '';
....
function setEncoding($encoding)
{
$this->encoding=$encoding;
}
function setEncodingFont($font)
{
$this->encoding_font=$font;
$this->style->value['font-family']=$font;
}
....
function CreateSubHTML(&$sub_html, $cellmargin=0)
{
// initialisation du sous objet
$sub_html = new HTML2PDF(
$this->sens,
$this->format,
$this->langue,
array($this->defaultLeft,$this->defaultTop,$this->defaultRight,$this->defaultBottom),
true
);
$sub_html->setEncoding($this->encoding);
$sub_html->setEncodingFont($this->encoding_font);
....
}
}
------------------
Mon appel de fonction:
if($russian>0)
{
$encoding='cp1251';
}
else
{
$encoding='ISO-8859-15';
}
$html2pdf = new HTML2PDF($orient,$size,'fr', array(8, 8, 8, 8),true);
$html2pdf->setEncoding($encoding);
$html2pdf->pdf->SetDisplayMode('fullpage');
if($russian>0)
{
$html2pdf->AddFont('VerdanaRU','','verdanaru.php');
$html2pdf->AddFont('VerdanaRU','B','verdanaruB.php');
$html2pdf->AddFont('VerdanaRU','I','verdanaruI.php');
$html2pdf->AddFont('VerdanaRU','BI','verdanaruBI.php');
$html2pdf->SetEncodingFont('VerdanaRU');
}
$html2pdf->WriteHTML($html);
return $html2pdf->Output('doc.pdf','S');
ben si, parce que le code HTML peut contenir plusieures fontes, mais pour forcer FPDF a utiliser la fonte Russe, il faut bien l'ecrire quelque part pour supplenter les terems de l'HTML...
tout ca pour dire que ce serait bien de passer a UTF 8 ;-)
he, pkoi le bug de l'encoding est pas corrige dans 3.25 ?
Spipu Le 10/10/2009 à 19:54 sisi, il est corrigé, la méthode setencoding a été rajouté
pour ce qui est du forcage de la fonte, ce n'etait pas une solution propre. ce n'est pas à html2pdf de forcer une fonte pour l'html, mais à l'HTML de prévoir une fonte logique avec l'encodage...
hello spidu,
to use this with utf8 do i need to do something alse then:
$html2pdf->setEncoding ( 'utf-8');
There is much requests for this.
Developer of Fusion Ticket. I ticket sale webshop using Html2pdf to generate the pdf files
Spipu Le 08/01/2010 à 09:28 html2pdf use FPDF, and FPDF does not work with UTF8, sorry !
Thanks spidu for your replay.
A couple of people using FusionTicket asked us what they needed to do to show none ascii characters,
Can you give some suggestion on our forum or here what they can do best.
thanks.
Developer of Fusion Ticket. I ticket sale webshop using Html2pdf to generate the pdf files