467d4c11ad238c327f5c41a63f42271bb783e122
[kivitendo-erp.git] / SL / DB / Helper / PDF_A.pm
1 package SL::DB::Helper::PDF_A;
2
3 use strict;
4
5 use parent qw(Exporter);
6 our @EXPORT = qw(create_pdf_a_print_options);
7
8 use Carp;
9 use Template;
10
11 sub _create_xmp_data {
12   my ($self, %params) = @_;
13
14   my $template = Template->new({
15     INTERPOLATE  => 0,
16     EVAL_PERL    => 0,
17     ABSOLUTE     => 1,
18     PLUGIN_BASE  => 'SL::Template::Plugin',
19     ENCODING     => 'utf8',
20   }) || croak;
21
22   my $output = '';
23   $template->process(SL::System::Process::exe_dir() . '/templates/pdf/pdf_a_metadata.xmp', \%params, \$output) || croak $template->error;
24
25   return $output;
26 }
27
28 sub create_pdf_a_print_options {
29   my ($self) = @_;
30
31   require SL::DB::Language;
32
33   my $language_code = $self->can('language_id') && $self->language_id ? SL::DB::Language->load_cached($self->language_id)->template_code : undef;
34   $language_code  ||= 'de';
35   my $pdf_language  = $language_code =~ m{deutsch|german|^de$}i   ? 'de-DE'
36                     : $language_code =~ m{englisch|english|^en$}i ? 'en-US'
37                     :                                               '';
38   my $author        = do {
39     no warnings 'once';
40     $::instance_conf->get_company
41   };
42
43   my $timestamp =  DateTime->now_local->strftime('%Y-%m-%dT%H:%M:%S%z');
44   $timestamp    =~ s{(..)$}{:$1};
45
46   return {
47     version                => '3b',
48     xmp                    => _create_xmp_data(
49       $self,
50       pdf_a_version        => '3',
51       pdf_a_conformance    => 'B',
52       producer             => 'pdfTeX',
53       timestamp            => $timestamp, # 2019-11-05T15:26:20+01:00
54       meta_data            => {
55         title              => $self->displayable_name,
56         author             => $author,
57         language           => $pdf_language,
58       },
59       zugferd              => {
60         conformance_level  => 'EXTENDED',
61         document_file_name => 'factur-x.xml',
62         document_type      => 'INVOICE',
63         version            => '1.0',
64       },
65     ),
66   };
67 }
68
69 1;