[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: