Ich habe einen PDF-Export, der eine Weile dauert, um das PDF zu erstellen. Ich möchte, dass der Benutzer in der Lage ist, auf den Exportlink zu klicken und sofort mit einem Download-Dialog konfrontiert wird. Auf diese Weise können sie den Download starten und einfach darauf warten, bis der Download abgeschlossen ist. Anstatt auf den Link zu klicken, warten Sie auf die Generierung und warten Sie dann erneut auf den Download.Download-Dialog wird ausgelöst, nachdem die Header empfangen wurden
Hier ist ein sehr einfaches Beispiel in PHP:
<?php
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename=test.pdf');
flush();
// time consuming PDF creation happens here
sleep(15);
echo 'pdf contents would be here';
Die Idee ist, die entsprechenden Header, flush(), um sie an den Browser zu senden, langsam die PDF erstellen und schließlich an den Browser senden.
Dies funktioniert perfekt in Chrom. Der Download-Dialog erscheint sofort und der Schlaf ist Teil der Download-Wartezeit.
In Firefox und InternetExplorer funktioniert das nicht. Diese Browser warten die vollen 15 Sekunden, bevor der Downloaddialog angezeigt wird.
Irgendeine Idee, wie man den Downloaddialog sofort erscheint, würde sehr geschätzt werden.
Das ist meine Vermutung war, auch.Ich habe das schon versucht, aber es funktioniert nicht. Nur um sicher zu sein, habe ich Ihren Code in Firefox erneut ausprobiert. Es wartet immer noch 15 Sekunden, bevor der Downloaddialog erscheint. –
@AndreasGohr Ich nehme an, dass Sie nur 'flush()' verwenden, weil Sie Ihre Ausgangspufferung bereits deaktiviert haben. Die Tatsache, dass es nicht funktioniert, bedeutet, dass Sie es nicht getan haben. Ich habe den Code aktualisiert, damit er funktioniert, unabhängig von der Konfiguration der Ausgabepufferung. – Rei
Seltsam. Du hast Recht, ich dachte, ich hätte keinen Ausgabepuffer aktiviert, aber mit deinem Zusatz funktioniert es! Danke vielmals! –