“Nommez” le pdf Web pour une meilleure sauvegarde par défaut du nom de fichier dans Acrobat?

StackOverflow https://stackoverflow.com/questions/151079

Question

Mon application génère des PDF pour la consommation de l'utilisateur. Le " Content-Disposition " L'en-tête http est défini comme indiqué ici . Ceci est défini sur "inline; filename = foo.pdf ", ce qui devrait suffire à Acrobat pour donner " foo.pdf". comme nom de fichier lors de la sauvegarde du pdf.

Toutefois, lorsque vous cliquez sur le bouton "Enregistrer". bouton dans Acrobat intégré au navigateur, le nom par défaut à enregistrer n’est pas ce nom de fichier, mais l’URL avec des barres obliques modifiée en caractères de soulignement. Énorme et moche. Existe-t-il un moyen d’affecter ce nom de fichier par défaut dans Adobe?

Il existe une chaîne de requête dans les URL, qui n’est pas négociable. Cela peut être important, mais l’ajout du " & amp; foo = / title.pdf " à la fin de l'URL n'affecte pas le nom de fichier par défaut.

Mise à jour 2: j'ai essayé les deux

content-disposition  inline; filename=foo.pdf
Content-Type         application/pdf; filename=foo.pdf

et

content-disposition  inline; filename=foo.pdf
Content-Type         application/pdf; name=foo.pdf

(comme vérifié par Firebug) Malheureusement, ni l'un ni l'autre n'a fonctionné.

Un exemple d'URL est

/bar/sessions/958d8a22-0/views/1493881172/export?format=application/pdf&no-attachment=true

qui se traduit par une sauvegarde Acrobat par défaut sous le nom de fichier

http___localhost_bar_sessions_958d8a22-0_views_1493881172_export_format=application_pdf&no-attachment=true.pdf

Mise à jour 3: Julian Reschke apporte une perspicacité et une rigueur réelles à cette affaire. S'il vous plaît upvote sa réponse. Cela semble cassé dans FF ( https://bugzilla.mozilla.org/show_bug. cgi? id = 433613 ) et IE, mais fonctionnent sous Opera, Safari et Chrome. http://greenbytes.de/tech/tc2231/#inlwithasciifilenamepdf

Était-ce utile?

La solution

Une partie du problème vient du fait que la RFC 2183 pertinente ne précise pas quoi faire avec un type de disposition de " inline " et un nom de fichier.

De plus, pour autant que je sache, le seul agent utilisateur qui utilise le nom de fichier pour type = inline est Firefox (voir scénario de test ).

Enfin, il n’est pas évident que l’API du plug-in rend ces informations disponibles (peut-être qu’un familier de l’API peut élaborer).

Cela étant dit, j'ai envoyé un pointeur sur cette question à une personne d'Adobe; peut-être que les bonnes personnes vont jeter un coup d'œil.

En relation: voir la tentative de clarification de Content-Disposition dans HTTP dans draft-reschke-rfc2183-in-http - début des travaux en cours, commentaires appréciés.

Mise à jour: j'ai ajouté un scénario de test , qui semble indiquer que le lecteur Acrobat Le plugin n’utilise pas les en-têtes de réponse (dans Firefox), bien que l’API du plugin leur donne accès.

Autres conseils

Définissez également le nom de fichier dans ContentType . Cela devrait résoudre le problème.

context.Response.ContentType = "application/pdf; name=" + fileName;
// the usual stuff
context.Response.AddHeader("content-disposition", "inline; filename=" + fileName);

Après avoir défini l'en-tête de disposition du contenu, ajoutez-en aussi un en-tête, puis utilisez binarywrite pour diffuser le fichier PDF.

context.Response.AddHeader("Content-Length", fileBytes.Length.ToString());
context.Response.BinaryWrite(fileBytes);

Comme vous, j'ai essayé et essayé de faire en sorte que cela fonctionne. Finalement, j'ai abandonné cette idée et j'ai juste opté pour une solution de contournement.

J'utilise ASP.NET MVC Framework, j'ai donc modifié les itinéraires de ce contrôleur / action pour m'assurer que le fichier PDF servi correspond à la dernière partie de la partie emplacement de l'URI (avant la chaîne de requête), et passez tout le reste dans la chaîne de requête.

Par exemple:

Ancien URI:

http: // serveur / app / report / showpdf? param1 = toto & amp; param2 = barre & nom du fichier = myreport.pdf

Nouvel URI:

http: // serveur / app / report / showpdf / myreport. pdf? param1 = toto & amp2; param2 = barre

L’en-tête résultant ressemble exactement à ce que vous avez décrit (type de contenu: application / pdf, disposition en ligne, nom de fichier faisant inutilement partie de l’en-tête). Acrobat l'affiche dans la fenêtre du navigateur (pas d'enregistrement en tant que boîte de dialogue) et le nom de fichier automatiquement renseigné lorsqu'un utilisateur clique sur le bouton Enregistrer Acrobat est le nom du fichier de rapport.

Quelques considérations:

Pour que les noms de fichiers aient une apparence correcte, ils ne doivent pas contenir de caractères d'échappement (c'est-à-dire, aucun espace, etc.) ... ce qui est un peu limitant. Mes noms de fichiers sont générés automatiquement dans ce cas et contenaient auparavant des espaces, qui apparaissaient sous la forme '% 20 dans le nom de fichier de la boîte de dialogue de sauvegarde résultant. Je viens de remplacer les espaces par des traits de soulignement, et cela a fonctionné.

Ce n’est pas la meilleure solution, mais cela fonctionne. Cela signifie également que vous devez disposer du nom de fichier pour en faire une partie de l'URI d'origine, ce qui pourrait perturber le flux de travail de votre programme. S'il est actuellement généré ou extrait d'une base de données lors de l'appel côté serveur qui génère le fichier PDF, vous devrez peut-être déplacer le code qui génère le nom de fichier vers javascript dans le cadre de la soumission d'un formulaire ou s'il provient d'une base de données. appel ajax rapide pour obtenir le nom du fichier lors de la création de l’URL qui génère le fichier PDF incorporé.

Si vous prenez le nom de fichier d'une entrée utilisateur dans un formulaire, cela doit être validé pour ne pas contenir de caractères d'échappement, ce qui gênera les utilisateurs.

L’espoir que cela aide.

Essayez de placer le nom du fichier à la fin de l'URL, avant tout autre paramètre. Cela a fonctionné pour moi. http://www.setasign.de/support/ trucs et astuces / filename-in-browser-plugin /

Dans ASP.NET 2.0, modifiez l'URL de

.
http://www. server.com/DocServe.aspx?DocId=XXXXXXX

à

http://www. server.com/DocServe.aspx/MySaveAsFileName?DocId=XXXXXXX

Cela fonctionne pour Acrobat 8 ??et le nom de fichier SaveAs par défaut est maintenant MySaveAsFileName.pdf .

Cependant, vous devez restreindre les caractères autorisés dans MySaveAsFileName (aucun point, etc.).

Le mod_rewrite d'Apache peut résoudre ce problème.

J'ai un service Web avec un noeud final à /foo/getDoc.service . Bien entendu, Acrobat enregistrera les fichiers sous le nom getDoc.pdf . J'ai ajouté les lignes suivantes dans apache.conf :

LoadModule     RewriteModule         modules/mod_rewrite.so
RewriteEngine  on
RewriteRule    ^/foo/getDoc/(.*)$    /foo/getDoc.service     [P,NE]

Maintenant, lorsque je demande /foo/getDoc/filename.pdf?bar&qux , il est réécrit en interne pour /foo/getDoc.service?bar&qux , Par conséquent, j'atteins le bon point de terminaison du service Web, mais Acrobat pense que mon fichier sera enregistré sous le nom nomfichier.pdf .

Si vous utilisez asp.net, vous pouvez contrôler le nom de fichier pdf à l'aide du nom de fichier page (url). Comme d'autres utilisateurs l'ont écrit, Acrobat est un peu s ... lorsqu'il choisit le nom du fichier pdf lorsque vous appuyez sur "Enregistrer". bouton: il prend le nom de la page, supprime l'extension et ajoute ".pdf". Donc /foo/bar/GetMyPdf.aspx donne GetMyPdf.pdf.

La seule solution que j'ai trouvée consiste à gérer "dynamique". noms de pages via un gestionnaire asp.net:

  • créer une classe qui implémente IHttpHandler
  • mapper un gestionnaire dans web.config lié à la classe

Mapping1: toutes les pages ont une base commune (MyDocument _):

<httpHandlers>  
<add verb="*" path="MyDocument_*.ashx" type="ITextMiscWeb.MyDocumentHandler"/>

Mapping2: nom de fichier totalement gratuit (besoin d'un dossier dans le chemin):

<add verb="*" path="/CustomName/*.ashx" type="ITextMiscWeb.MyDocumentHandler"/>

Quelques astuces ici (le pdf est créé dynamiquement avec iTextSharp):
http: // fhtino. blogspot.com/2006/11/how-to-show-or-download-pdf-file-from.html

Au lieu de la pièce jointe, vous pouvez essayer en ligne:

Response.AddHeader("content-disposition", "inline;filename=MyFile.pdf");

J'ai utilisé inline dans une application Web précédente qui générait une sortie Crystal Reports au format PDF et l'envoyait dans le navigateur à l'utilisateur.

Boîte de dialogue de téléchargement de fichier (PDF) avec option d’enregistrement et d’ouverture

Points à retenir:

  1. Renvoyer le flux avec la taille de matrice correcte du service
  2. Lisez le nombre d'octets dans le flux avec la longueur d'octet correcte en fonction de la longueur du flux.
  3. définir le type de contenu correct

Voici le code pour lire le flux et ouvrir la boîte de dialogue de téléchargement de fichier pour fichier PDF

private void DownloadSharePointDocument()
{
    Uri uriAddress = new Uri("http://hyddlf5187:900/SharePointDownloadService/FulfillmentDownload.svc/GetDocumentByID/1/drmfree/");
    HttpWebRequest req = WebRequest.Create(uriAddress) as HttpWebRequest;
    // Get response   
    using (HttpWebResponse httpWebResponse = req.GetResponse() as HttpWebResponse)
    {
        Stream stream = httpWebResponse.GetResponseStream();
        int byteCount = Convert.ToInt32(httpWebResponse.ContentLength);
        byte[] Buffer1 = new byte[byteCount];
        using (BinaryReader reader = new BinaryReader(stream))
        {
            Buffer1 = reader.ReadBytes(byteCount);
        }
        Response.Clear();
        Response.ClearHeaders();
        // set the content type to PDF 
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment;filename=Filename.pdf");
        Response.Buffer = true;
        Response.BinaryWrite(Buffer1);
        Response.Flush();
       // Response.End();
    }
}

Je pense que cela a déjà été mentionné dans une version ou une autre, mais je vais essayer de l'exprimer avec mes propres mots.

Plutôt que cela:

/bar/sessions/958d8a22-0/views/1493881172/export?format=application/pdf&no-attachment=true

J'utilise ceci:

/bar/sessions/958d8a22-0/views/1493881172/NameThatIWantPDFToBe.pdf?GeneratePDF=1

Plutôt que d’avoir " exporter " traiter la demande, quand une demande arrive, je cherche dans l'URL pour GeneratePDF = 1. S'il est trouvé, j'exécute le code utilisé dans " export " Plutôt que d’autoriser mon système à tenter de rechercher et de servir un fichier PDF à l’emplacement /bar/sessions/958d8a22-0/views/1493881172/NameThatIWantPDFToBe.pdf . Si GeneratePDF n'est pas trouvé dans l'URL, je transmets simplement le fichier demandé. (Notez que je ne peux pas simplement rediriger vers le fichier demandé - sinon je me retrouverais dans une boucle sans fin)

Vous pouvez toujours avoir deux liens. Un qui ouvre le document dans le navigateur et un autre pour le télécharger (avec un type de contenu incorrect). C’est ce que fait Gmail.

Pour ceux qui regardaient encore cela, j’utilisais la solution trouvée ici . a fonctionné à merveille. Merci Fabrizio!

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

function MakeFriendlyURI($URI, $ScriptName) {

/* Need to remove everything up to the script name */
$MyName = '/^.*'.preg_quote(basename($ScriptName)."/", '/').'/';
$Str = preg_replace($MyName,'',$URI);
$RequestArray = array();

/* Breaks down like this
      0      1     2     3     4     5
    PARAM1/VAL1/PARAM2/VAL2/PARAM3/VAL3
*/

$tmp = explode('/',$Str);   
/* Ok so build an associative array with Key->value
   This way it can be returned back to 

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

REQUEST = MakeFriendlyURI(

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

SERVER['PHP\_SELF'],

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

SERVER['SCRIPT_FILENAME']);

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

REQUEST or

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

REQUEST = MakeFriendlyURI(

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

SERVER['PHP\_SELF'],

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

SERVER['SCRIPT_FILENAME']);

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

GET */ for ($i=0;$i < count($tmp); $i = $i+2){ $RequestArray[$tmp[$i]] = $tmp[$i+1]; } return $RequestArray; }//EO MakeFriendlyURI

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

REQUEST = MakeFriendlyURI(

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

SERVER['PHP\_SELF'],

Voici comment j'ai résolu ce problème (avec PHP):

Supposons que votre URL est SomeScript.php? id = ID & data = DATA et que le fichier que vous souhaitez utiliser est TEST.pdf .

Modifiez l'URL en SomeScript.php / id / ID / data / DATA / EXT / TEST.pdf .

Il est important que le dernier paramètre soit le nom de fichier que vous souhaitez que Adobe utilise (le "EXT" peut concerner n'importe quoi). Assurez-vous qu'il n'y a pas de caractères spéciaux dans la chaîne ci-dessus, BTW.

Maintenant, en haut de SomeScript.php , ajoutez:

<*>

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

SERVER['SCRIPT_FILENAME']);

Ajoutez ensuite cette fonction à SomeScript.php (ou à votre bibliothèque de fonctions):

<*>

Maintenant $ _ REQUEST (ou $ _GET si vous préférez) est utilisé comme d'habitude $ _ REQUEST ['id'] , $ _REQUEST ["data"] , etc.

Et Adobe utilisera le nom de fichier souhaité comme nom de fichier par défaut pour enregistrer sous ou par courrier électronique lors de son envoi en ligne.

J'ai été redirigé ici parce que j'ai le même problème. J'ai aussi essayé la solution de contournement de Troy Howard, mais cela ne semble pas fonctionner.

L’approche que j’ai faite sur celui-ci consiste à NE PLUS utiliser d’objet réponse pour écrire le fichier à la volée. Étant donné que le fichier PDF existe déjà sur le serveur, ce que j'ai fait est de rediriger ma page vers ce fichier PDF. Fonctionne très bien.

http://forums.asp.net/t/143631.aspx

J'espère que mes explications vagues vous ont donné une idée.

Crédits à Vivek .

Nginx

location /file.pdf
{
    # more_set_headers "Content-Type: application/pdf; name=save_as_file.pdf";
    add_header Content-Disposition "inline; filename=save_as_file.pdf";
    alias /var/www/file.pdf;
}

Vérifier avec

curl -I https://example.com/file.pdf

Firefox 62.0b5 (64 bits): OK.

Chrome 67.0.3396.99 (64 bits): OK.

IE 11: aucun commentaire.

Essayez ceci si votre exécutable est "get.cgi"

http: //server,org/get.cgi/fichier .pdf? file = nomfichier.pdf

Oui, c'est complètement fou. Il n’existe pas de fichier appelé "nomfichier.pdf". sur le serveur, il existe un répertoire sous l'exécutable get.cgi.

Mais cela semble fonctionner. Le serveur ignore le nom de fichier filename.pdf et le lecteur de pdf ignore le fichier "get.cgi".

Dan

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top