[LON-CAPA-cvs] cvs: loncom /interface printout.pl
foxr
foxr@source.lon-capa.org
Fri, 17 Apr 2009 10:02:49 -0000
foxr Fri Apr 17 10:02:49 2009 EDT
Modified files:
/loncom/interface printout.pl
Log:
See bz 5899
- If a file in the convert queue is pdf, convert using pdftops
- Use fixps to ensure that the ps has no errors when including
converted pdfs.
Index: loncom/interface/printout.pl
diff -u loncom/interface/printout.pl:1.140 loncom/interface/printout.pl:1.141
--- loncom/interface/printout.pl:1.140 Tue Mar 24 10:29:39 2009
+++ loncom/interface/printout.pl Fri Apr 17 10:02:49 2009
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.
#
-# $Id: printout.pl,v 1.140 2009/03/24 10:29:39 foxr Exp $
+# $Id: printout.pl,v 1.141 2009/04/17 10:02:49 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -45,9 +45,14 @@
my $busy_wait_timeout = 30;
+
+my $debugging = 0;
+
sub debug {
- my ($text) = @_;
- print "$text <br />\n";
+ if ($debugging) {
+ my ($text) = @_;
+ print "$text <br />\n";
+ }
}
# Determine if a user is operating as a student for this course/domain.
@@ -118,7 +123,7 @@
if (&is_student()) {
# build the subject and message body:
- # print "sending message to course coordinators.<br />";
+ &debug("sending message to course coordinators.");
# Todo: Convert badurl into a url from file path:
@@ -137,9 +142,9 @@
}
my (undef, %receivers) = &Apache::lonmsg::decide_receiver(undef, 0,
1,1,1);
- # print "<br /> sending...section: $env{'request.course.sec'}";
+ &debug("sending...section: $env{'request.course.sec'}");
foreach my $dest (keys %receivers) {
- # print "<br /> dest is $dest";
+ &debug("dest is $dest");
my @destinfo = split(/:/,$dest);
my $user = $destinfo[0];
my $dom = $destinfo[1];
@@ -211,8 +216,11 @@
# it contains the names of the files that need to be converted, one per line.
#
+&debug("Figure file is $figfile");
+
if (-e $figfile) {
- # print "$figfile exists\n";
+ &debug( "Figure file exists");
+ &debug("$figfile exists");
my %done_conversion;
my $temporary_file=IO::File->new($figfile) || die "Couldn't open fig file $figfile for reading: $!\n";
my @content_of_file = <$temporary_file>;
@@ -223,6 +231,7 @@
print('<br />');
foreach my $not_eps (@content_of_file) {
chomp($not_eps);
+ &debug( "Being asked to convert $not_eps");
if ($not_eps ne '') {
$not_eps=~s|\/\.\/|\/|g;
if (!$done_conversion{$not_eps}) { # Only convert multiple includes once.
@@ -459,13 +468,16 @@
my $pdf_file = $1.'.pdf';
$papera=~s/t/p/;
if ($laystyle eq 'album' and $numberofcolumns eq '2') {
- $comma = "psnup $papera -2 -s1.0 $new_name_file";
- &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",
+ $comma = "fixps --force ".$new_name_file." | psnup $papera -2 -s1.0 ";
+ &debug("PSNUP command: $comma");
+ &busy_wait_command("$comma 1>$tempo_file 2>/dev/null",
"for $status_statement now Modifying PS layout",
\%prog_state,$tempo_file);
} elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {
- $comma = 'pstops '.$papera.' "2:0+1(0.48w,0)"';
- &busy_wait_command("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null",
+ $comma = 'fixps --force '.$new_name_file.' | pstops '.$papera.' "2:0+1(0.48w,0)"';
+ &debug("PSTOPS command: $comma ");
+
+ &busy_wait_command("$comma 1>$tempo_file 2>/dev/null",
"for $status_statement now Modifying PS layout",
\%prog_state,$tempo_file);
} else {
@@ -492,7 +504,7 @@
close(FFHS);
$ps_file=$new_ps_file;
}
- &busy_wait_command("ps2pdf $ps_file $pdf_file 1>/dev/null 2>/dev/null",
+ &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);
@@ -846,6 +858,7 @@
#
sub convert_figure {
my ($not_eps) = @_;
+ &debug("in convert_figure");
my $status_statement='EPS picture for '.$not_eps;
my $eps_f = $not_eps;
@@ -889,7 +902,24 @@
&Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,
'Converting to EPS '.$prettyname);
}
- system("convert $not_eps $eps_f");
+ #
+ # If the file is a PDF, need to use pdftops to convert it to a ps file.
+ # otherwise use imagemagik:
+ #
+ if($not_eps =~/\.(pdf|PDF)$/) {
+
+ #
+ # For whatever reason, pure postscript conversions have to be
+ # in the same dir as the base file:
+ #
+ $eps_f = &basename($eps_f);
+ $eps_f = $perlvar{'lonPrtDir'}.'/'.$eps_f;
+
+ &debug("Converting pdf $not_eps to postscript: $eps_f");
+ system("pdftops $not_eps $eps_f");
+ } else {
+ system("convert $not_eps $eps_f");
+ }
if (not -e $eps_f) {
# converting an animated gif creates either: