--- loncom/interface/printout.pl 2014/02/28 19:20:06 1.159 +++ loncom/interface/printout.pl 2017/11/12 15:41:45 1.165 @@ -1,7 +1,7 @@ #!/usr/bin/perl # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc. # -# $Id: printout.pl,v 1.159 2014/02/28 19:20:06 bisitz Exp $ +# $Id: printout.pl,v 1.165 2017/11/12 15:41:45 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,7 @@ use Apache::lonlocal; use Apache::lonmsg(); use LONCAPA::Enrollment; use LONCAPA::Configuration; +use LONCAPA; use strict; @@ -201,7 +202,7 @@ my $tableofindex = $env{'cgi.'.$identifi my $advanced_role = $env{'cgi.'.$identifier.'.role'}; my $number_of_files = $env{'cgi.'.$identifier.'.numberoffiles'}+1; my $student_names = $env{'cgi.'.$identifier.'.studentnames'}; -my $backref = &Apache::lonnet::unescape($env{'cgi.'.$identifier.'.backref'}); +my $backref = &unescape($env{'cgi.'.$identifier.'.backref'}); my @names_pack=(); @@ -209,8 +210,10 @@ if ($student_names=~/_END_/) { @names_pack=split(/_ENDPERSON_/,$student_names); } if ($backref) { - print('

'.&mt("[_1]Return[_2] to editing resource.", + print('

'.&mt("[_1]Return[_2] to resource.", "","").'

'); + print('

'. + &mt("Change Printing Options").'

'."\n"); } my $figfile = $texfile; $figfile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.dat/; @@ -438,8 +441,13 @@ foreach $texfile (@texfile) { $name_file =~ s/\.tex/\.dvi/; my $new_name_file = $name_file; $new_name_file =~ s/\.dvi/\.ps/; +# Explicitly include a switch for papertype, otherwise dvips will default +# to whatever is listed first in config.ps (which in most cases is a4). +# Historically (since 2004) LON-CAPA printing expected to use the default, +# i.e., a papertype of a4, when the user selected letter [8 1/2 x 11 in] +# in the Layout options, so I follow that convention if $papera is letter. my $papera=$paper; - if ($papera eq 'letter') {$papera='';} + if ($papera eq 'letter') {$papera='a4';} if ($papera ne '') {$papera='-t'.$papera;} my $extra_ps_header = $perlvar{'lonLib'} .'/includepsheader.ps'; my $comma = "dvips $papera -h $extra_ps_header -Ppdf -G0 -o $new_name_file"; @@ -933,7 +941,7 @@ sub convert_figure { # Spaces are problematic for system commands and LaTeX, replace with _ - $eps_f =~ s/ /\_/g; + $eps_f =~ s/ /\_/g; # # If the file is already an .eps or .ps file (eps_f still has the original @@ -972,18 +980,29 @@ sub convert_figure { $eps_f = $perlvar{'lonPrtDir'}.'/'.$eps_f; &debug("Converting pdf $not_eps to postscript: $eps_f"); - system("pdftops $not_eps $eps_f"); - $pdfs_converted++; # Need to fix ps in last pass. + my @args = ('pdftops',$not_eps,$eps_f); + system({$args[0]} @args); # Indirect object forces list processing mode. + # See perlfunc documentation for exec(). + if ($? and $advanced_role) { + print '

' + .&mt('An error occurred during the conversion of [_1] to postscript.', + ''.$prettyname.'') + .'

'; + } else { + $pdfs_converted++; # Need to fix ps in last pass. + } } else { - system("convert $not_eps $eps_f"); - if($? and $advanced_role){ - print '

' - .&mt('An error occurred during the conversion of [_1].', + my @args = ('convert',$not_eps,$eps_f); + system({$args[0]} @args); # Indirect object forces list processing mode. + # See perlfunc documentation for exec(). + if ($? and $advanced_role) { + print '

' + .&mt('An error occurred during the conversion of [_1].', ''.$prettyname.'') - .'
' - .&mt('If possible try to save this image using different settings and republish it.') - .'

'; - } + .'
' + .&mt('If possible try to save this image using different settings and republish it.') + .'

'; + } } if (not -e $eps_f) {