--- loncom/interface/lonprintout.pm 2008/12/22 22:28:18 1.545.2.3 +++ loncom/interface/lonprintout.pm 2009/06/17 10:21:33 1.554.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.545.2.3 2008/12/22 22:28:18 raeburn Exp $ +# $Id: lonprintout.pm,v 1.554.2.1 2009/06/17 10:21:33 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,9 @@ use Apache::lonnavmaps; use Apache::admannotations; use Apache::lonenc; use Apache::entities; +use Apache::londefdef; + +use File::Basename; use HTTP::Response; @@ -67,6 +70,10 @@ my $ssi_last_error; # The error text fr my $ssi_retry_count = 5; # Some arbitrary value. +# Font size: + +my $font_size = 'normalsize'; # Default is normalsize... + # Fetch the contents of a resource, uninterpreted. # This is used here to fetch a latex file to be included @@ -111,6 +118,83 @@ sub annotate { return $result; } +# +# Set a global document font size: +# This is done by replacing \begin{document} +# with \begin{document}{\some-font-directive +# and \end{document} with +# }\end{document +# +sub set_font_size { + + my ($text) = @_; + + $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/; + $text =~ s/\\end{document}/}\\end{document}/; + return $text; + + +} + +# include_pdf - PDF files are included into the +# output as follows: +# - The PDF, if necessary, is replicated. +# - The PDF is added to the list of files to convert to postscript (along with the images). +# - The LaTeX is added to include the final converted postscript in the file as an included +# job. The assumption is that the includedpsheader.ps header will be included. +# +# Parameters: +# pdf_uri - URI of the PDF file to include. +# +# Returns: +# The LaTeX to include. +# +# Assumptions: +# The uri is actually a PDF file +# The postscript will have the includepsheader.ps included. +# +# +sub include_pdf { + my ($pdf_uri) = @_; + + # Where is the file? If not local we'll need to repcopy it:' + + my $file = &Apache::lonnet::filelocation('', $pdf_uri); + if (! -e $file) { + &Apache::lonnet::repcopy($file); + $file = &Apache::lonnet::filelocation('',$pdf_uri); + } + + # The file isn ow replicated locally.. or it did not exist in the first place + # (unlikely). If it did exist, add the pdf to the set of files/images that + # need tob e converted for this print job: + + $file =~ s|(.*)/res/|/home/httpd/html/res/|; + + open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat"); + print FILE ("$file\n"); + close (FILE); + + # Construct the special to put out. To do this we need to get the + # resulting filename after conversion. The file will have the same name + # but will be in the user's spool directory with converted images. + + my $dirname = "/home/httpd/prtspool/$env{'user.name'}/"; + my ( $base, $path, $ext) = &fileparse($file, '.pdf'); +# my $destname = $dirname.'/'.$base.'.eps'; # Not really an eps but easier in printout.pl + $base =~ s/ /\_/g; + + + my $output = &print_latex_header(); + $output .= '\special{ps: _begin_job_ (' + .$base.'.pdf.eps'. + ')run _end_job_}'; + + return $output; + + +} + # # ssi_with_retries - Does the server side include of a resource. @@ -229,9 +313,11 @@ 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. # Default format? @@ -249,34 +335,34 @@ sub format_page_header { # my $chars_per_line = $width/2; # Character/textline. - 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}"; - } 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!!! + 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'; + + } + # 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 @@ -983,6 +1069,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; } @@ -1005,7 +1093,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); @@ -1018,12 +1105,12 @@ sub page_format_transformation { $fancypagestatement="\\rhead{}\\chead{}\\lhead{$header_text}"; } if ($layout eq 'album') { - $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; + $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; } elsif ($layout eq 'book') { if ($choice ne 'All class print') { - $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/; + $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\usepackage{booktabs}\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/; } else { - $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{}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /; + $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') { $text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/; @@ -1146,41 +1233,8 @@ sub IndexCreation { sub print_latex_header { my $mode=shift; - my $output='\documentclass[letterpaper,twoside]{article}\raggedbottom'; - if (($mode eq 'batchmode') || (!$perm{'pav'})) { - $output.='\batchmode'; - } - $output.='\newcommand{\keephidden}[1]{}\renewcommand{\deg}{$^{\circ}$}'."\n". - '\usepackage{multirow}'."\n". - '\usepackage{longtable}\usepackage{textcomp}\usepackage{makeidx}'."\n". - '\usepackage[dvips]{graphicx}\usepackage{epsfig}'."\n". - '\usepackage{wrapfig}'. - '\usepackage{picins}\usepackage{calc}'."\n". - '\usepackage[T1]{fontenc}'."\n". - '\usepackage{lmodern}'."\n". - '\usepackage[postscript]{ucs}'."\n". - '\usepackage[utf8x]{inputenc}'."\n". - '\usepackage{pifont}' . "\n". - '\usepackage{latexsym}'."\n". - '\usepackage{amsmath}'. - '\usepackage{amssymb}'. - '\usepackage{amsfonts}'. - '\usepackage{amsthm}'. - '\usepackage{amscd}'. - '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}'."\n". - '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}'."\n". - '\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}'."\n". - '\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}'."\n". - '\setlength{\abovedisplayshortskip}{-0.04in}'."\n". - '\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'."\n". - '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large'."\n". - '\textbf{Index}} \newline \setlength{\rightmargin}{0in}'."\n". - '\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}'."\n". - '\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}'."\n". - '\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}'."\n". - '\setlength{\abovedisplayshortskip}{-0.04in}'."\n". - '\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}\begin{document}'."\n"; - return $output; + + return &Apache::londefdef::latex_header($mode); } sub path_to_problem { @@ -1440,7 +1494,21 @@ sub print_construction_sequence { $helper, %form, $LaTeXwidth); } - } + } + elsif ($urlp =~ /\.pdf$/i) { + my $texversion; + if ($member != 0) { + $texversion .= '\cleardoublepage'; + } + + $texversion .= &include_pdf($urlp); + $texversion = &latex_header_footer_remove($texversion); + if ($member != $#order) { + $texversion .= '\\ \cleardoublepage'; + } + + $result .= $texversion; + } } if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} return $result; @@ -1502,7 +1570,7 @@ ENDPART my ($result,$selectionmade) = ('',''); my $number_of_columns = 1; #used only for pages to determine the width of the cell my @temporary_array=split /\|/,$format_from_helper; - my ($laystyle,$numberofcolumns,$papersize)=@temporary_array; + my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array; if ($laystyle eq 'L') { $laystyle='album'; } else { @@ -1523,6 +1591,7 @@ ENDPART my %form; $form{'grade_target'} = 'tex'; $form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth); + $form{'pdfFormFields'} = $pdfFormFields; # If form.showallfoils is set, then request all foils be shown: # privilege will be enforced both by not allowing the @@ -1539,7 +1608,7 @@ ENDPART &Apache::lonnet::appenv({'construct.style' => $helper->{'VARS'}->{'style_file'}}); } elsif ($env{'construct.style'}) { - &Apache::lonnet::delenv('construct\\.style'); + &Apache::lonnet::delenv('construct.style'); } @@ -1630,6 +1699,7 @@ ENDPART + } # Print annotations. @@ -1655,7 +1725,7 @@ ENDPART && $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') { #printing content of sequence from the construction space $currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; - $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); +# $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); $result .= &print_construction_sequence($currentURL, $helper, %form, $LaTeXwidth); $result .= '\end{document}'; @@ -1673,7 +1743,7 @@ ENDPART $texversion =~ s/(\\end{document})/$annotation$1/; } $result .= $texversion; - } elsif ($cleanURL =~/.tex$/) { + } elsif ($cleanURL =~/\.tex$/) { # For this sort of print of a single LaTeX file, # We can just print the LaTeX file as it is uninterpreted in any way: # @@ -1686,6 +1756,9 @@ ENDPART $do_postprocessing = 0; # Don't massage the result. + } elsif ($cleanURL =~ /\.pdf$/i) { + $result .= &include_pdf($cleanURL); + $result .= '\end{document}'; } else { $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, $helper->{'VARS'}->{'symb'}); @@ -1779,6 +1852,7 @@ ENDPART } else { if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) { $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); + $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 '; @@ -1808,13 +1882,13 @@ 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, $assignment, $courseidinfo, $name); + if ($numberofcolumns eq '1') { $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; } else { @@ -1835,11 +1909,28 @@ ENDPART if ($flag_latex_header_remove ne 'NO') { $texversion = &latex_header_footer_remove($texversion); - } else { + } else { $texversion =~ s/\\end{document}/\\vskip 0\.5mm\\noindent\\makebox\[\\textwidth\/\$number_of_columns\]\[b\]\{\\hrulefill\}/; } $result .= $texversion; $flag_latex_header_remove = 'YES'; + } elsif ($urlp=~ /\.pdf$/i) { + if ($i > 0) { + $result .= '\cleardoublepage'; + } + $result .= &include_pdf($urlp); + if ($i != $#master_seq) { + if ($numberofcolumns eq '1') { + $result .= '\newpage'; + } else { + # the \\'s seem to be needed to let LaTeX know there's something + # on the page since LaTeX seems to not like to clear an empty page. + # + $result .= '\\ \cleardoublepage'; + } + } + $flag_latex_header_remove = 'YES'; + } else { $texversion=&unsupported($urlp,$helper->{'VARS'}->{'LATEX_TYPE'}, $master_seq[$i]); @@ -1851,7 +1942,9 @@ ENDPART $result .= $texversion; $flag_latex_header_remove = 'YES'; } - if (&Apache::loncommon::connection_aborted($r)) { last; } + if (&Apache::loncommon::connection_aborted($r)) { + last; + } } &Apache::lonxml::clear_problem_counter(); if ($flag_page_in_sequence eq 'YES') { @@ -1905,7 +1998,7 @@ ENDPART my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; #loop over students - my $flag_latex_header_remove = 'NO'; + my $flag_latex_header_remove = 'NO'; my %moreenv; $moreenv{'instructor_comments'}='hide'; $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); @@ -2151,6 +2244,11 @@ ENDPART $URLback=~s|^/~|/priv/|; } } + # + # Final adjustment of the font size: + # + + $result = set_font_size($result); #-- writing .tex file in prtspool my $temp_file; @@ -2235,7 +2333,7 @@ ENDPART # If there's been an unrecoverable SSI error, report it to the user if ($ssi_error) { my $helpurl = &Apache::loncommon::top_nav_help('Helpdesk'); - $r->print('

'.&mt('An unrecoverable network error occurred:').'

'. + $r->print('

'.&mt('An unrecoverable network error occurred:').'

'. &mt('At least one of the resources you chose to print could not be rendered due to an unrecoverable error when communicating with a server:'). '
'.$ssi_last_error_resource.'
'.$ssi_last_error. '

'.&mt('You can continue using the link provided below, but make sure to carefully inspect your output file! The errors will be marked in the file.').'
'. @@ -2342,6 +2440,7 @@ sub print_resources { my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); + $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 '; @@ -2377,7 +2476,13 @@ sub print_resources { $rendered =~ s/\\end{document}//; } $current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut '; - + } elsif($res_url = ~/\.pdf$/) { + my $url = &Apache::lonnet::clutter($res_url); + my $rendered = &include_pdf($url); + if ($remove_latex_header ne 'NO') { + $rendered = &latex_header_footer_remove($rendered); + } + $current_output .= $rendered; } else { my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline); if ($remove_latex_header ne 'NO') { @@ -2389,20 +2494,19 @@ sub print_resources { } } $remove_latex_header = 'YES'; - } + } if (&Apache::loncommon::connection_aborted($r)) { last; } } + + 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/) { $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /; } else { @@ -2500,7 +2604,6 @@ sub get_randomly_ordered_warning { return ''.$message.''; } } else { - &Apache::lonnet::logthis('Retrieval of resources to check for folders set to be randomly ordered failed - could not create navmap object'); $message = "Retrieval of information about ordering of resources failed."; return ''.$message.''; } @@ -2580,7 +2683,6 @@ sub printHelper { } - # Detect whether we're coming from construction space if ($env{'form.postdata'}=~/^(?:http:\/\/[^\/]+\/|\/|)\~([^\/]+)\/(.*)$/) { $helper->{VARS}->{'filename'} = "~$1/$2"; @@ -2697,13 +2799,12 @@ sub printHelper { } if (($helper->{'VARS'}->{'construction'} ne '1' ) && - $helper->{VARS}->{'postdata'} && $helper->{VARS}->{'assignment'}) { # Allow problems from sequence - push @{$printChoices}, [&mt('Selected Problems in folder [_1]',$sequenceTitle), 'map_problems', 'CHOOSE_PROBLEMS']; + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3]','','',''.$sequenceTitle.''), 'map_problems', 'CHOOSE_PROBLEMS']; # Allow all resources from sequence - push @{$printChoices}, [&mt('Selected Resources in folder [_1]',$sequenceTitle), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; + push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3]','','',''.$sequenceTitle.''), 'map_problems_pages', 'CHOOSE_PROBLEMS_HTML']; my $helperFragment = < @@ -2732,8 +2833,8 @@ HELPERFRAGMENT &Apache::lonxml::xmlparse($r, 'helper', $helperFragment); } - # If the user has pfo (print for otheres) allow them to print all - # problems and resources in the entier course, optionally for selected students + # If the user has pfo (print for others) allow them to print all + # problems and resources in the entire course, optionally for selected students if ($perm{'pfo'} && !$is_published && ($helper->{VARS}->{'postdata'}=~/\/res\// || $helper->{VARS}->{'postdata'}=~/\/(syllabus|smppg|aboutme|bulletinboard)$/)) { @@ -2783,8 +2884,8 @@ HELPERFRAGMENT ALL_PROBLEMS if ($helper->{VARS}->{'assignment'}) { - push @{$printChoices}, [&mt("Selected Problems from folder [_1] for selected people",$sequenceTitle), 'problems_for_students', 'CHOOSE_STUDENTS']; - push @{$printChoices}, [&mt("Selected Problems from folder [_1] for CODEd assignments",$sequenceTitle), 'problems_for_anon', 'CHOOSE_ANON1']; + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]selected people[_5]','','',''.$sequenceTitle.'','',''), 'problems_for_students', 'CHOOSE_STUDENTS']; + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from folder [_3] for [_4]CODEd assignments[_5]','','',''.$sequenceTitle.'','',''), 'problems_for_anon', 'CHOOSE_ANON1']; } my $randomly_ordered_warning = @@ -2962,8 +3063,8 @@ CHOOSE_ANON1 if ($helper->{VARS}->{'assignment'}) { - push @{$printChoices}, [&mt("Selected Resources from folder [_1] for selected people",$sequenceTitle), 'resources_for_students', 'CHOOSE_STUDENTS1']; - push @{$printChoices}, [&mt("Selected Resources from folder [_1] for CODEd assignments",$sequenceTitle), 'resources_for_anon', 'CHOOSE_ANON2']; + push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]selected people[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_students', 'CHOOSE_STUDENTS1']; + push @{$printChoices}, [&mt('Selected [_1]Resources[_2] from folder [_3] for [_4]CODEd assignments[_5]','','',''.$sequenceTitle.'','',''), 'resources_for_anon', 'CHOOSE_ANON2']; } @@ -3086,7 +3187,7 @@ CHOOSE_ANON2 ) { my $pretty_dir = &Apache::lonnet::hreflocation($subdir); - push @{$printChoices}, [&mt("Selected Problems from current subdirectory [_1]",$pretty_dir), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; + push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','','',''.$pretty_dir.'','',''), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; my $xmlfrag = < @@ -3453,12 +3554,16 @@ 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.='

'.&mt('Layout Options').'

' .&Apache::loncommon::start_data_table() .&Apache::loncommon::start_data_table_header_row() .''.$PageLayout.'' .''.$NumberOfColumns.'' .''.$PaperType.'' + .''.$pdfFormLabel.'' .&Apache::loncommon::end_data_table_header_row() .&Apache::loncommon::start_data_table_row() .'' @@ -3472,9 +3577,9 @@ sub render { my $i; for ($i = 1; $i <= $maxColumns; $i++) { if ($i == 2) { - $result .= "\n"; + $result .= ''."\n"; } else { - $result .= "\n"; + $result .= ''."\n"; } } @@ -3490,15 +3595,21 @@ sub render { $_=~/(\w+)/; my $papersize=$1; if ($paperSize[$i]=~/$DefaultPaperSize/) { - $result .= "\n"; + $result .= ''."\n"; } else { - $result .= "\n"; + $result .= ''."\n"; } $i++; } $result .= < + + + HTML $result.=&Apache::loncommon::end_data_table_row() .&Apache::loncommon::end_data_table(); @@ -3513,7 +3624,7 @@ sub postprocess { my $helper = Apache::lonhelper->getHelper(); $helper->{VARS}->{$var} = $env{"form.$var.layout"} . '|' . $env{"form.$var.cols"} . '|' . - $env{"form.$var.paper"}; + $env{"form.$var.paper"} . '|' . $env{"form.$var.pdfFormFields"}; return 1; } @@ -3625,50 +3736,36 @@ sub render { } else { $size{'margin'} += 2.54; } - my %text = ('format' => 'How should each column be formatted?', - 'width' => 'Width:', - 'height' => 'Height:', - 'margin' => 'Left Margin:',); - %text = &Apache::lonlocal::texthash(%text); - - $result .= <$text{'format'}

- - - - - - - - - - - - - - - - - -
$text{'width'} - -
$text{'height'} - -
$text{'margin'} - -
- - - -ELEMENTHTML + my %lt = &Apache::lonlocal::texthash( + 'format' => 'How should each column be formatted?', + 'width' => 'Width', + 'height' => 'Height', + 'margin' => 'Left Margin' + ); + + $result .= '

'.$lt{'format'}.'

' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'width'}) + .'' + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'height'}) + .'' + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title($lt{'margin'}) + .'' + .'' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box(); + #

Hint: Some instructors like to leave scratch space for the student by + # making the width much smaller than the width of the page.

return $result; }