PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Perl] utf-8 in PDF scheint fehlerhaft



Molaf
29-06-2009, 09:15
Ich möchte gerne Daten aus einer Anwendung als PDF ausgeben.
Dazu nutze ich Perl und das Modul PDF::Report

Wenn ich jetzt einen String ausgebe, beispielsweise so:

$pdf->addRawText( $tCont->{Spezifikation}
, 320, 130 + 100, 'black', undef, 0, 0);
dann klappt alles wie erwartet, es sei denn $tCont->{Spezifikation} enthält so etwas wie: ⌀3.00x0.125mm
Mit use Encode; und der Funktion decode bringe ich nun den String lesbar heraus:

$pdf->addRawText( decode("utf-8", $tCont->{Spezifikation} )
, 320, 130 + 100, 'black', undef, 0, 0);
Das Durchmesser-Zeichen bleibt dabei natürlich auf der Strecke.

Kodiere ich nicht, kommt: âOE€3.00x0.125mm
Nutze ich encode('utf-8',... kommt: âÂOE€3.00x0.125mm

Perl nutze ich Activeperl 5.10, soweit ich weiß codiert das intern mit utf-8.

Kompletter Beispielcode wäre:


use strict;
use PDF::Report;
# PDF-Objekt
my $pdf = new PDF::Report(PageSize => "'A4'",
PageOrientation => "Portrait",);
# Neue Seite und Seite öffnen
$pdf->newpage(0);
$pdf->openpage();

my $tCont->{Spezifikation} = '⌀3.00x0.125mm';

$pdf->addRawText( decode("utf-8", $tCont->{Spezifikation} )
, 320, 130 + 100, 'black', undef, 0, 0);

$pdf->saveAs('test.pdf');


Ich stehe im Moment etwas auf dem Schlauch, was diese ganze Kodierungsgeschichte von mir verlangt. Kann es sein, dass die Zeichensätze in PDF keine UTF-8 -Zeichenräume abdecken?

Molaf
06-07-2009, 10:38
Der Vollständigkeit halber und falls mal jemand das Problem haben sollte:

utf8-Zeichen lassen sich ins PDF bringen, wenn man alle Module mit use utf8; ausstattet.
Das Encoding muss dann trotzdem mit decode geschehen, wobei ja eigentlich ausgehende Daten mit encode behandelt werden müssten...

Jedenfalls funktioniert es jetzt.