--- loncom/interface/lonprintout.pm	2010/11/13 02:04:39	1.568.2.11
+++ loncom/interface/lonprintout.pm	2010/01/12 10:40:01	1.569
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.568.2.11 2010/11/13 02:04:39 raeburn Exp $
+# $Id: lonprintout.pm,v 1.569 2010/01/12 10:40:01 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -306,16 +306,11 @@ sub set_font_size {
 
     my ($text) = @_;
 
-    # There appear to be cases where the font directive is empty.. in which
-    # case the first substituion would  insert a spurious \ oh happy day.
-    # as this has been the cause of much mystery and hair pulling _sigh_
-
-    if ($font_size ne '') {
-
-        $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/;
-    }
+    $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/;
     $text =~ s/\\end{document}/}\\end{document}/;
     return $text;
+
+
 }
 
 # include_pdf - PDF files are included into the 
@@ -499,12 +494,15 @@ sub printf_style_subst {
 #     %a    - Assignment name.
 #     %c    - Course name.
 #     %n    - Student name.
+#     %s    - The section if it is supplied.
 #
 sub format_page_header {
-    my ($width, $format, $assignment, $course, $student) = @_;
+    my ($width, $format, $assignment, $course, $student, $section) = @_;
+
+
 
     $width = &recalcto_mm($width); # Get width in mm.
-    my $chars_per_line = int($width/2);   # Character/textline.
+    my $chars_per_line = int($width/1.6);   # Character/textline.
 
     #  Default format?
 
@@ -520,36 +518,58 @@ sub format_page_header {
 	# - Allow the assignment to be 2 lines (wrapped).
 	#
 
-        my $firstline = "$student $course";
-        if (length($firstline) > $chars_per_line) {
-            my $lastchar = $chars_per_line - length($student) - 1;
-            if ($lastchar > 0) {
-                $course = substr($course, 0, $lastchar);
-            } else {            # Nothing left of course:
-                $course = '';
-            }
-        }
-        if (length($assignment) > $chars_per_line) {
-            $assignment = substr($assignment, 0, $chars_per_line);
-        }
+	
 
-        $format =  "\\textbf{$student} $course \\hfill \\thepage \\\\ \\textit{$assignment}";
+	my $name_length    = int($chars_per_line *3 /4);
+	my $sec_length     = int($chars_per_line / 5);
+
+	$format  = "%$name_length".'n';
+
+	if ($section) {
+	    $format .=  ' - Sec: '."%$sec_length".'s';
+	}
+
+	$format .= '\\\\%c \\\\ %a';
+        
 
-    } else {
-        # An open question is how to handle long user formatted page headers...
-        # A possible future is to support e.g. %na so that the user can control
-        # the truncation of the elements that can appear in the header.
-        #
-        $format =  &printf_style_subst("a", $format, $assignment);
-        $format =  &printf_style_subst("c", $format, $course);
-        $format =  &printf_style_subst("n", $format, $student);
-
-        # If the user put %'s in the format string, they  must be escaped
-        # to \% else LaTeX will think they are comments and terminate
-        # the line.. which is bad!!!
     }
+    # An open question is how to handle long user formatted page headers...
+    # A possible future is to support e.g. %na so that the user can control
+    # the truncation of the elements that can appear in the header.
+    #
+    $format =  &printf_style_subst("a", $format, $assignment);
+    $format =  &printf_style_subst("c", $format, $course);
+    $format =  &printf_style_subst("n", $format, $student);
+    $format =  &printf_style_subst("s", $format, $section);
+    
+    
+    # If the user put %'s in the format string, they  must be escaped
+    # to \% else LaTeX will think they are comments and terminate
+    # the line.. which is bad!!!
     
+    # If the user has role author, $course and $assignment are empty so
+    # there is '\\ \\ ' in the page header. That's cause a error in LaTeX
+    if($format =~ /\\\\\s\\\\\s/) {
+        #TODO find sensible caption for page header
+        my $testPrintout = '\\\\'.&mt('Construction Space').' \\\\'.&mt('Test-Printout ');
+        $format =~ s/\\\\\s\\\\\s/$testPrintout/;
+    }
+    #
+    #  We're going to trust LaTeX to break lines appropriately, but
+    #  we'll truncate anything that's more than 3 lines worth of
+    # text.  This is also assuming (which will probably end badly)
+    # nobody's going to embed LaTeX control sequences in the title
+    # header or rather that those control sequences won't get broken
+    # by the stuff below.
+    #
+    my $total_length = 3*$chars_per_line;
+    if (length($format) > $total_length) {
+	$format = substr($format, 0, $total_length);
+    }
+
+
     return $format;
+    
 }
 
 #
@@ -1245,6 +1265,8 @@ sub get_course {
     my $courseidinfo;
     if (defined($env{'request.course.id'})) {
 	$courseidinfo = &Apache::lonxml::latex_special_symbols(&unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header');
+	my $sec = $env{'request.course.sec'};
+	    
     }
     return $courseidinfo;
 }
@@ -1267,7 +1289,6 @@ sub page_format_transformation {
 
     my $name = &get_name();
     my $courseidinfo = &get_course();
-    if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
     my $header_text  = $parmhash{'print_header_format'};
     $header_text     = &format_page_header($textwidth, $header_text, $assignment,
 					   $courseidinfo, $name);
@@ -1288,13 +1309,7 @@ sub page_format_transformation {
 	    $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1}  \\vskip 5 mm\n /;
 	}
 	if ($papersize eq 'a4') {
-            my $papersize_text;
-            if ($perm{'pav'}) {
-                $papersize_text = '\\special{papersize=210mm,297mm}';
-            } else {
-                $papersize_text = '\special{papersize=210mm,297mm}';
-            }
-            $text =~ s/(\\begin{document})/$1$papersize_text/;
+	    $text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/;
 	}
     }
     if ($tableofcontents eq 'yes') {$text=~s/(\\setcounter\{page\}\{1\})/$1 \\tableofcontents\\newpage /;}
@@ -1525,9 +1540,7 @@ sub print_page_in_course {
 	my $title=&Apache::lonnet::gettitle($symb);
 	$title = &Apache::lonxml::latex_special_symbols($title);
     } else {
-        my $esc_currentURL= $currentURL;
-        $esc_currentURL =~ s/_/\\_/g;
-        $result.=$esc_currentURL;
+	$result.=$currentURL;
     }
     $result .= '\\\\';
 
@@ -1557,7 +1570,7 @@ sub print_page_in_course {
 	}
 	# these resources go through the XML transformer:
 
-	elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/)  {		
+	elsif ($resource_src =~ /\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm\xhtml|xhtm)$/)  {		
 	    my $urlp = &Apache::lonnet::clutter($resource_src);
 	    my %form;
 	    my %moreenv;
@@ -1568,7 +1581,7 @@ sub print_page_in_course {
 
 	    $form{'grade_target'}  = 'tex';
 	    $form{'textwidth'}    = &get_textwidth($helper, $LaTeXwidth);
-	    $form{'pdfFormFields'} = 'no';
+	    $form{'pdfFormFiels'} = $pdfFormFields; # 
 	    $form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'};    
 	    
 	    $form{'problem_split'}=$parmhash{'problem_stream_switch'};
@@ -1672,9 +1685,8 @@ sub print_page_in_course {
 # List of recently generated print files
 #
 sub recently_generated {
-    my ($prtspool) = @_;
-    my $output;
-
+    my $r=shift;
+    my $prtspool=$r->dir_config('lonPrtDir');
     my $zip_result;
     my $pdf_result;
     opendir(DIR,$prtspool);
@@ -1707,10 +1719,10 @@ sub recently_generated {
 	if ($ext eq 'zip') { $zip_result .= $result; }
     }
     if ($zip_result || $pdf_result) {
-        $output = '<hr />';
+        $r->print('<hr />');
     }
     if ($zip_result) {
-	$output .='<h3>'.&mt('Recently generated printout zip files')."</h3>\n"
+	$r->print('<h3>'.&mt('Recently generated printout zip files')."</h3>\n"
                   .&Apache::loncommon::start_data_table()
                   .&Apache::loncommon::start_data_table_header_row()
                   .'<th>'.&mt('Download').'</th>'
@@ -1718,10 +1730,11 @@ sub recently_generated {
                   .'<th>'.&mt('File Size (Bytes)').'</th>'
                   .&Apache::loncommon::end_data_table_header_row()
                   .$zip_result
-                  .&Apache::loncommon::end_data_table();
+                  .&Apache::loncommon::end_data_table()
+        );
     }
     if ($pdf_result) {
-	$output .='<h3>'.&mt('Recently generated printouts')."</h3>\n"
+	$r->print('<h3>'.&mt('Recently generated printouts')."</h3>\n"
                   .&Apache::loncommon::start_data_table()
                   .&Apache::loncommon::start_data_table_header_row()
                   .'<th>'.&mt('Download').'</th>'
@@ -1729,9 +1742,9 @@ sub recently_generated {
                   .'<th>'.&mt('File Size (Bytes)').'</th>'
                   .&Apache::loncommon::end_data_table_header_row()
                   .$pdf_result
-                  .&Apache::loncommon::end_data_table();
+                  .&Apache::loncommon::end_data_table()
+        );
     }
-    return $output;
 }
 
 #
@@ -1744,7 +1757,7 @@ sub recently_generated {
 #
 #
 # use Data::Dumper;
-#sub dump_helper_vars {
+# sub dump_helper_vars {
 #    my ($helper) = @_;
 #    my $helpervars = Dumper($helper->{'VARS'});
 #    &Apache::lonnet::logthis("Dump of helper vars:\n $helpervars");
@@ -1759,6 +1772,107 @@ sub get_page_breaks  {
     }
     return %page_breaks;
 }
+# 
+#   Returns text to insert for any extra vskip prior to the resource.
+#   Parameters:
+#     helper   - Reference to the helper object driving the printout.
+#     resource - Identifies the resource about to be printed.
+#
+#   This is done as follows:
+#    POSSIBLE_RESOURCES has the list of possible resources.
+#    EXTRASPACE         has the list of extra space values.
+#    
+#    The resource is found in the POSSIBLE_RESOURCES to get the index
+#    of the EXTRASPACE value.
+#
+#   In order to speed this up for lengthy printouts, the first time,
+#   POSSIBLE_RESOURCES is turned into a look up hash and
+#   EXTRASPACE is turned into an array.
+#
+
+
+my %possible_resources;
+my @extraspace;
+my $skips_loaded       = 0;
+
+#  Function to load the skips hash and array
+
+sub load_skips {
+
+    my ($helper)  = @_;
+
+    #  If this is the first time, unrap the resources and extra spaces:
+
+    if (!$skips_loaded) {
+	@extraspace = (split(/\|\|\|/, $helper->{'VARS'}->{'EXTRASPACE'}));
+	my @resource_list = (split(/\|\|\|/, $helper->{'VARS'}->{'POSSIBLE_RESOURCES'}));
+	my $i = 0;
+	foreach my $resource (@resource_list) {
+	    $possible_resources{$resource} = $i;
+	    $i++;
+	}
+	$skips_loaded = 1;
+    }
+}
+
+sub get_extra_vspaces {
+    my ($helper, $resource) = @_;
+
+    &load_skips($helper);
+
+    #  Lookup the resource in the possible resources hash.. that is the index
+    # into the extraspace array that gives us either an empty string or
+    # the number of mm to skip:
+
+    my $index = $possible_resources{$resource};
+    my $skip  = $extraspace[$index];
+
+    my $result = '';
+    if ($skip ne '') {
+	$result = '\vskip '.$skip.' mm';
+    }
+    return $result;
+
+
+}
+
+#
+#  The resource chooser part of the helper needs more than just
+#  the value of the extraspaces var to recover the value into a text
+#  field option.  This sub produces the required format for the saved var:
+#  specifically 
+#    ||| separated fields of the form resourcename=value
+#
+#  Parameters:
+#    $helper     - Refers to the helper we are configuring
+#  Implicit input:
+#     $helper->{'VARS'}->{'EXTRASPACE'}  - the spaces helper var has the text field
+#                                          value.
+#     $helper->{'VARS'}->{'POSSIBLE_RESOURCES'}  - has the list of resources. |||
+#                                          separated of course.
+#  Implicit outputs:
+#     $env{'form.extrapsace'}
+#
+sub set_form_extraspace {
+    my ($helper) = @_;
+
+    # the most convenient way to do this is to drive from the skips arrays/hash.
+    # may not be the fastest, but this is once per print request so it's not so
+    # speed critical:
+
+    &load_skips($helper);
+
+    my $result = '';
+
+    foreach my $resource (keys(%possible_resources)) {
+	my $vskip = $extraspace[$possible_resources{$resource}];
+	$result  .= $resource .'=' . $vskip . '|||';
+    }
+
+    $env{'form.extraspace'}  = $result;
+    return $result;
+    
+}
 
 #  Output a sequence (recursively if neeed)
 #  from construction space.
@@ -1930,11 +2044,12 @@ ENDPART
     # indexed by symb and contains 1's for each break.
 
     $env{'form.pagebreaks'}  = $helper->{'VARS'}->{'FINISHPAGE'};
+    &set_form_extraspace($helper);
     $env{'form.lastprinttype'} = $helper->{'VARS'}->{'PRINT_TYPE'}; 
     &Apache::loncommon::store_course_settings('print',
 					      {'pagebreaks'    => 'scalar',
+					       'extraspace'    => 'scalar',
 					       'lastprinttype' => 'scalar'});
-
     my %page_breaks  = &get_page_breaks($helper);
 
     my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
@@ -1959,7 +2074,7 @@ ENDPART
     my %form;
     $form{'grade_target'} = 'tex';
     $form{'textwidth'}    = &get_textwidth($helper, $LaTeXwidth);
-    $form{'pdfFormFields'} = 'no';
+    $form{'pdfFormFields'} = $pdfFormFields;
 
     # If form.showallfoils is set, then request all foils be shown:
     # privilege will be enforced both by not allowing the 
@@ -2198,6 +2313,7 @@ ENDPART
 		    $result.="\\newpage\n";
 		}
 	    }
+	    $result .= &get_extra_vspaces($helper, $master_seq[$i]);
 	    my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
 	    $urlp=&Apache::lonnet::clutter($urlp);
 	    $form{'symb'}=$master_seq[$i];
@@ -2213,14 +2329,7 @@ ENDPART
 		&Apache::lonxml::remember_problem_counter();
 		if ($flag_latex_header_remove eq 'NO') {
 		    $texversion.=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});  # RF
-                    unless (($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') ||
-                            (($i==0) &&
-                             (($urlp=~/\.page$/) ||
-                              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_in_page') ||
-                              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_resources_in_page')))) {
-
-		        $flag_latex_header_remove = 'YES';
-                    }
+		    $flag_latex_header_remove = 'YES';
 		}
 		$texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form);
 		if ($urlp=~/\.page$/) {
@@ -2241,22 +2350,12 @@ ENDPART
 		    &Apache::lonxml::restore_problem_counter();
 		    my $answer=&ssi_with_retries($urlp, $ssi_retry_count, %answerform);
 
-                    if ($urlp =~ /\.page$/) {
-                        $answer =~ s/\\end{document}(\d*)$//;
-                    }
 		    if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
-                        if ($urlp =~ /\.page$/) {
-                            my @probs = split(/\\keephidden{ENDOFPROBLEM}/,$texversion);
-                            my $lastprob = pop(@probs);
-                            $texversion = join('\keephidden{ENDOFPROBLEM}',@probs).
-                            $answer.'\keephidden{ENDOFPROBLEM}'.$lastprob;
-                        } else {
-                            $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
-                        }
+			$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
 		    } else {
-			if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/) {
+			if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
 			    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
-#			    $texversion =~ s/\\begin{document}//;
+			    $texversion =~ s/\\begin{document}//;
 			    my $title = &Apache::lonnet::gettitle($master_seq[$i]);
 			    $title = &Apache::lonxml::latex_special_symbols($title);
 			    my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
@@ -2286,7 +2385,6 @@ ENDPART
 		if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
 		    my $name = &get_name();
 		    my $courseidinfo = &get_course();
-		    if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
 		    $prevassignment=$assignment;
 		    my $header_text = $parmhash{'print_header_format'};
 		    $header_text    = &format_page_header($textwidth, $header_text,
@@ -2323,11 +2421,7 @@ ENDPART
 		if ($i > 0) {
 		    $result .= '\cleardoublepage';
 		}
-                my $texfrompdf = &include_pdf($urlp);
-                if ($flag_latex_header_remove ne 'NO') {
-                    $texfrompdf = &latex_header_footer_remove($texfrompdf);
-                }
-                $result .= $texfrompdf;
+		$result .= &include_pdf($urlp);
 		if ($i != $#master_seq) {
 		    if ($numberofcolumns eq '1') {
 			$result .= '\newpage';
@@ -2821,10 +2915,11 @@ sub print_resources {
 		$current_output.= "\\newpage\n";
 	    }
 	}
+	$current_output .= &get_extra_vspaces($helper, $curresline);
 	$i++;
 
 	if ( !($type eq 'problems' && 
-	       ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) ) {
+	       ($curresline!~ m/\.(problem|exam|quiz|assess|survey|form|library)$/)) ) {
 	    my ($map,$id,$res_url) = &Apache::lonnet::decode_symb($curresline);
 	    if (&Apache::lonnet::allowed('bre',$res_url)) {
 		if ($res_url!~m|^ext/|
@@ -2833,18 +2928,6 @@ sub print_resources {
 		    &Apache::lonxml::remember_problem_counter();    
 
 		    my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
-                    if ($res_url =~ /\.page$/) {
-                        if ($remove_latex_header eq 'NO') {
-                            if (!($rendered =~ /\\begin\{document\}/)) {
-                                $rendered = &print_latex_header().$rendered;
-                            }
-                        }
-                        if ($remove_latex_header eq 'YES') {
-                            $rendered = &latex_header_footer_remove($rendered);
-                        } else {
-                            $rendered =~ s/\\end{document}\d*//;
-                        }
-                    }
 		    if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
 		       ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
 			#   Use a copy of the hash so we don't pervert it on future loop passes.
@@ -2862,9 +2945,7 @@ sub print_resources {
 
 			    
 			    my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
-                            unless ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only') {
-			        $header =~ s/\\begin{document}//;     #<<<<<
-                            }
+			    $header =~ s/\\begin{document}//;     #<<<<<
 			    my $title = &Apache::lonnet::gettitle($curresline);
 			    $title = &Apache::lonxml::latex_special_symbols($title);
 			    my $body   ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
@@ -2925,21 +3006,20 @@ sub print_resources {
 	if (&Apache::loncommon::connection_aborted($r)) { last; }
     }
 
-    if ($syllabus_first) {
-        $current_output =~ s/\\\\ Last updated:/Last updated:/
-    }
+
     my $courseidinfo = &get_course();
-    if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
-    if ($usersection ne '') {$courseidinfo.=' - Sec. '.$usersection}
     my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
     my $header_line =
 	&format_page_header($LaTeXwidth, $parmhash{'print_header_format'},
-			    $currentassignment, $courseidinfo, $fullname);
+			    $currentassignment, $courseidinfo, $fullname, $usersection);
     my $header_start = ($columns_in_format == 1) ? '\lhead'
 	                                         : '\fancyhead[LO]';
     $header_line = $header_start.'{'.$header_line.'}';
-    if ($current_output=~/\\documentclass/) {
+    if ($current_output=~/\\documentclass/ && (!$syllabus_first)) {
 	$current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /;
+    } elsif ($syllabus_first) {
+
+	$current_output =~ s/\\\\ Last updated:/Last updated:/
     } else {
 	my $blankpages = 
 	    '\clearpage\strut\clearpage'x$helper->{'VARS'}->{'EMPTY_PAGES'};
@@ -3012,11 +3092,6 @@ sub init_perm {
 	$perm{'pfo'}=&Apache::lonnet::allowed('pfo',
 		  $env{'request.course.id'}.'/'.$env{'request.course.sec'});
     }
-    $perm{'vgr'}=&Apache::lonnet::allowed('vgr',$env{'request.course.id'});
-    if (!$perm{'vgr'}) {
-        $perm{'vgr'}=&Apache::lonnet::allowed('vgr',
-                   $env{'request.course.id'}.'/'.$env{'request.course.sec'});
-    }
 }
 
 sub get_randomly_ordered_warning {
@@ -3088,19 +3163,20 @@ sub printHelper {
     $helper->declareVar('PRINT_TYPE');
     $helper->declareVar("showallfoils");
     $helper->declareVar("STUDENTS");
-
+    $helper->declareVar("EXTRASPACE");
 
    
 
 
-    #  The page breaks can get loaded initially from the course environment:
+    #  The page breaks and extra spaces
+    #  can get loaded initially from the course environment:
     # But we only do this in the initial state so that they are allowed to change.
     #
 
-    # $helper->{VARS}->{FINISHPAGE} = '';
     
     &Apache::loncommon::restore_course_settings('print',
 						{'pagebreaks'  => 'scalar',
+						 'extraspace'  => 'scalar',
 					         'lastprinttype' => 'scalar'});
     
     # This will persistently load in the data we want from the
@@ -3110,10 +3186,12 @@ sub printHelper {
 	if (!defined ($env{"form.CURRENT_STATE"})) {
 	    
 	    $helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+	    $helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
 	} else {
 	    my $state = $env{"form.CURRENT_STATE"};
 	    if ($state eq "START") {
 		$helper->{VARS}->{FINISHPAGE} = $env{'form.pagebreaks'};
+		$helper->{VARS}->{EXTRASPACE} = $env{'form.extraspace'};
 	    }
 	}
 	
@@ -3232,7 +3310,12 @@ sub printHelper {
     if ($perm{'pav'}) {
 	$start_new_option = 
 	    "<option text='".&mt('Start new page<br />before selected').
-	    "' variable='FINISHPAGE' />";
+	    "' variable='FINISHPAGE' />".
+	    "<option text='".&mt('Extra space(mm)<br />before selected').
+	    "' variable='EXTRASPACE' type='text' />" .
+	    "<option " .
+	    "' variable='POSSIBLE_RESOURCES' type='hidden' />";
+
     }
 
     # If not construction space user can print the components of a page:
@@ -3410,7 +3493,7 @@ ALL_PROBLEMS
 							  'multichoice="1" addstatus="1" closeallpages="1"',
 							  'RESOURCES', 
 							  'PRINT_FORMATTING',
-							  $map,
+							  '',
 							  $isProblem, '', $symbFilter,
 							  $start_new_option);
 	$resource_selector .=  <<RESOURCE_SELECTOR;
@@ -3734,7 +3817,7 @@ CHOOSE_FROM_ANY_SEQUENCE
     my $startedTable = 0; # have we started an HTML table yet? (need
                           # to close it later)
 
-    if (($perm{'pav'} and $perm{'vgr'}) or
+    if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or 
 	($helper->{VARS}->{'construction'} eq '1')) {
 	&addMessage('<br />'
                    .'<h3>'.&mt('Print Options').'</h3>'
@@ -3980,12 +4063,10 @@ PROBTYPE
         return $helper;
     }    
 
-    my $footer;
+    $r->print($helper->display());
     if ($helper->{STATE} eq 'START') {
-	my $prtspool=$r->dir_config('lonPrtDir');
-        $footer = &recently_generated($prtspool);
+	&recently_generated($r);
     }
-    $r->print($helper->display($footer));
     &Apache::lonhelper::unregisterHelperTags();
 
     return OK;
@@ -4061,6 +4142,9 @@ sub render {
     my $PaperType=&mt('Paper type');
     my $landscape=&mt('Landscape');
     my $portrait=&mt('Portrait');
+    my $pdfFormLabel=&mt('PDF-Formfields');
+    my $with=&mt('with Formfields');
+    my $without=&mt('without Formfields');
     
 
     $result.='<h3>'.&mt('Layout Options').'</h3>'
@@ -4069,6 +4153,7 @@ sub render {
             .'<th>'.$PageLayout.'</th>'
             .'<th>'.$NumberOfColumns.'</th>'
             .'<th>'.$PaperType.'</th>'
+            .'<th>'.$pdfFormLabel.'</th>'
             .&Apache::loncommon::end_data_table_header_row()
             .&Apache::loncommon::start_data_table_row()
     .'<td>'
@@ -4108,7 +4193,12 @@ sub render {
     }
     $result .= <<HTML;
         </select>
-        <hidden name="${var}.pdfFormFields" value="no" />
+    </td>
+    <td align='center'>
+        <select name='${var}.pdfFormFields'>
+            <option selected="selected" value="no">$without</option>
+            <option value="yes">$with</option>
+        </select>
     </td>
 HTML
     $result.=&Apache::loncommon::end_data_table_row()