From: Steinar H. Gunderson Date: Tue, 9 Aug 2005 00:39:59 +0000 (+0000) Subject: Added support for showing the last submitted PDFs in a thumbnail fashion. X-Git-Url: https://git.sesse.net/?p=webpdf;a=commitdiff_plain;h=b943073892273418899c8187f9055d7faede1a0d Added support for showing the last submitted PDFs in a thumbnail fashion. --- diff --git a/README b/README index a011536..f7c6881 100644 --- a/README +++ b/README @@ -5,7 +5,7 @@ You'll need: - A web server (I use Apache 2, with mpm-itk[1] to separate the ugliness from the rest of the server installation). - ImageMagick (http://www.imagemagick.org/). - - Perl (http://www.perl.org/), with the CGI module. + - Perl (http://www.perl.org/), with the CGI and HTML::Entities modules. - OpenOffice.org (http://www.openoffice.org/ -- doh), tested with v1.1 only. See below for special configuration needed. - GhostScript, probably almost any halfway recent version; newer ones diff --git a/createpdf.pl b/createpdf.pl index 6147e7e..f33bbc5 100755 --- a/createpdf.pl +++ b/createpdf.pl @@ -153,6 +153,22 @@ EOF exit; } +# Make a thumbnail from the finished PDF, for later reference. (Output to +# stdout is so we make sure we get only the first page; it's the simplest +# hack I can find offhand. :-) ) +system("convert -resize 192x192 output/$pdf_filename png:- > output/$pdf_filename.png"); +open DESC, ">output/$pdf_filename.desc"; + +if ($url =~ /^http/i) { + $url =~ tr/\n//d; + print DESC "$url\n"; +} else { + $filename =~ tr/\n//d; + print DESC "$filename\n"; +} + +close DESC; + my $size = -s "output/$pdf_filename"; (my $sanitized_outname = $outname) =~ tr/a-zA-Z0-9. -/_/c; diff --git a/index.html b/index.html index c23881f..0aff6ad 100644 --- a/index.html +++ b/index.html @@ -62,8 +62,9 @@ multi-gigabyte jobs etc. on it regularily I might just not be able to do that. Please be nice :-)

-

Note that there is minimal security involved; if I feel like it, I - might even take a look at what people are processing. Do not submit +

Note that there is minimal security involved; you can even look at + the last 20 submitted jobs at any time (this + is also handy for resuming a big download). Do not submit any sensitive data!

The converter is currently based on GPL diff --git a/last.pl b/last.pl new file mode 100755 index 0000000..e668edf --- /dev/null +++ b/last.pl @@ -0,0 +1,74 @@ +#! /usr/bin/perl +use CGI; +use HTML::Entities; +use POSIX; +use strict; +use warnings; +require './config.pm'; + +my $num_last = 20; + +# Find the latest N PNG thumbnails. Somewhat ineffective, but I assume +# we'll get to that later :-) +my @thumbnails = (sort { -M $a <=> -M $b } <$pdfweb::config::outputdir/*.png>); +my $real_num_last = scalar @thumbnails; +if ($real_num_last > $num_last) { + $real_num_last = $num_last; +} + +# Sorry, no HTML templating. I didn't want to pull in yet another +# dependency :-) + +print <<"EOF"; +Content-type: text/html; charset=utf-8 + + + + + + PDF converter : sesse.net + + + + + + +

Last $real_num_last uploads

+ +

Back to the converter

+EOF + +for my $t (@thumbnails[0..$num_last-1]) { + (my $descname = $t) =~ s/\.png$/.desc/; + open DESC, "<$descname" + or next; + chomp (my $desc = ); + close DESC; + + if (length($desc) > 30) { + $desc = substr $desc, 0, 30; + } + $desc = HTML::Entities::encode_entities($desc); + + my $time = (stat($t))[9]; + my $date = POSIX::strftime("%Y-%m-%d %H:%M", localtime($time)); + $t =~ s#^.*/##; + (my $pdfname = $t) =~ s/\.png$//; + + print <<"EOF"; +
+

PDF thumbnail

+

$desc

+

$date

+
+EOF +} + +print <<"EOF"; + + + + +EOF diff --git a/pdfweb.css b/pdfweb.css new file mode 100644 index 0000000..718fced --- /dev/null +++ b/pdfweb.css @@ -0,0 +1,32 @@ +.pdfthumbnail { + width: 250px; + height: 260px; + border: 1px solid black; + font-family: arial, helvetica, sans-serif; + font-size: smaller; + float: left; + margin: 1em; + background: rgb(192,192,255); +} + +.pdfthumbnail p { + margin: 0em; + text-align: center; +} +.pdfthumbnail .thumb { + height: 192px; + line-height: 192px; + margin-top: 15px; + margin-bottom: 5px; +} +.pdfthumbnail img { + border: 1px solid black; + vertical-align: middle; +} + +.copyright { + font-size: smaller; + border-top: 1px solid gray; + padding-top: 0.5em; + clear: both; +}