+sub parse_and_create_pdf {
+ my ($class, $template_file_name, %params) = @_;
+
+ my $keep_temp = $::lx_office_conf{debug} && $::lx_office_conf{debug}->{keep_temp_files};
+ my ($tex_fh, $tex_file_name) = File::Temp::tempfile(
+ 'kivitendo-printXXXXXX',
+ SUFFIX => '.tex',
+ DIR => $::lx_office_conf{paths}->{userspath},
+ UNLINK => $keep_temp ? 0 : 1,,
+ );
+
+ my $old_wd = getcwd();
+
+ my $local_form = Form->new('');
+ $local_form->{cwd} = $old_wd;
+ $local_form->{IN} = $template_file_name;
+ $local_form->{tmpdir} = $::lx_office_conf{paths}->{userspath};
+ $local_form->{tmpfile} = $tex_file_name;
+ $local_form->{templates} = SL::DB::Default->get->templates;
+
+ foreach (keys %params) {
+ croak "The parameter '$_' must not be used." if exists $local_form->{$_};
+ $local_form->{$_} = $params{$_};
+ }
+
+ my $error;
+ eval {
+ my $template = SL::Template::LaTeX->new($template_file_name, $local_form, \%::myconfig, $::lx_office_conf{paths}->{userspath});
+ my $result = $template->parse($tex_fh) && $template->convert_to_pdf;
+
+ die $template->{error} unless $result;
+
+ 1;
+ } or do { $error = $EVAL_ERROR; };
+
+ chdir $old_wd;
+ close $tex_fh;
+
+ if ($keep_temp) {
+ chmod(((stat $tex_file_name)[2] & 07777) | 0660, $tex_file_name);
+ } else {
+ my $tmpfile = $tex_file_name;
+ $tmpfile =~ s/\.\w+$//;
+ unlink(grep { !m/\.pdf$/ } <$tmpfile.*>);
+ }
+
+ return (error => $error) if $error;
+ return (file_name => do { $tex_file_name =~ s/tex$/pdf/; $tex_file_name });
+}
+