Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: ZAJDAN 09. 08. 2013, 10:13:48
-
Ahojte,
experimentuju s phantomJs a základní věci se už zadařili, nyní ale řeším tento problém:
mám webpage a ta obsahuje formulář s mnoha checkboxy a poslední záložka formuláře obsahuje submit pro odeslání po kterém se načte stránka zobrazující uživatelův výběr z předchozího formuláře a tento výběr bych rád umožnil exportovat do pdf. napadlo mě že bych na stránku s výběrem bych si vytvořil proměnou a do ní zachytil aktuální url:
$request_url = apache_getenv("HTTP_HOST") . apache_getenv("REQUEST_URI");
dálel button, který by volal něco jako php exec:
exec("phantomjs /templates/new/js/pdf.js "request_url" ");
ale někde dělám něco špatně...
nemáte někdo zkušenost prosím?...děkuji
-
hoši tak tady jsem si pěkně naběhl...teď si uvědomuju že v momentě kdy formulář odešlu, tak se vyrenderuje na straně klienta, tudíž phantomjs vůbec neví co se tam zobrazilo
nenapadá nikoho nic?, jak vyrenderovat pdf v takovémto případě...
-
prostě to html co máš ( jakkoliv clientside upravený) pošleš na server kde je ten phantom?
zjednodušená ukázka:
$('#export-to-pdf').click( function() { $.post('http://phantomserver.com/phantom.php', $('html').html(), function() { .... }); });
a phantom.php
$html = $_POST['html'];
file_put_contents("tmp.html", $html);
exec("phantomjs tmp.html tmp.pdf");
$pdf = file_get_contents("tmp.pdf");
header("content-type: application/pdf");
echo $pdf;
exit;
-
Ahoj.....
to zní velmi rozumně a funkčně.....
hned jak tady dodělám grafiku která je právě z velké části obsah zmiňovaných exportů, vyzkouším
moooc děkuji za typ/radu
-
inspiroval jsi mne k něčemu co mi lítalo v hlavě, ale nedaří se mi to .....
na page která se vyrenderuje na straně klienta umístém input submit:
<input type="submit" id="export-pdf" value="send" name="submit">
dále pak script zajišťující odeslání celé page na server kde naslouchá phantom:
<script>
$('input#export-pdf').click(function(){
var html = $("body").html();
var data = { html: html };
$.post("http://server_IP/create-pdf.php", data);
});
</script>
kde ještě dělám chybu? :(
-
tcpdumpem jsem teď poslochal odchozí provoz s filtrem na destination IP kam směřuje $.post v js scriptu a když zkusím prokliknout na input(submit) #export-pdf, tak jde vidět že na odchozím trafiku letí pakety na uvedenou IP....vipadá to tedy, že k odeslání dojde, ale proč se neděje nic na straně serveru netuším.
-
zatím se mi to nepodařilo rozchodit a tak jsem si řekl, že je namístě začít analyzovat korektnost každého zápisu už samotného začátku a první věc, kterou si nejsem vůbec jist je definovaní proměné "html":
var html = $("body").html();
$(selector).html() ....nikde se nemohu dočíst kam až nahoru v DOM struktuře dokáže sáhnout selektor a vážně se obávám, že dosáhne na body a vrcholové html
po konzultaci s pár lidmi to spíše vypadá na:
var html = document.documentElement.outerHTML;
právě s tím experimentuju a zatím nemám hmatatelný výsledek, ale jsestli jsou z praxe jiné nápady prosím sem s nimi
děkuji
-
http://prntscr.com/1m4umg tohle určitě funguje..
pozor, ajaxem nejde zpracovat příchozí content-attachment. pouze response body. nestačí $.post (i když jsem ti ho pro zjednodušení napsal), ale musíš udělat standartní http request. dělá se to fíglem, že vytvoříš form, submittneš a odebereš ho:
download = function ( url, data, method ) {
data = typeof data == 'string' ? data : $.param( data );
var inputs = '';
$.each( data.split( '&' ), function () {
var pair = this.split( '=' );
inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
});
$( '<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>' ).appendTo( 'body' ).submit().remove();
};
-
Ahoj,
moc díky...
dneska jsem se vrátil z dovolené a právě to zkouším aplikovat - zatím bez výsledku, ale nejspíš to nechápu dobře...
do url jsem si dosadil adresu kde naslouchá phantom script a funkci pak volám přes button:
<script>
download = function ( 'http://.../create-pdf.php', 'data', 'method' ) {
data = typeof data == 'string' ? data : $.param( data );
var inputs = '';
$.each( data.split( '&' ), function () {
var pair = this.split( '=' );
inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
});
$( '<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>' ).appendTo( 'body' ).submit().remove();
};
</script>
<input id="click" type="button" value="create PDF" onclick="download()">
-
beru zpět:
přepsal jsem se a napsal jsem link přímo jako argument!
ten musím zapsat až kdyý funkci volám......
-
tak po kliknutí na button se naserveru v příslušném adresáři skutečně vytvoří tmp.html
otevře se i prohlížeč PDF dokumentů ovšem s hláškou "Unable to open document..No such file or directory" a pdf soubor se na serveru nevytvoří......když se podívám na soubor tmp.html má 0 Kb a nic neobsahuje...je prázdný
-
z toho evidentne vyplyva, ze nejsi schopny ani prenyst data na server, to nema s phantomem nic spolecnyho...