--- loncom/interface/printout.pl 2021/01/25 18:06:55 1.168 +++ loncom/interface/printout.pl 2024/10/16 17:48:08 1.173 @@ -1,7 +1,7 @@ #!/usr/bin/perl # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc. # -# $Id: printout.pl,v 1.168 2021/01/25 18:06:55 raeburn Exp $ +# $Id: printout.pl,v 1.173 2024/10/16 17:48:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -447,12 +447,10 @@ foreach $texfile (@texfile) { $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='a4';} - if ($papera ne '') {$papera='-t'.$papera;} + my $papera; + unless ($paper eq '') { + $papera='-t'.$paper; + } my $extra_ps_header = $perlvar{'lonLib'} .'/includepsheader.ps'; my $comma = "dvips $papera -h $extra_ps_header -Ppdf -G0 -o $new_name_file"; &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null", @@ -522,16 +520,51 @@ foreach $texfile (@texfile) { # Use gs to fix the postscript -> level 1.5 # .. if pdfs were included + # + # pswrite device was removed from ghostscript 9.09 and later, + # (ps2write device is used instead). + # check which device is available, and use as the value + # passed via -sDEVICE= arg in gs call to fix the postscript. + # if ($pdfs_converted > 0) { - $comma = "gs -sDEVICE=pswrite -dLanguageLevel=1.5 "; - &busy_wait_command("$comma -o $tempo_file $new_name_file 2>/dev/null 1>/dev/null", - "for $status_statement now validating PS", - \%prog_state, $tempo_file); - + my @possdevices = qw(ps2write pswrite); + my $device; + foreach my $poss (@possdevices) { + if (open(PIPE,"gs -h |grep ' $poss ' 2>&1 |")) { + my $output = ; + close(PIPE); + chomp($output); + if ($output =~ /\Q $poss \E/) { + $device = $poss; + } + } + last if ($device ne ''); + } + if ($device ne '') { + my ($major,$minor); + if (open(PIPE,"gs -v |grep 'GPL Ghostscript' 2>&1 |")) { + my $info = ; + close(PIPE); + chomp($info); + if ($info =~ /Ghostscript\s+(\d+)\.(\d+)/) { + ($major,$minor) = ($1,$2); + } + } + $comma = "gs -sDEVICE=$device -dLanguageLevel=1.5 "; + if (($major > 9) || (($major == 9) && ($minor >= 50))) { + $comma .= '--permit-file-read=* '; + } + &busy_wait_command("$comma -o $tempo_file $new_name_file 2>/dev/null 1>/dev/null", + "for $status_statement now validating PS", + \%prog_state, $tempo_file); + #--- - &busy_wait_command("mv $tempo_file $new_name_file", - 'File move', \%prog_state, $new_name_file); + if (-e $tempo_file) { + &busy_wait_command("mv $tempo_file $new_name_file", + 'File move', \%prog_state, $new_name_file); + } + } } if ($laystyle eq 'album' and $numberofcolumns eq '2') { $comma = "psnup $papera -2 -s1.0 $new_name_file";