Schrift
[thread]6451[/thread]

PDF und XML der Euro will nicht: ...als Euro auftauchen!

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
mordur
 2004-08-03 12:37
#85252 #85252
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
ich hab immer noch das Problem mit dem Eurozeichen:
mit diesem Code lese ich eine XML-Datei aus und Übergebe den Wert an das PDF-Modul.Dazu setze ich ein Eurozeichen mit chr(0x80).
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl

use strict;
use PDF::Report;
use XML::DOM;



my $pdf = new PDF::Report(
PageSize => 'a4',
PageOrientation => 'portrait'
);



my $parser = new XML::DOM::Parser;
my $doc = $parser->parsefile ("test.xml");

$pdf->newpage(1);
my $nodes = $doc->getElementsByTagName ("preis");

my $n = $nodes->getLength;

for (my $i = 0; $i < $n; $i++)
{
my $node = $nodes->item($i);
my $text = $node->getAttributeNode ("text")->getValue;

$pdf->setSize(30);
$pdf->setFont('Helvetica-bold');
$pdf->setAddTextPos(107,85);
$pdf->setAlign("center");
$pdf->addText($text.chr(0x80),
undef,
undef);

}

open(PDF, "> $0.pdf") or die "Error opening $0.pdf: $!\n";
print PDF $pdf->Finish();
close(PDF);


exit(0);

wenn ich statt $text aus der XML-Datei z.B. direkt "text".chr(0x80) schreibe wird der Euro richtig dargestellt. Andernfalls macht das Prog ein komisches großes A mit Hut vor den Euro
guckst du hier:
Euro-falsch
und hier:
Euro-richtig
dies hier ist die zgehörige XML-Datei:
Code: (dl )
1
2
3
4
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<aktion>
<preis x="100" y="58.82" type="Helvetica-bold" size="8.82" align="right" text="Unsere Werbung ist gut"/>
</aktion>

Was könnte denn das XML_modul mit dem Text anstellen, das das Eurozeichen nicht mehr richtig dargestellt wird?
Ratlos ??? mordur
renee
 2004-08-03 12:47
#85253 #85253
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
könnte das vielleicht ein \r sein?? Wurde das XML-File in Windows erstellt??

Edit: es scheint kein Problem mit dem Euro-Zeichen zu sein, sondern ein Problem mit dem Inhalt der XML-Datei!\n\n

<!--EDIT|renee|1091522888-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2004-08-03 12:54
#85254 #85254
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn Du das Problem umgehen willst, dann mach vorher ein dos2unix! Oder ein
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use Tie::File;

my $file = 'path/to/xml.file';
my @lines = ();

tie(@lines,'Tie::File',$file,autochomp => 0) or die $file.": ".$!;
foreach(@lines){
$_ =~ s/\r?\n/\n/g;
}
untie @lines;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jan10001
 2004-08-03 12:56
#85255 #85255
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Hm, ich würde vermuten das Problem liegt bei encoding="iso-8859-1 in der XML Datei, das Ganze eventuell mal in
iso-8859-15 oder Unicode UTF8 umändern.
Dubu
 2004-08-03 13:00
#85256 #85256
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=mordur,03.08.2004, 10:37]
Code: (dl )
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>

[/quote]
ISO 8859-1 kennt kein Euro-Zeichen (auch wenn Microsoft je nach Sprachversion von Windows anderes behauptet).

Nimm entweder ISO 8859-15 oder gleich Unicode, z.B. in der Form von UTF-8. In ISO 8859-15 befindet sich das Euro-Zeichen an Position 164 (A4h), dort wo bei ISO 8859-1 das internationale Waehrungszeichen ist. Die Unicode-Position fuer das Euro-Zeichen ist 20ACh.
renee
 2004-08-03 13:22
#85257 #85257
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das Euro-Zeichen wird ja immer gedruckt (schaut mal in die Beispiel-pdfs). Das ist ja anscheinend nicht das Problem. Das Problem ist das A vornedran... Das Euro-Zeichen taucht ja gar nicht im XML-File auf, sondern wird von mordur manuell gesetzt ($text.chr(0x80) )!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2004-08-03 13:26
#85258 #85258
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ja, aber 0x80 ist eben nicht Euro. Vielleicht unter einigen Windows-Zeichensaetzen, aber auf keinen Fall in einer XML-Datei. Darf man eigentlich in XML etwas anderes ausser iso-8859-* und utf-8 benutzen?
mordur
 2004-08-03 13:45
#85259 #85259
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
Den Zeichensatz in der XML-Datei verändern bringt nichts. Das mit Tie klappt auch nicht, hab ich probiert. Außerdem sind alle Dateien unter Linux erstellt, Win hab ich hier gar nicht. Der Euro kommt NICHT aus der XML-Datei. Dort kommt nur der Text her. Den Euro "kette" ich aber an den Text an. Wenn der Text also aus xml kommt, gibts ein A mit Hut vor dem Eurozeichen, wenn ich den Text so eingebe,gehts. Ich wiederhole mich.... ;-) siehe die Links
ptk
 2004-08-03 14:05
#85260 #85260
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich hab mal in die generierten PDF-Dateien geschaut. Dort wird anscheinend der Windows-Zeichensatz verwendet mit Euro an der Position 128. Alle XML-verarbeitenden Perl-Module arbeiten hingegen mit utf-8 (bzw. mit "Characters"). PDF::Report scheint anscheinend die Konvertierung zwischen Characters und dem Windows-Zeichensatz nicht korrekt zu machen (das ist eventuell einen Bugreport wert). Eine Moeglichkeit ist, die Konvertierung manuell vorzunehmen, also etwa mit:
Code: (dl )
1
2
use Encode qw(encode);
$text = encode("cp1250", $text);
mordur
 2004-08-03 14:12
#85261 #85261
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
ich hab jetzt mit
$text = pack ("A500",$text);
auch den Erfolg, das das Eurozeichen korrekt dargestellt wird.
But why? was macht pack genau?
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-08-03 12:37.