Hallo
Ich möchte jetzt ebenfalls mit FPDF oder FPDI eine PDF-Datei
aus einem php-file erzeugen, und zwar so, wie dieses im
Browser dargestellt wird. Dabei sollten allerdings Links und
Bilder erhalten bleiben. D.h. eine Art Screenshot würde mir
nicht helfen!
Da …
Ich habe diesbezüglich schon einige Zeit über zich
verschiedenen Dokumentationen gesessen und (aus meiner Sicht)
nichts passendes gefunden.
gibt es meines Wissens nach nur eine einzige
freie und auch zuverlässige Möglichkeit, und zwar
dann, wenn Du CGI-Programme auf dem Server ausführen
darfst.
Das aus dem Qt-Webkit gebaute wkhtmltopdf (http://code.google.com/p/wkhtmltopdf/ )
würde über einen Link auf der Seite genau diese Seite
nochmal aufrufen und als pdf zurückliefern.
Ich mache das gelegentlich auch (aus Perl) und es
funktioniert sehr gut. Das Programm wkhtmltopdf muß
dazu in einem Verzeichnis liegen, in welchem der
Webserver Programme starten darf (z.B. /srv/web/cgi-bin).
Bei mir liegt das Programm unter /usr/local/bin, ich
hänge mal das Perl-Script an, das sollte sich weit-
gehend nach PHP übernehmen lassen:
[machpdf.pl]
use strict;
use warnings;
use Encode;
# Access mod\_perl rquest object and
my $r = shift(@\_); # get output filename from path info
(my $path\_info = $r-\>path\_info()) =~ s{^/}{};
my $hostname = $r-\>hostname();
my $prog = '/usr/local/bin/wkhtmltopdf';
my @args = (
'-q',
'--default-header',
'-B', '20mm',
'-T', '20mm',
'-R', '20mm',
'-L', '20mm',
'cover',
"http://$hostname/meine/webseite.html",
'-'
);
use Config;
use Apache2::SubProcess ();
use constant PERLIO\_IS\_ENABLED =\> $Config{useperlio};
# run program through pipe (within mod\_perl, otherwise it's simple)
my ($in\_fh, $out\_fh, $err\_fh) = $r-\>spawn\_proc\_prog($prog, \@args);
close $in\_fh;
my $pdf = undef;
if( PERLIO\_IS\_ENABLED || IO::Select-\>new($out\_fh)-\>can\_read(10) ) {
local $/;
$pdf = ; # read back generated pdf
}
close $out\_fh;
if(defined $pdf) {
binmode(STDOUT); #
print qq{Content-type: application/pdf\nContent-Disposition: inline; filename="$path\_info"\n\n};
print $pdf;
}
else {
print qq{Content-type: text/plain\n\n};
print qq{\nPDF creation failed (mod\_perl on $hostname). Please contact webmaster!\n};
}
Aufruf mit simplem Link + „PATH_INFO“ (/ausgabedatei.pdf):
a href="/perl/machpdf.pl/ausgabedatei.pdf"\>
img src="/images/pdficon.gif" />:stuck\_out\_tongue\_winking\_eye:DF-Datei/a\>
auf Deiner Seite, die Du ausgeben willst.
Dasselbe in PHP halte ich für trivial, sobald PHP auf
dem Server sowas wie exec() oder spawn() machen darf.
Vielleicht bastle ich’s mal an einem trüben Winterabend
Grüße
CMБ