--- loncom/interface/printout.pl 2024/07/11 12:44:40 1.171 +++ loncom/interface/printout.pl 2024/11/01 00:08:03 1.176 @@ -1,7 +1,7 @@ #!/usr/bin/perl # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc. # -# $Id: printout.pl,v 1.171 2024/07/11 12:44:40 raeburn Exp $ +# $Id: printout.pl,v 1.176 2024/11/01 00:08:03 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 '') || (($laystyle eq 'album') && ($numberofcolumns eq '1'))) { + $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", @@ -507,7 +505,9 @@ foreach $texfile (@texfile) { $new_name_file =~ m/^(.*)\./; my $ps_file = my $tempo_file = $1.'temporar.ps'; my $pdf_file = $1.'.pdf'; - $papera=~s/t/p/; + unless ($paper eq '') { + $papera='-p'.$paper; + } #---- # The code below uses fixps to make pdf include in sequences work. # @@ -544,7 +544,19 @@ foreach $texfile (@texfile) { last if ($device ne ''); } if ($device ne '') { - $comma = "gs -sDEVICE=$device -dLanguageLevel=1.5 --permit-file-read=* "; + 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); @@ -557,7 +569,24 @@ foreach $texfile (@texfile) { } } if ($laystyle eq 'album' and $numberofcolumns eq '2') { - $comma = "psnup $papera -2 -s1.0 $new_name_file"; + my $canscale; + if (open(PIPE,"psnup --version 2>&1 |")) { + while () { + chomp(); + if (/^psnup\s+release\s+(\d+)/) { + if ($1 < 2) { + $canscale = 1; + } + last; + } + } + close(PIPE); + } + if ($canscale) { + $comma = "psnup $papera -2 -s1.0 $new_name_file"; + } else { + $comma = "psnup $papera -2 $new_name_file"; + } &debug("PSNUP command: $comma"); &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null", "for $status_statement now Modifying PS layout", @@ -571,7 +600,8 @@ foreach $texfile (@texfile) { } else { $ps_file=$new_name_file; } - my $addtoPSfile={'legal'=>'<< /PageSize [612 1008] >> setpagedevice', + my $addtoPSfile={'letter'=>'<< /PageSize [612 792] >> setpagedevice', + 'legal'=>'<< /PageSize [612 1008] >> setpagedevice', 'tabloid'=>'<< /PageSize [792 1224] >> setpagedevice', 'executive'=>,'<< /PageSize [540 720] >> setpagedevice', 'a2'=>'<< /PageSize [1195.02 1690.09] >> setpagedevice', @@ -579,19 +609,17 @@ foreach $texfile (@texfile) { 'a4'=>'<< /PageSize [595.2 842] >> setpagedevice', 'a5'=>'<< /PageSize [421.1 595.2] >> setpagedevice', 'a6'=>'<< /PageSize [298.75 421.1] >> setpagedevice', - }; - if ($paper ne 'letter') { - open(FFH,'<',$ps_file) || die "Couldn't open ps file $ps_file for reading: $!\n"; - my $new_ps_file='new'.$ps_file; - open(FFHS,'>',$new_ps_file) || die "Couldn't open new ps file $new_ps_file for reading: $!\n"; - print FFHS $addtoPSfile->{$paper}."\n"; - while () { - print FFHS $_; - } - close(FFH); - close(FFHS); - $ps_file=$new_ps_file; + }; + open(FFH,'<',$ps_file) || die "Couldn't open ps file $ps_file for reading: $!\n"; + my $new_ps_file='new'.$ps_file; + open(FFHS,'>',$new_ps_file) || die "Couldn't open new ps file $new_ps_file for reading: $!\n"; + print FFHS $addtoPSfile->{$paper}."\n"; + while () { + print FFHS $_; } + close(FFH); + close(FFHS); + $ps_file=$new_ps_file; &busy_wait_command("ps2pdf13 $ps_file $pdf_file 1>/dev/null 2>/dev/null", "for $status_statement now Converting PS to PDF", \%prog_state,$pdf_file);