X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FTemplate%2FLaTeX.pm;h=293db2e18c5bbb58cb495563026aa3c18134867d;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hp=303fb7f37f6f17bf9c949a5b166fdc2f3da65df3;hpb=5ad4d6d7453a373f12f8e457bc3c3463c946b77f;p=kivitendo-erp.git diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm index 303fb7f37..293db2e18 100644 --- a/SL/Template/LaTeX.pm +++ b/SL/Template/LaTeX.pm @@ -83,6 +83,8 @@ sub _format_html { $content =~ s{ (?:\ |\s)+ }{ }gx; $content =~ s{ (?:\ |\s)+$ }{}gx; $content =~ s{ (?:
)+$ }{}gx; + $content =~ s{ |
    \s*
}{}igx; + $content =~ s{ (?:

\s*

\s* )+ \Z }{}imgx; my @parts = grep { $_ } map { if (substr($_, 0, 1) eq '<') { @@ -394,12 +396,16 @@ sub _embed_file_directive { my ($self, $file) = @_; # { source => $xmlfile, - # name => 'ZUGFeRD-invoice.xml', - # description => $::locale->text('ZUGFeRD invoice'), } + # name => 'factur-x.xml', + # description => $::locale->text('Factur-X/ZUGFeRD invoice'), } 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,10 +414,11 @@ sub _embed_file_directive { push @options, sprintf('%s={%s}', $name, $value); # TODO: escaping }; - $add_opt->('ucfilespec', $embed_name); - $add_opt->('desc', $file->{description}); - $add_opt->('afrelationship', $file->{relationship}); - $add_opt->('mimetype', $file->{mime_type}); + $add_opt->('filespec', $embed_name_ascii); + $add_opt->('ucfilespec', $embed_name); + $add_opt->('desc', $file->{description}); + $add_opt->('afrelationship', $file->{relationship}); + $add_opt->('mimetype', $file->{mime_type}); return sprintf('\embedfile[%s]{%s}', join(',', @options), $file_name); } @@ -428,39 +435,22 @@ sub _force_mandatory_packages { if ($line =~ m/\\usepackage[^\{]*{(.*?)}/) { $used_packages{$1} = 1; - } elsif (($line =~ m/\\documentclass/) && $self->{pdf_a}) { - my $version = $self->{pdf_a}->{version} // '3a'; - - if ($self->{pdf_a}->{xmp}) { + } elsif ($line =~ m/\\begin\{document\}/) { + if ($self->{pdf_a} && $self->{pdf_a}->{xmp}) { + my $version = $self->{pdf_a}->{version} // '3a'; my $xmp_file_name = $self->{userspath} . "/pdfa.xmp"; my $out = IO::File->new($xmp_file_name, ">:encoding(utf-8)") || croak "Error creating ${xmp_file_name}: $!"; $out->print(Encode::encode('utf-8', $self->{pdf_a}->{xmp})); $out->close; - } else { - my $meta = $self->{pdf_a}->{meta_data} // {}; - push @new_lines, ( - "\\RequirePackage{filecontents}\n", - "\\begin{filecontents*}{\\jobname.xmpdata}\n", - ($meta->{title} ? sprintf("\\Title{%s}\n", $meta->{title}) : ""), - ($meta->{author} ? sprintf("\\Author{%s}\n", $meta->{author}) : ""), - ($meta->{language} ? sprintf("\\Language{%s}\n", $meta->{language}) : ""), - "\\end{filecontents*}\n", + "\\usepackage[a-${version},mathxmp]{pdfx}[2018/12/22]\n", + "\\usepackage[genericmode]{tagpdf}\n", + "\\tagpdfsetup{activate-all}\n", + "\\hypersetup{pdfstartview=}\n", ); } - push @new_lines, ( - $line, - "\\usepackage[a-${version},mathxmp]{pdfx}[2018/12/22]\n", - "\\usepackage[genericmode]{tagpdf}\n", - "\\tagpdfsetup{activate-all}\n", - "\\hypersetup{pdfstartview=}\n", - ); - - next; - - } elsif ($line =~ m/\\begin\{document\}/) { push @new_lines, map { "\\usepackage{$_}\n" } grep { !$used_packages{$_} } @required_packages; push @new_lines, $line; push @new_lines, map { $self->_embed_file_directive($_) } @{ $self->{pdf_attachments} // [] };