ZUGFeRD: Namen der eingebetteten Datei richtig setzen
authorMoritz Bunkus <m.bunkus@linet.de>
Mon, 3 Aug 2020 11:34:03 +0000 (13:34 +0200)
committerMoritz Bunkus <m.bunkus@linet.de>
Mon, 3 Aug 2020 11:56:54 +0000 (13:56 +0200)
'ucfilespec' wird erst ab PDF 1.7 unterstützt, was wir nicht
erzeugen. Daher wurde bisher der Name der temporären Datei auch im PDF
als Dateiname verwendet.

Jetzt wird korrekt »ZUGFeRD-invoice.xml« als Name des Anhangs im PDF
angezeigt.

SL/Template/LaTeX.pm

index 4915c86..b2b6838 100644 (file)
@@ -400,6 +400,10 @@ sub _embed_file_directive {
   my $file_name  =  blessed($file->{source}) && $file->{source}->can('filename') ? $file->{source}->filename : "" . $file->{source}->filename;
   my $embed_name =  $file->{name} // $file_name;
   $embed_name    =~ s{.*/}{};
+
+  my $embed_name_ascii = $::locale->quote_special_chars('filenames', $embed_name);
+  $embed_name_ascii    =~ s{[^a-z0-9!@#$%^&*(){}[\],.+'"=_-]+}{}gi;
+
   my @options;
 
   my $add_opt = sub {
@@ -408,6 +412,7 @@ sub _embed_file_directive {
     push @options, sprintf('%s={%s}', $name, $value); # TODO: escaping
   };
 
+  $add_opt->('filespec',       $embed_name_ascii);
   $add_opt->('ucfilespec',     $embed_name);
   $add_opt->('desc',           $file->{description});
   $add_opt->('afrelationship', $file->{relationship});