--- loncom/interface/lonprintout.pm 2008/10/02 17:12:18 1.543
+++ loncom/interface/lonprintout.pm 2009/08/03 11:01:14 1.560
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.543 2008/10/02 17:12:18 raeburn Exp $
+# $Id: lonprintout.pm,v 1.560 2009/08/03 11:01:14 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
@@ -97,7 +104,7 @@ sub fetch_raw_resource {
sub annotate {
my ($symb) = @_;
- my $annotation_text = &Apache::admannotations::get_annotation($symb, 1);
+ my $annotation_text = &Apache::loncommon::get_annotation($symb, 1);
my $result = "";
@@ -111,9 +118,86 @@ 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.
#
-# ssi_with_retries - Does the server side include of a resource.
+# 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.
# if the ssi call returns an error we'll retry it up to
# the number of times requested by the caller.
# If we still have a proble, no text is appended to the
@@ -146,6 +230,10 @@ sub annotate {
sub ssi_with_retries {
my ($resource, $retries, %form) = @_;
+ my $target = $form{'grade_target'};
+ my $aom = $form{'answer_output_mode'};
+
+
my ($content, $response) = &Apache::loncommon::ssi_with_retries($resource, $retries, %form);
if (!$response->is_success) {
@@ -860,6 +948,7 @@ sub old_character_chart {
$result =~ s/&(rdquo|#8221);/\'\'/g;
+
return $result;
}
@@ -1021,12 +1110,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}/;
@@ -1149,41 +1238,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 {
@@ -1254,6 +1310,180 @@ sub unsupported {
return $result;
}
+#
+# Map from helper layout style to the book/album:
+#
+sub map_laystyle {
+ my ($laystyle) = @_;
+ if ($laystyle eq 'L') {
+ $laystyle='album';
+ } else {
+ $laystyle='book';
+ }
+ return $laystyle;
+}
+
+sub print_page_in_course {
+ my ($helper, $rparmhash, $currentURL, $resources) = @_;
+ my %parmhash = %$rparmhash;
+ my @page_resources = @$resources;
+ my $mode = $helper->{'VARS'}->{'LATEX_TYPE'};
+ my $symb = $helper->{'VARS'}->{'symb'};
+
+
+ my $format_from_helper = $helper->{'VARS'}->{'FORMAT'};
+
+
+ my @temporary_array=split /\|/,$format_from_helper;
+ my ($laystyle,$numberofcolumns,$papersize,$pdfFormFields)=@temporary_array;
+ $laystyle = &map_laystyle($laystyle);
+ my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,
+ $numberofcolumns);
+ my $LaTeXwidth=&recalcto_mm($textwidth);
+
+
+ if ($mode ne '') {$mode='\\'.$mode}
+ my $result.= &print_latex_header($mode);
+ if ($currentURL=~m|^(/adm/wrapper/)?ext/|) {
+ $currentURL=~s|^(/adm/wrapper/)?ext/|http://|;
+ my $title=&Apache::lonnet::gettitle($symb);
+ $title = &Apache::lonxml::latex_special_symbols($title);
+ } else {
+ $result.=$currentURL;
+ }
+ $result .= '\\\\';
+
+ if ($helper->{'VARS'}->{'style_file'}=~/\w/) {
+ &Apache::lonnet::appenv({'construct.style' =>
+ $helper->{'VARS'}->{'style_file'}});
+ } elsif ($env{'construct.style'}) {
+ &Apache::lonnet::delenv('construct.style');
+ }
+
+ # First is the overall page description. This is then followed by the
+ # components of the page. Each of which must be printed independently.
+
+ my $the_page = shift(@page_resources);
+
+ foreach my $resource (@page_resources) {
+ my $resource_src = $resource->src(); # Essentially the URL of the resource.
+ $result .= $resource->title() . '\\\\';
+
+ # Recurse if a .page:
+
+ if ($resource_src =~ /.page$/i) {
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my @page_resources = $navmap->retrieveResources($resource_src);
+ $result .= &print_page_in_course($helper, $rparmhash,
+ $resource_src, \@page_resources);
+ }
+ # these resources go through the XML transformer:
+
+ 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;
+
+ &Apache::lonxml::remember_problem_counter();
+ $moreenv{'request.filename'}=$urlp;
+ if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {$form{'problemtype'}='exam';}
+
+ $form{'grade_target'} = 'tex';
+ $form{'textwidth'} = &get_textwidth($helper, $LaTeXwidth);
+ $form{'pdfFormFiels'} = $pdfFormFields; #
+ $form{'showallfoils'} = $helper->{'VARS'}->{'showallfoils'};
+
+ $form{'problem_split'}=$parmhash{'problem_stream_switch'};
+ $form{'suppress_tries'}=$parmhash{'suppress_tries'};
+ $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+ $form{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'};
+ $form{'print_annotations'}=$helper->{'VARS'}->{'PRINT_ANNOTATIONS'};
+ if (($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') ||
+ ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes')) {
+ $form{'problem_split'}='yes';
+ }
+ my $rndseed = time;
+ if ($helper->{'VARS'}->{'curseed'}) {
+ $rndseed=$helper->{'VARS'}->{'curseed'};
+ }
+ $form{'rndseed'}=$rndseed;
+ &Apache::lonnet::appenv(\%moreenv);
+
+ &Apache::lonxml::clear_problem_counter();
+
+ my $texversion = &ssi_with_retries($urlp, $ssi_retry_count, %form);
+
+ # There seems to be an extraneous \vskip 1mm \\\\ :
+
+ $texversion =~ s/^\\vskip 1mm \\\\\\\\//;
+
+ # current document with answers.. no need to encap in minipage
+ # since there's only one answer.
+
+ if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
+ ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
+ my %answerform = %form;
+
+
+ $answerform{'problem_split'}=$parmhash{'problem_stream_switch'};
+ $answerform{'grade_target'}='answer';
+ $answerform{'answer_output_mode'}='tex';
+ $answerform{'rndseed'}=$rndseed;
+ if ($helper->{'VARS'}->{'probstatus'} eq 'exam') {
+ $answerform{'problemtype'}='exam';
+ }
+ $resources_printed .= $urlp.':';
+ my $answer=&ssi_with_retries($urlp,$ssi_retry_count, %answerform);
+
+ if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
+ $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
+ } else {
+ $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+ if ($helper->{'VARS'}->{'construction'} ne '1') {
+ my $title = &Apache::lonnet::gettitle($helper->{'VARS'}->{'symb'});
+ $title = &Apache::lonxml::latex_special_symbols($title);
+ $texversion.='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm ';
+ $texversion.=&path_to_problem($urlp,$LaTeXwidth);
+ } else {
+ $texversion.='\vskip 0 mm \noindent\textbf{Prints from construction space - there is no title.}\vskip 0 mm ';
+ my $URLpath=$urlp;
+ $URLpath=~s/~([^\/]+)/public_html\/$1\/$1/;
+ $texversion.=&path_to_problem($URLpath,$LaTeXwidth);
+ }
+ $texversion.='\vskip 1 mm '.$answer.'\end{document}';
+ }
+
+
+
+
+
+ }
+ # Print annotations.
+
+
+ if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
+ my $annotation .= &annotate($currentURL);
+ $texversion =~ s/(\\keephidden{ENDOFPROBLEM})/$annotation$1/;
+ }
+
+ if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
+ $texversion=&IndexCreation($texversion,$currentURL);
+ }
+ if ($helper->{'VARS'}->{'CONSTR_RESOURSE_URL'} eq 'yes') {
+ $texversion=~s/(\\addcontentsline\{toc\}\{subsection\}\{[^\}]*\})/$1 URL: \\verb|$currentURL| \\strut\\\\\\strut /;
+
+ }
+ $result .= $texversion;
+ if ($currentURL=~m/\.page\s*$/) {
+ ($result,$numberofcolumns) = &page_cleanup($result);
+ }
+ }
+ }
+
+ $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}';
+ return $result;
+}
+
#
# List of recently generated print files
@@ -1281,20 +1511,43 @@ sub recently_generated {
$cuid,$cgid,$crdev,$csize,
$catime,$cmtime,$cctime,
$cblksize,$cblocks)=stat($prtspool.'/'.$filename);
- my $result="".
- &mt('Generated [_1] ([_2] bytes)',
- &Apache::lonlocal::locallocaltime($cctime),$csize).
- '
';
+ my $ext_text = 'pdf' ? &mt('PDF File'):&mt('Zip File');
+ my $result=&Apache::loncommon::start_data_table_row()
+ .'
\n$msg\n
\n"); @@ -1483,11 +1759,8 @@ ENDPART 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,$pdfFormFields)=@temporary_array; - if ($laystyle eq 'L') { - $laystyle='album'; - } else { - $laystyle='book'; - } + + $laystyle = &map_laystyle($laystyle); my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$laystyle,$numberofcolumns); my $assignment = $env{'form.assignment'}; my $LaTeXwidth=&recalcto_mm($textwidth); @@ -1520,7 +1793,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'); } @@ -1541,7 +1814,7 @@ ENDPART } $selectionmade = 1; if ($cleanURL!~m|^/adm/| - && $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { + && $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) { my $rndseed=time; my $texversion=''; if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { @@ -1611,6 +1884,7 @@ ENDPART + } # Print annotations. @@ -1633,10 +1907,12 @@ ENDPART ($result,$number_of_columns) = &page_cleanup($result); } } elsif ($cleanURL!~m|^/adm/| - && $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') { + && $currentURL=~/\.(sequence|page)$/ && $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}'; @@ -1654,7 +1930,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: # @@ -1667,7 +1943,21 @@ ENDPART $do_postprocessing = 0; # Don't massage the result. + } elsif ($cleanURL =~ /\.pdf$/i) { + $result .= &include_pdf($cleanURL); + $result .= '\end{document}'; + } elsif ($cleanURL =~ /\.page$/i) { # Print page in non construction space contexts. + + # Determine the set of resources in the map of the page: + + my $navmap = Apache::lonnavmaps::navmap->new(); + my @page_resources = $navmap->retrieveResources($cleanURL); + $result .= &print_page_in_course($helper, $rparmhash, + $cleanURL, \@page_resources); + + } else { + &Apache::lonnet::logthis("Unsupported type handler"); $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, $helper->{'VARS'}->{'symb'}); } @@ -1738,6 +2028,7 @@ ENDPART &Apache::lonxml::remember_problem_counter(); $texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form); if ($urlp=~/\.page$/) { + ($texversion,my $number_of_columns_page) = &page_cleanup($texversion); if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} $texversion =~ s/\\end{document}\d*/\\end{document}/; @@ -1760,6 +2051,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 '; @@ -1795,6 +2087,7 @@ ENDPART $assignment, $courseidinfo, $name); + if ($numberofcolumns eq '1') { $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; } else { @@ -1815,11 +2108,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]); @@ -1831,7 +2141,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') { @@ -1885,7 +2197,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); @@ -2131,6 +2443,11 @@ ENDPART $URLback=~s|^/~|/priv/|; } } + # + # Final adjustment of the font size: + # + + $result = set_font_size($result); #-- writing .tex file in prtspool my $temp_file; @@ -2215,7 +2532,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(' '.
+ $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.').'
'.
@@ -2300,7 +2617,6 @@ sub print_resources {
if ($res_url!~m|^ext/|
&& $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
$printed .= $curresline.':';
-
&Apache::lonxml::remember_problem_counter();
my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
@@ -2322,6 +2638,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 ';
@@ -2357,7 +2674,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') {
@@ -2369,9 +2692,11 @@ sub print_resources {
}
}
$remove_latex_header = 'YES';
- }
+ }
if (&Apache::loncommon::connection_aborted($r)) { last; }
}
+
+
my $courseidinfo = &get_course();
my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header');
my $header_line =
@@ -2380,7 +2705,6 @@ sub print_resources {
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 {
@@ -2464,17 +2788,22 @@ sub get_randomly_ordered_warning {
my $postdata = $env{'form.postdata'} || $helper->{VARS}{'postdata'};
my $navmap = Apache::lonnavmaps::navmap->new();
- my $res = $navmap->getResourceByUrl($map);
- if ($res) {
- my $func =
- sub { return ($_[0]->is_map() && $_[0]->randomorder); };
- my @matches = $navmap->retrieveResources($res, $func,1,1,1);
- if (@matches) {
- $message = "Some of the items below are in folders set to be randomly ordered. However, when printing the contents of these folders, they will be printed in the original order for all students, not the randomized order.";
- }
- }
- if ($message) {
- return '
");
+ &addMessage(&Apache::lonhtmlcommon::end_pick_box());
}
Apache::lonprintout::page_format_state->new("FORMAT");
@@ -3397,31 +3780,31 @@ sub render {
my $pdfFormLabel=&mt('PDF-Formfields');
my $with=&mt('with Formfields');
my $without=&mt('without Formfields');
- $result .= < ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
$startedTable = 1;
+
+#
+# Select font size.
+#
+
+ $helper->declareVar('fontsize');
+ &addMessage(&Apache::lonhtmlcommon::row_title(&mt('Font Size')));
+ my $xmlfrag = << "FONT_SELECTION";
+
+
+ ".
- ': ");
+ &addMessage('
'
+ .''.&mt('Print Options').'
'
+ .&Apache::lonhtmlcommon::start_pick_box()
+ .&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'ANSWER_TYPE';
$helper->declareVar('ANSWER_TYPE');
@@ -3141,8 +3472,36 @@ CHOOSE_FROM_ANY_SEQUENCE
['Only Answers', 'only']
];
Apache::lonhelper::dropdown->new();
- addMessage("");
$startedTable = 1;
} else {
- addMessage(" ".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
}
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'LATEX_TYPE';
@@ -3172,10 +3533,13 @@ CHOOSE_FROM_ANY_SEQUENCE
}
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
if (not $helper->{VARS}->{'construction'}) {
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure()
+ .&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'TABLE_CONTENTS';
$helper->declareVar('TABLE_CONTENTS');
@@ -3183,13 +3547,15 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes'] ];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'TABLE_INDEX';
$helper->declareVar('TABLE_INDEX');
@@ -3197,11 +3563,13 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes'] ];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
# Prompt for printing annotations too.
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = 'PRINT_DISCUSSIONS';
$helper->declareVar('PRINT_DISCUSSIONS');
@@ -3209,14 +3577,16 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes'] ];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure());
- addMessage("".
- ': ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(
+ ''
+ )
+ );
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'variable'} = "PRINT_ANNOTATIONS";
$helper->declareVar("PRINT_ANNOTATIONS");
@@ -3224,16 +3594,16 @@ CHOOSE_FROM_ANY_SEQUENCE
['No', 'no'],
['Yes', 'yes']];
Apache::lonhelper::dropdown->new();
- addMessage(" ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure(1));
}
if ($helper->{'VARS'}->{'construction'}) {
@@ -3242,32 +3612,44 @@ CHOOSE_FROM_ANY_SEQUENCE
my $stylefiletext=&mt("Use style file");
my $selectfiletext=&mt("Select style file");
- my $xmlfrag .= <<"RNDSEED";
- ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(&mt('Foils')));
$paramHash = Apache::lonhelper::getParamHash();
$paramHash->{'multichoice'} = "true";
$paramHash->{'allowempty'} = "true";
$paramHash->{'variable'} = "showallfoils";
- $paramHash->{'CHOICES'} = [ ["Show all foils", "1"] ];
+ $paramHash->{'CHOICES'} = [ [&mt('Show All Foils'), "1"] ];
Apache::lonhelper::choices->new();
- addMessage("
- :
-
-
- :
-
+ my $xmlfrag .= '
+ ");
+ &addMessage(&Apache::lonhtmlcommon::row_closure(1));
- }
+
+
+ }
}
if ($startedTable) {
- addMessage("Problem Type: ");
+ &addMessage(&Apache::lonhtmlcommon::row_title(&mt('Problem Type')));
#
# Initial value from construction space:
#
@@ -3285,17 +3667,18 @@ RNDSEED
PROBTYPE
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag);
-
- addMessage("
-
HTML
+ $result.=&Apache::loncommon::end_data_table_row()
+ .&Apache::loncommon::end_data_table();
return $result;
}
@@ -3543,12 +3927,8 @@ sub render {
my ($laystyle, $cols, $papersize) = split(/\|/, $format);
($papersize) = split(/ /, $papersize);
+ $laystyle = &Apache::lonprintout::map_laystyle($laystyle);
- if ($laystyle eq 'L') {
- $laystyle = 'album';
- } else {
- $laystyle = 'book';
- }
my %size;
@@ -3577,50 +3957,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 .= <
-
- $PageLayout
- $NumberOfColumns
- $PaperType
- $pdfFormLabel
-
-
-
-
-
-
-
$text{'width'} | -- |
- |
-
$text{'height'} | -- |
- |
-
$text{'margin'} | -- |
- |
-
'.$lt{'format'}.'
' + .&Apache::lonhtmlcommon::start_pick_box() + .&Apache::lonhtmlcommon::row_title($lt{'width'}) + .'' + .'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; } @@ -3643,11 +4009,8 @@ sub preprocess { ($papersize) = split(/ /, $papersize); - if ($laystyle eq 'L') { - $laystyle = 'album'; - } else { - $laystyle = 'book'; - } + $laystyle = &Apache::lonprintout::map_laystyle($laystyle); + # Figure out some good defaults for the print out and set them: my %size;