Frage

Ich möchte die HTML durch meine CFM-Seite in eine PDF erzeugt wenden und sich der Benutzer aufgefordert mit dem Standard „Speichern unter“ Eingabeaufforderung, wenn auf meiner Seite navigiert wird.

War es hilfreich?

Lösung

Sie sollten den cfdocument-Tag (mit format = „PDF“), um das PDF zu erzeugen, indem sie um die Seite platzieren Sie generieren. Sie werden ein Dateinamen-Attribut angeben wollen, sonst wird das Dokument nur zu Ihrem Browser direkt streamen.

Nachdem Sie den Inhalt als PDF, Verwendung cfheader und cfcontent in Kombination zur Ausgabe als Anhang der PDF-Datei gespeichert haben ( „Speichern unter“) und die Datei in den Antwortstream hinzuzufügen. Ich habe auch deleteFile = „Ja“ auf dem cfcontent Tag das Dateisystem sauber der Dateien zu halten.

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    Hello World
</body>
</html>
</cfdocument>
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf">
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes">

Als Nebenwirkung. Ich verwende nur file.pdf für den Dateinamen im Beispiel unten, aber Sie könnten einige zufällige oder Sitzung generierte Zeichenfolge verwenden möchten für den Dateinamen Probleme zu vermeiden, von Race Conditions resultierende

Andere Tipps

Wenn Sie überhaupt das PDF vermeiden speichern, mit cfdocument ohne Dateinamen wird das PDF senden (von Flashpaper) direkt an den Browser, ohne die cfheader und cfcontent verwendet wird.

Caveat: Wie bei der Verwendung von cfheader / cfcontent, müssen Sie dies tun, bevor der Cache in den Browser gespült wird, da es im Grunde ist das gleiche tun, ohne die Datei zu speichern, die

.

Um den Inhalt zu bekommen, ich wahrscheinlich cfsavecontent um die gleichen Anrufe gewickelt verwenden würde / includes / etc. dass die Seite, mit zwei wichtigen Ausnahmen erzeugen. cfdocument scheint Probleme mit externen Stylesheets zu haben, also unter Verwendung eines umfasst die Stile direkt in das Dokument zu setzen ist wahrscheinlich eine gute Idee. Sie können versuchen, eine @import stattdessen verwenden - es für manche Menschen arbeitet. Außerdem würde ich über die relativen Links zu Bildern vorsichtig sein, da sie manchmal brechen.

Der <cfdocument> Ansatz ist die sanktioniert Weg, es zu tun bekommen, aber es ist nicht alles bieten kann in der Art und Weise vorhandene PDF-Dokumente zu manipulieren. Ich hatte ein Projekt, wo ich brauchte Coupons zu generieren auf Basis unter Verwendung eines vorgefertigten, Druckauflösung PDF-Vorlage. <cfdocument> hätte ich den Ausgang annähern lassen, sondern nur mit Bitmap-Bildern in HTML eingebettet. Es stimmt, ich konnte gefälschte Druckauflösung durch ein großes Bild zu machen und es in HTML-Skalierung, aber das Original war eine schöne, saubere, Vektor-Image-Datei, und ich wollte, dass stattdessen verwenden.

Ich landete eine Kopie <cfx_pdf> mit dem Job zu erledigen. ( Entwickler Website ,

Ich bin nicht so vertraut mit Coldfusion, aber was Sie tun müssen, um den Content-Type der Seite wird eingestellt, wenn der Benutzer fordert sie application / octet-stream zu sein. Dies wird sie für einen Download prompt jedes Mal.

Hope, das hilft!

scroll top