[LON-CAPA-cvs] cvs: loncom /interface lonprintout.pm /xml londefdef.pm

raeburn raeburn at source.lon-capa.org
Fri Feb 6 15:30:07 EST 2026


raeburn		Fri Feb  6 20:30:07 2026 EDT

  Modified files:              
    /loncom/interface	lonprintout.pm 
    /loncom/xml	londefdef.pm 
  Log:
  - Bug 6121. Support PDF Forms for all PRINT_TYPEs
  
  
-------------- next part --------------
Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.712 loncom/interface/lonprintout.pm:1.713
--- loncom/interface/lonprintout.pm:1.712	Fri Feb  6 20:08:21 2026
+++ loncom/interface/lonprintout.pm	Fri Feb  6 20:30:06 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.712 2026/02/06 20:08:21 raeburn Exp $
+# $Id: lonprintout.pm,v 1.713 2026/02/06 20:30:06 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2180,9 +2180,8 @@
 }
 
 sub print_latex_header {
-    my $mode=shift;
-
-    return &Apache::londefdef::latex_header($mode);
+    my ($mode,$pdfFormFields) = @_;
+    return &Apache::londefdef::latex_header($mode,$pdfFormFields);
 }
 
 sub path_to_problem {
@@ -2238,13 +2237,13 @@
 
 
 sub unsupported {
-    my ($currentURL,$mode,$symb)=@_;
+    my ($currentURL,$mode,$pdfFormFields,$symb)=@_;
     my $cleanURL=&Apache::lonenc::check_decrypt($currentURL);
     my $shown = $currentURL;
     if (($cleanURL ne $currentURL) || ($symb =~ m{/^enc/})) {
         $shown = &mt('URL not shown (encrypted)');
     }
-    my $result = &print_latex_header($mode);
+    my $result = &print_latex_header($mode,$pdfFormFields);
     if ($cleanURL=~m|^(/adm/wrapper)?/ext/|) {
         $cleanURL=~s|^(/adm/wrapper)?/ext/|http://|;
         $cleanURL=~s|^http://https://|https://|;
@@ -2297,7 +2296,7 @@
 								      $numberofcolumns);
     my $LaTeXwidth=&recalcto_mm($textwidth);
 
-    my $result   =    &print_latex_header($mode);
+    my $result   =    &print_latex_header($mode,$pdfFormFields);
 
     my $title=&Apache::lonnet::gettitle($currentURL);
     $title = &Apache::lonxml::latex_special_symbols($title);
@@ -2327,7 +2326,8 @@
 	    $result           .= &print_page_in_course($helper, $rparmhash,
 						       $resource_src, \@page_resources);
         } elsif ($resource->ext()) {
-            $result.=&latex_header_footer_remove(&unsupported($current_url,$mode,$resource->symb));
+            $result.=&latex_header_footer_remove(&unsupported($current_url,$mode,
+                                                              $pdfFormFields,$resource->symb));
 	} elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/)  {
             # these resources go through the XML transformer:
             $result .= &Apache::lonxml::latex_special_symbols($resource->title()) . '\\\\';
@@ -2388,7 +2388,7 @@
 		if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
 		    $texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/;
 		} else {
-		    $texversion= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+		    $texversion= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'},$pdfFormFields);
 		    if ($helper->{'VARS'}->{'construction'} ne '1') {
 			my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'});
 			$title = &Apache::lonxml::latex_special_symbols($title);
@@ -2658,7 +2658,7 @@
 #   prefix the latex with the page headers stuff.
 #
 sub print_construction_sequence {
-    my ($currentURL, $helper, %form, $LaTeXwidth) = @_;
+    my ($currentURL, $helper, %form, $LaTeXwidth, $pdfFormFields) = @_;
 
     my $result;
     my $rndseed=time;
@@ -2703,7 +2703,7 @@
 		} else {
 		    # If necessary, encapsulate answer in minipage:
 
-		    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+		    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'},$pdfFormFields);
 		    my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'});
 		    $title = &Apache::lonxml::latex_special_symbols($title);
 		    my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
@@ -2734,7 +2734,8 @@
 	    if ($urlp =~ /\.sequence$/) {
 		$result .= &print_construction_sequence($urlp,
 							$helper, %form,
-							$LaTeXwidth);
+                                                        $LaTeXwidth,
+                                                        $pdfFormFields);
 	    }
 	}
 	elsif ($urlp =~ /\.pdf$/i) {
@@ -2965,7 +2966,7 @@
 		if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
 		    $texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/;
 		} else {
-		    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+		    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'},$pdfFormFields);
 		    if ($helper->{'VARS'}->{'construction'} ne '1') {
 			my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'});
 			$title = &Apache::lonxml::latex_special_symbols($title);
@@ -3008,10 +3009,10 @@
         } elsif ($cleanURL!~m|^/adm/|
 		 && $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') {
 	    $result .= &print_construction_sequence($currentURL, $helper, %form,
-						    $LaTeXwidth);
+						    $LaTeXwidth, $pdfFormFields);
 	    $result .= '\end{document}';
 	    if (!($result =~ /\\begin\{document\}/)) {
-		$result = &print_latex_header() . $result;
+		$result = &print_latex_header('',$pdfFormFields) . $result;
 	    }
 	    # End construction space sequence.
 	} elsif ($cleanURL=~/\/(smppg|syllabus|aboutme|bulletinboard|ext\.tool)$/) {
@@ -3053,7 +3054,7 @@
 
 	} else {
 	    $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'},
-				  $helper->{'VARS'}->{'symb'});
+                                  $pdfFormFields,$helper->{'VARS'}->{'symb'});
 	}
     } elsif (($print_type eq 'map_problems')          or
 	     ($print_type eq 'map_problems_in_page')  or
@@ -3127,7 +3128,7 @@
 		$resources_printed .= $urlp.':';
 		&Apache::lonxml::remember_problem_counter();
 		if ($flag_latex_header_remove eq 'NO') {
-		    $texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});  # RF
+		    $texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'},$pdfFormFields);  # RF
                     unless (($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') ||
                             (($i==0) &&
                              (($urlp=~/\.page$/) ||
@@ -3168,7 +3169,7 @@
                         }
 		    } else {
 			if ($urlp=~/$LONCAPA::assess_page_re/) {
-			    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+			    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'},$pdfFormFields);
 #			    $texversion =~ s/\\begin\{document}//; # FIXME
 			    my $title = &Apache::lonnet::gettitle($master_seq[$i]);
 			    $title = &Apache::lonxml::latex_special_symbols($title);
@@ -3254,7 +3255,7 @@
 
 	    } else {
 		$texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'},
-					 $master_seq[$i]);
+                                         $pdfFormFields,$master_seq[$i]);
 		if ($flag_latex_header_remove ne 'NO') {
 		    $texversion = &latex_header_footer_remove($texversion);
 		} else {
@@ -3352,6 +3353,7 @@
 	 $moreenv{'print_annotations'} = $helper->{'VARS'}->{'PRINT_ANNOTATIONS'};
 	 $moreenv{'problem_split'}    = $parmhash{'problem_stream_switch'};
 	 $moreenv{'suppress_tries'}   = $parmhash{'suppress_tries'};
+         $moreenv{'pdfFormFields'}    = $pdfFormFields;
 	 if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes')  ||
 	     ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) {
 	     $moreenv{'problem_split'}='yes';
@@ -3386,7 +3388,7 @@
 						     $person,$type,
 						     \%moreenv,  $actual_seq,
 						     $flag_latex_header_remove,
-						     $LaTeXwidth);
+						     $LaTeXwidth, $pdfFormFields);
 	     $resources_printed .= ":";
 	     $print_array[$i].=$output;
 	     $student_names[$i].=$person.':'.$fullname.'_END_';
@@ -3441,6 +3443,7 @@
          $moreenv{'suppress_tries'} = $parmhash{'suppress_tries'};
          $moreenv{'instructor_comments'}='hide';
          $moreenv{'bubbles_per_row'} = $bubbles_per_row;
+         $moreenv{'pdfFormFields'} = $pdfFormFields;
 	 my $seed=time+($$<<16)+($$);
 	 my @allcodes;
 	 if ($old_name) {
@@ -3512,7 +3515,7 @@
 	     my ($output,$fullname, $printed)=
 		 &print_resources($r,$helper,'anonymous',$type,\%moreenv,
 				  $actual_seq,$flag_latex_header_remove,
-				  $LaTeXwidth);
+				  $LaTeXwidth,$pdfFormFields);
 	     $resources_printed .= ":";
 	     $print_array[$file_num].=$output;
 	     &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
@@ -3561,7 +3564,7 @@
 		    if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
 			$texversion=~s/(\\keephidden\{ENDOFPROBLEM})/$answer$1/;
 		    } else {
-			$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+			$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'},$pdfFormFields);
 			if ($helper->{'VARS'}->{'construction'} ne '1') {
 			    $texversion.='\vskip 0 mm \noindent ';
 			    $texversion.=&path_to_problem ($urlp,$LaTeXwidth);
@@ -3801,7 +3804,7 @@
 
 sub print_resources {
     my ($r,$helper,$person,$type,$moreenv,$master_seq,$remove_latex_header,
-	$LaTeXwidth)=@_;
+	$LaTeXwidth,$pdfFormFields)=@_;
     my $current_output = '';
     my $printed = '';
     my ($username,$userdomain,$usersection) = split /:/,$person;
@@ -3881,7 +3884,7 @@
                     if ($res_url =~ /\.page$/) {
                         if ($remove_latex_header eq 'NO') {
                             if (!($rendered =~ /\\begin\{document\}/)) {
-                                $rendered = &print_latex_header().$rendered;
+                                $rendered = &print_latex_header('',$pdfFormFields).$rendered;
                             }
                         }
                         if ($remove_latex_header eq 'YES') {
@@ -3906,7 +3909,7 @@
 			if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
 			    $rendered=~s/(\\keephidden\{ENDOFPROBLEM})/$ansrendered$1/;
 			} else {
-			    my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+			    my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'},$pdfFormFields);
                             unless ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') {
                                 $header =~ s/\\begin\{document}//;     #<<<<<
                             }
@@ -3956,7 +3959,8 @@
 		    }
 		    $current_output .= $rendered;
 		} else {
-		    my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline);
+		    my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},
+                                                $pdfFormFields,$curresline);
 		    if ($remove_latex_header ne 'NO') {
 			$rendered = &latex_header_footer_remove($rendered);
 		    } else {
@@ -4008,7 +4012,7 @@
 	    $current_output  = &encapsulate_minipage("\\vskip -10mm \n$message\n \\vskip 100 mm { }\n",$moreenv->{'problem_split'});
         }
 	if ($remove_latex_header eq "NO") {
-	    $current_output = &print_latex_header() . $current_output;
+	    $current_output = &print_latex_header('',$pdfFormFields) . $current_output;
 	} else {
 	    $current_output = &latex_header_footer_remove($current_output);
 	}
Index: loncom/xml/londefdef.pm
diff -u loncom/xml/londefdef.pm:1.478 loncom/xml/londefdef.pm:1.479
--- loncom/xml/londefdef.pm:1.478	Fri Feb  6 19:22:16 2026
+++ loncom/xml/londefdef.pm	Fri Feb  6 20:30:07 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module
 #
-# $Id: londefdef.pm,v 1.478 2026/02/06 19:22:16 raeburn Exp $
+# $Id: londefdef.pm,v 1.479 2026/02/06 20:30:07 raeburn Exp $
 #
 #
 # Copyright Michigan State University Board of Trustees
@@ -4630,7 +4630,7 @@
 #   This sub provides the typical LaTeX prefix matter for tex output:
 #
 sub latex_header {
-    my ($mode) = @_;
+    my ($mode,$pdfforms) = @_;
     my $currentstring = '';
 
     $currentstring .=
@@ -4669,7 +4669,7 @@
 	'\usepackage{amsthm}'."\n".
 	'\usepackage{amscd}'."\n".
 	'\usepackage{actuarialangle}'."\n";
-    if($env{'form.pdfFormFields'} eq 'yes') {
+    if (($env{'form.pdfFormFields'} eq 'yes') || ($pdfforms eq 'yes')) {
         $currentstring .= '\usepackage{hyperref}'."\n".
                           '\usepackage{eforms}';
     }


More information about the LON-CAPA-cvs mailing list