Vygenerování a stažení PDF přes AJAX

n.u.r.v.
Člen | 485
+
0
-

Ahoj, v mém projektu generuji PDF přes mpdf (funguje) a teď bych potřeboval vygenerovat PDF přes ajax a nevím jak na to…

Potřebuji:
1)user v tabulce nakliká položky pro export do pdf – mám
2)po kliku se pošle ajaxem json seznamem vybraných položek – mám
3)handle metoda v prezenteru obdrží data, načte položky z db a spustí generování mpdf – mám (php script pro generování končí $mpdf->Output(‚Seznam vybraných položek.pdf‘, ‚D‘);)
4)a teď nevím jak to poslat zpět do browseru tak, aby se vygenerovaný PDF nabídl ke stažení

PDF nechci ukládat na disk…

Takto posílám ajax požadavek:

$(document).on('click', '#gen_pdf', function (ev) {
        ev.preventDefault();
        if (jsonString != '') {
            $.getJSON(this.href, {
                json: jsonString
            })
                    .done(function (payload) {
                        if (payload.snippets) {
                            for (var id in payload.snippets) {
                                $('#' + id).html(payload.snippets[id]);
                            }
                        }

                    });
        } else {
            alert("Musíte vybrat alespoň jednu položku v tabulce!");
        }
    });

Díky za radu…

poznámka: PDF generuji v repository, ne v presenteru

David Matějka
Moderator | 6445
+
+3
-

neres to AJAXem, ale uzivatele primo nasmeruj na ten signal, pripadne to naklikavani a tlacitko na export udelej jako formular

n.u.r.v.
Člen | 485
+
+1
-

aha, ok, zkusím to tím formulářem a dám vědět…díky

Edit: díky – funguje to přes ten formulář… Takže vyřešeno

Editoval n.u.r.v. (2. 8. 2017 15:01)

Šaman
Člen | 2632
+
0
-

@n.u.r.v. : Můžeš ukázat jak? Teď řeším odesílání souboru poté, co si ve formuláři naklikám nějaká nastavení. Bez ajaxu to funguje, když nastavím ajaxové odeslání, tak už to nefunguje. Také přes $mpdf->Output()

n.u.r.v.
Člen | 485
+
0
-

@Šaman : Ahoj, koukám do historie a zjistil jsem, že se to nakonec předělalo na to ukládání souboru, takže teď to mám tak že si user nakliká co a jak chce exportovat, já z toho udělám nějaký json formát a ajaxem pošlu. Na serveru se vygeneruje a uloží soubor a já pak ajaxu pošlu cestu pro stažení souboru.. JS pak jen usera přesměruje do nového tabu kde se mu spustí stahování souboru…

Musel jsem to tak udělat, protože vznikl požadavek na historii vygenerovaných souborů…

Co mě tak v rychlosti napadá jak to udělat u tebe, tak že ajaxem odešleš formulář, po odeslání si z toho vytáhneš data a uložíš do session a pak jen pomocí js otevřeš url pro generování souboru a podle dat v session vygeneruješ PDF a klasicky pošleš přes output…

Ale možná někdo poradí lepší řešení…

Šaman
Člen | 2632
+
0
-

Díky. Já jsem zatím zrušil Ajax u toho jednoho formuláře. Nechci se nějak moc vrtat do JS, doufal jsem, že na to je nějaké standardní Nette (nette.ajax.js) řešení.