version 1.132, 2008/03/11 01:48:57
|
version 1.134, 2008/03/18 10:29:56
|
Line 165 END
|
Line 165 END
|
} |
} |
|
|
my %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')}; |
my %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')}; |
&Apache::lonlocal::get_language_handle(); |
&Apache::lonlocal::get_language_handle(); |
&Apache::loncommon::content_type(undef,'text/html'); |
&Apache::loncommon::content_type(undef,'text/html'); |
$env{'request.noversionuri'} = '/cgi-bin/printout.pl'; |
$env{'request.noversionuri'} = '/cgi-bin/printout.pl'; |
print(&Apache::loncommon::start_page('Creating PDF')); |
print(&Apache::loncommon::start_page('Creating PDF')); |
|
|
|
my $identifier = $ENV{'QUERY_STRING'}; |
|
my $texfile = $env{'cgi.'.$identifier.'.file'}; |
|
my $laystyle = $env{'cgi.'.$identifier.'.layout'}; |
|
my $numberofcolumns = $env{'cgi.'.$identifier.'.numcol'}; |
|
my $paper = $env{'cgi.'.$identifier.'.paper'}; |
|
my $selectionmade = $env{'cgi.'.$identifier.'.selection'}; |
|
my $tableofcontents = $env{'cgi.'.$identifier.'.tableofcontents'}; |
|
my $tableofindex = $env{'cgi.'.$identifier.'.tableofindex'}; |
|
my $advanced_role = $env{'cgi.'.$identifier.'.role'}; |
|
my $number_of_files = $env{'cgi.'.$identifier.'.numberoffiles'}+1; |
|
my $student_names = $env{'cgi.'.$identifier.'.studentnames'}; |
|
my $backref = &Apache::lonnet::unescape($env{'cgi.'.$identifier.'.backref'}); |
|
|
|
|
|
my @names_pack=(); |
|
if ($student_names=~/_END_/) { |
|
@names_pack=split(/_ENDPERSON_/,$student_names); |
|
} |
|
if ($backref) { |
|
print('<p>'.&mt("[_1]Return[_2] to editing resource.", |
|
"<a href=\"$backref\"><b>","</b></a>").'</p>'); |
|
} |
|
my $figfile = $texfile; |
|
$figfile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.dat/; |
|
my $duefile = $texfile; |
|
$duefile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.due/; |
|
|
|
|
|
#------------------------------------------------------------------------------------- |
|
# |
|
# Each print may have associated with it a file that contains a set of figures |
|
# that need to be converted to .eps from whatever form they were in when included |
|
# in the resource. The name of the figure file is in $figfile. If it exists, |
|
# it contains the names of the files that need to be converted, one per line. |
|
# |
|
|
|
if (-e $figfile) { |
|
# print "$figfile exists\n"; |
|
my %done_conversion; |
|
my $temporary_file=IO::File->new($figfile) || die "Couldn't open fig file $figfile for reading: $!\n"; |
|
my @content_of_file = <$temporary_file>; |
|
close $temporary_file; |
|
my $noteps; |
|
my %prog_state; |
|
if ($advanced_role) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Converting Images to EPS','Picture Conversion Status',$#content_of_file,'inline','80'); } |
|
print('<br />'); |
|
foreach my $not_eps (@content_of_file) { |
|
chomp($not_eps); |
|
if ($not_eps ne '') { |
|
$not_eps=~s|\/\.\/|\/|g; |
|
if (!$done_conversion{$not_eps}) { # Only convert multiple includes once. |
|
&convert_figure($not_eps); |
|
$done_conversion{$not_eps} = 1; |
|
} |
|
} |
|
} |
|
if ($advanced_role) { |
|
&Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); |
|
} |
|
unlink($figfile); |
|
} |
|
# End of figure conversion section: |
|
# |
|
#-------------------------------------------------------------------------------------------- |
|
|
|
|
my $identifier = $ENV{'QUERY_STRING'}; |
|
my $texfile = $env{'cgi.'.$identifier.'.file'}; |
|
my $laystyle = $env{'cgi.'.$identifier.'.layout'}; |
|
my $numberofcolumns = $env{'cgi.'.$identifier.'.numcol'}; |
|
my $paper = $env{'cgi.'.$identifier.'.paper'}; |
|
my $selectionmade = $env{'cgi.'.$identifier.'.selection'}; |
|
my $tableofcontents = $env{'cgi.'.$identifier.'.tableofcontents'}; |
|
my $tableofindex = $env{'cgi.'.$identifier.'.tableofindex'}; |
|
my $advanced_role = $env{'cgi.'.$identifier.'.role'}; |
|
my $number_of_files = $env{'cgi.'.$identifier.'.numberoffiles'}+1; |
|
my $student_names = $env{'cgi.'.$identifier.'.studentnames'}; |
|
my $backref = &Apache::lonnet::unescape($env{'cgi.'.$identifier.'.backref'}); |
|
|
|
|
|
my @names_pack=(); |
|
if ($student_names=~/_END_/) { |
|
@names_pack=split(/_ENDPERSON_/,$student_names); |
|
} |
|
if ($backref) { |
|
print('<p>'.&mt("[_1]Return[_2] to editing resource.", |
|
"<a href=\"$backref\"><b>","</b></a>").'</p>'); |
|
} |
|
my $figfile = $texfile; |
|
$figfile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.dat/; |
|
my $duefile = $texfile; |
|
$duefile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.due/; |
|
#do we have figures? |
|
# print "Figure file: $figfile\n"; |
|
if (-e $figfile) { |
|
# print "$figfile exists\n"; |
|
my %done_conversion; |
|
my $temporary_file=IO::File->new($figfile) || die "Couldn't open fig file $figfile for reading: $!\n"; |
|
my @content_of_file = <$temporary_file>; |
|
close $temporary_file; |
|
my $noteps; |
|
my %prog_state; |
|
if ($advanced_role) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Converting Images to EPS','Picture Conversion Status',$#content_of_file,'inline','80'); } |
|
print('<br />'); |
|
foreach my $not_eps (@content_of_file) { |
|
chomp($not_eps); |
|
if ($not_eps ne '') { |
|
# print "Converting $not_eps"; # Debugging. |
|
my $status_statement='EPS picture for '.$not_eps; |
|
# print "$status_statement\n"; |
|
$not_eps=~s|\/\.\/|\/|g; |
|
my $eps_f = $not_eps; |
|
# $eps_f =~ s/\.[^.]*$/\.eps/i; |
|
if ($eps_f=~/\/home\/([^\/]+)\/public_html\//) { |
|
$eps_f=~s/\/home\/([^\/]+)\/public_html/$1/; |
|
$eps_f = $perlvar{'lonPrtDir'}.'/'.$eps_f; |
|
} elsif ($eps_f=~/$perlvar{'lonDocRoot'}\/res\//) { |
|
$eps_f=~m/$perlvar{'lonDocRoot'}\/res\/(.+)/; |
|
$eps_f = $perlvar{'lonPrtDir'}.'/'.$1; |
|
} elsif ($eps_f=~/$perlvar{'lonUsersDir'}\//) { |
|
$eps_f=~/$perlvar{'lonUsersDir'}\/([^\/]+)\/\w\/\w\/\w\/(.+)/; |
|
$eps_f = $perlvar{'lonPrtDir'}.'/'.$1.'/'.$2; |
|
} |
|
$eps_f =~ s/ /\_/g; # Spaces are problematic for system commands and LaTeX. |
|
# |
|
# If the file is already an .eps or .ps file, |
|
# We really just need to copy it from where it was to prtspool |
|
# but with the spaces substituted to _'s. |
|
# |
|
my ($nsname,$path, $sext) = &fileparse($eps_f, qr/\.(ps|eps)/i); |
|
if ($sext =~/ps$/i) { |
|
# print "$not_eps is a postscript file. copy to $path\n"; |
|
&File::Path::mkpath($path,0,0777); |
|
#print("Made path: $path"); |
|
#$not_eps =~ s/^\s+//; |
|
#$not_eps =~ s/\s+$//; |
|
#$not_eps =~ s/ /\__/g; |
|
#print("Copying $not_eps to $eps_f\n"); |
|
copy("$not_eps", "$eps_f"); |
|
# print "Copy complete\n"; |
|
} else { |
|
|
|
$eps_f .= '.eps'; # Just append the eps ext. |
|
my $path=$eps_f; |
|
$path =~ s/\/([^\/]+)\.eps$//; |
|
# print "Final file path: $path "; # Debugging |
|
&File::Path::mkpath($path,0,0777); |
|
$not_eps =~ s/^\s+//; |
|
$not_eps =~ s/\s+$//; |
|
$not_eps =~ s/ /\\ /g; |
|
if ( exists($done_conversion{$not_eps})) { next; } |
|
if ($advanced_role) { |
|
my $prettyname=$not_eps; |
|
$prettyname=~s|/home/([^/]+)/public_html|/priv/$1|; |
|
$prettyname=~s|$perlvar{'lonDocRoot'}/|/|; |
|
&Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state, |
|
'Converting to EPS '.$prettyname); |
|
} |
|
$done_conversion{$not_eps}=1; |
|
# print "Converting $not_eps -> $eps_f"; # Debugging |
|
system("convert $not_eps $eps_f"); |
|
# check is eps exist in prtspool |
|
if (not -e $eps_f) { |
|
# converting an animated gif creates either: |
|
# anim.gif.eps.0 |
|
# or |
|
# anim.gif-0.eps |
|
for (my $i=0;$i<10000;$i++) { |
|
if (-e $eps_f.'.'.$i) { |
|
rename($eps_f.'.'.$i, $eps_f); |
|
last; |
|
} |
|
my $anim_eps = $eps_f; |
|
$anim_eps =~ s/(\.[^.]*)\.eps$/$1-$i\.eps/i; |
|
if (-e $anim_eps) { |
|
rename($anim_eps, $eps_f); |
|
last; |
|
} |
|
} |
|
} |
|
|
|
# imagemagick 6.2.0-6.2.7 fails to properly handle |
|
# convert anim.gif anim.gif.eps |
|
# it creates anim.eps instead. |
|
if (not -e $eps_f) { |
|
my $eps_f2 = $eps_f; |
|
$eps_f2 =~ s/\.[^.]*\.eps$/\.eps/i; |
|
if(-e $eps_f2) { |
|
rename($eps_f2,$eps_f); |
|
} |
|
} |
|
} |
|
|
|
} |
|
} |
|
if ($advanced_role) { |
|
&Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); |
|
} |
|
unlink($figfile); |
|
} |
|
#print "$texfile\n"; #name of the tex file for debugging only |
#print "$texfile\n"; #name of the tex file for debugging only |
my @texfile=($texfile); |
my @texfile=($texfile); |
if ($number_of_files>1) { |
if ($number_of_files>1) { |
Line 1033 sub create_missing_fonts {
|
Line 967 sub create_missing_fonts {
|
} |
} |
|
|
} |
} |
|
# |
|
# Convert a figure file to encapsulated postscript: |
|
# At present, this is using a lot of file scoped globals to pass data around. |
|
# Parameters: |
|
# not_eps - The name of the file to convert which, presumably, is not |
|
# already an eps file. |
|
# |
|
sub convert_figure { |
|
my ($not_eps) = @_; |
|
|
|
my $status_statement='EPS picture for '.$not_eps; |
|
my $eps_f = $not_eps; |
|
|
|
if ($eps_f=~/\/home\/([^\/]+)\/public_html\//) { |
|
$eps_f=~s/\/home\/([^\/]+)\/public_html/$1/; |
|
} elsif ($eps_f=~/$perlvar{'lonDocRoot'}\/res\//) { |
|
$eps_f=~ s/$perlvar{'lonDocRoot'}\/res\/(.+)/$1/; |
|
} elsif ($eps_f=~/$perlvar{'lonUsersDir'}\//) { |
|
$eps_f=~ s/$perlvar{'lonUsersDir'}\/([^\/]+)\/\w\/\w\/\w\/(.+)/$1\/$2/; |
|
} |
|
|
|
$eps_f = $perlvar{'lonPrtDir'}.'/'.$eps_f; |
|
|
|
# Spaces are problematic for system commands and LaTeX, replace with _ |
|
|
|
$eps_f =~ s/ /\_/g; |
|
|
|
# |
|
# If the file is already an .eps or .ps file (eps_f still has the original |
|
# file type), |
|
# We really just need to copy it from where it was to prtspool |
|
# but with the spaces substituted to _'s. |
|
# |
|
my ($nsname,$path, $sext) = &fileparse($eps_f, qr/\.(ps|eps)/i); |
|
if ($sext =~/ps$/i) { |
|
&File::Path::mkpath($path,0,0777); |
|
copy("$not_eps", "$eps_f"); |
|
} else { |
|
|
|
$eps_f .= '.eps'; # Just append the eps ext. |
|
my $path= &dirname($eps_f); |
|
&File::Path::mkpath($path,0,0777); |
|
$not_eps =~ s/^\s+//; |
|
$not_eps =~ s/\s+$//; |
|
$not_eps =~ s/ /\\ /g; |
|
if ($advanced_role) { |
|
my $prettyname=$not_eps; |
|
$prettyname=~s|/home/([^/]+)/public_html|/priv/$1|; |
|
$prettyname=~s|$perlvar{'lonDocRoot'}/|/|; |
|
&Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state, |
|
'Converting to EPS '.$prettyname); |
|
} |
|
system("convert $not_eps $eps_f"); |
|
|
|
if (not -e $eps_f) { |
|
# converting an animated gif creates either: |
|
# anim.gif.eps.0 |
|
# or |
|
# anim.gif-0.eps |
|
for (my $i=0;$i<10000;$i++) { |
|
if (-e $eps_f.'.'.$i) { |
|
rename($eps_f.'.'.$i, $eps_f); |
|
last; |
|
} |
|
my $anim_eps = $eps_f; |
|
$anim_eps =~ s/(\.[^.]*)\.eps$/$1-$i\.eps/i; |
|
if (-e $anim_eps) { |
|
rename($anim_eps, $eps_f); |
|
last; |
|
} |
|
} |
|
} |
|
|
|
# imagemagick 6.2.0-6.2.7 fails to properly handle |
|
# convert anim.gif anim.gif.eps |
|
# it creates anim.eps instead. |
|
if (not -e $eps_f) { |
|
my $eps_f2 = $eps_f; |
|
$eps_f2 =~ s/\.[^.]*\.eps$/\.eps/i; |
|
if(-e $eps_f2) { |
|
rename($eps_f2,$eps_f); |
|
} |
|
} |
|
} |
|
|
|
} |