Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de codage ?

4 réponses
Avatar
Max Derouen
Bonjour,

Je suis en train d'écrire un programme Perl/Tk pour l'édition de factures.
Je saisi les informations dans un formulaire et génère la facture avec
PDF::API2;

Mon problème est qu'entre la récupération des informations (bonne si je fais
un print du string) et la facture PDF générée, les caractères accentués sont
transformés.

Exemple : Ligne de présentation.

J'ai essayé de changer l'encoding de la police :
my $f1=$pdf->corefont('Times',-encode => "iso-8859-1");
ou "Latin 1" mais rien n'y fait....

Une idée ??

Merci d'avance

Max

4 réponses

Avatar
Nicolas George
"Max Derouen" wrote in message
<4880627d$0$31879$:
Une idée ??



Fais un exemple complet minimal.
Avatar
Max Derouen
OK, tu as raison.
En fait, je passe par un fichier XML intermédiaire...
Voici un code simplifié :

#!/usr/bin/perl
#Test PDF
use PDF::API2;
use XML::Simple;
use constant mm => 25.4 / 72;
# Récupère le fond de page généré en PDF par Corel Draw
my $fond_de_page="facture2.pdf";
my $fichier_pdf="test2.pdf";
my $pdf = PDF::API2->open($fond_de_page);
my $f1=$pdf->corefont('Courier',-encode => "latin1");
my $page=$pdf->openpage(0);
$page->add_font($f1);

my $fich_xml= "./test.xml";
my $xml = XML::Simple->new (ForceArray => ["LIGNE"]);
my $doc = $xml->XMLin($fich_xml);
my @LIGNES=@{$doc->{LIGNE}};
$texte = $page->text;
foreach $ligne(@LIGNES)
{
$des = $ligne->{DESCRIPTION};
print $des;
$texte->font ( $f1, 14 );
$texte->translate( 50/mm, 278/mm );
$texte->text ($des);
}
$pdf->saveas($fichier_pdf);
exit;

Le "print $des" me donne bien : "Ligne de présentation."
Le PDF : Ligne de présentation.

Voici le fichier XML en entrée :
<?xml version='1.0' encoding='ISO-8859-1'?>
<FACTURE>
<FACTURE_NO>3</FACTURE_NO>
<SOCIETE>XXXXXX</SOCIETE>
<ADRESSE>XXXXXX</ADRESSE>
<DATE>18 Juillet 2008</DATE>
<LIGNE DESCRIPTION="Ligne de présentation." QUANTITE="1" PRIX_HT="400"
></LIGNE>
<TOTAL_HT>XXXX</TOTAL_HT>
<TVA>XXX</TVA>
<TOTAL_TTC>XXX</TOTAL_TTC>
</FACTURE>


"Nicolas George" <nicolas$ a écrit dans le message de
news: 488062a0$0$24430$
"Max Derouen" wrote in message
<4880627d$0$31879$:
Une idée ??



Fais un exemple complet minimal.


Avatar
Nicolas George
"Max Derouen" wrote in message <48806d1c$0$3720$:
En fait, je passe par un fichier XML intermédiaire...
Voici un code simplifié :



Il aurait pu encore être simplifié, mais ce n'est pas trop grave.

Chez moi (Debian Lenny à jour) ça marche parfaitement.

"Nicolas George" <nicolas$ a écrit dans le message de
news: 488062a0$0$24430$



Le top-posting <URL: http://fr.wikipedia.org/wiki/TOFU_(Usenet_et_Internet)
> est désapprouvé ici.
Avatar
Max Derouen
Merci pour ton aide.
Grâce à ta réponse, (tu es sous Linux) j'ai pensé que c'était peut-être lié
à Windows et à Active PERL.
En fait, j'ai rajouté une fonction encode à tous les strings que j'envoie au
PDF et ça marche..

$texte->text_right (encode("iso-8859-1",(sprintf("%.2f",$total_TTC))));

Y'a un truc que je ne vois pas mais c'est bon comme ça.
Merci encore
Max

"Nicolas George" <nicolas$ a écrit dans le message de
news: 48807155$0$13861$
"Max Derouen" wrote in message <48806d1c$0$3720$:
En fait, je passe par un fichier XML intermédiaire...
Voici un code simplifié :



Il aurait pu encore être simplifié, mais ce n'est pas trop grave.

Chez moi (Debian Lenny à jour) ça marche parfaitement.

"Nicolas George" <nicolas$ a écrit dans le message de
news: 488062a0$0$24430$



Le top-posting <URL:
http://fr.wikipedia.org/wiki/TOFU_(Usenet_et_Internet)
> est désapprouvé ici.