Domanda

Vorrei trasformare l'HTML generato dalla mia pagina CFM in un PDF e chiedere all'utente di visualizzare il messaggio standard "Salva con nome" quando naviga nella mia pagina.

È stato utile?

Soluzione

Dovresti utilizzare il tag cfdocument (con format="PDF") per generare il PDF posizionandolo attorno alla pagina che stai generando.Ti consigliamo di specificare un attributo del nome file, altrimenti il ​​documento verrà semplicemente trasmesso in streaming direttamente al tuo browser.

Dopo aver salvato il contenuto come PDF, utilizza cfheader e cfcontent in combinazione per generare il PDF come allegato ("Salva con nome") e aggiungere il file al flusso di risposta.Ho anche aggiunto deletefile="Yes" al tag cfcontent per mantenere il file system pulito dai file.

<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">

Per inciso:Sto semplicemente utilizzando file.pdf per il nome del file nell'esempio seguente, ma potresti voler utilizzare una stringa casuale o generata dalla sessione per il nome del file per evitare problemi derivanti dalle condizioni di competizione.

Altri suggerimenti

Se vuoi evitare del tutto di memorizzare il PDF, utilizzando cfdocument senza un nome file invierà il pdf (di flashpaper) direttamente al browser senza utilizzare cfheader e cfcontent.

Avvertimento:Come con l'utilizzo di cfheader/cfcontent, è necessario farlo prima che la cache venga scaricata nel browser, poiché sostanzialmente fa la stessa cosa senza dover archiviare il file.

Per ottenere il contenuto, probabilmente utilizzerei cfsavecontent racchiuso attorno alle stesse chiamate/include/ecc.che generano la pagina, con due importanti eccezioni.cfdocument sembra avere problemi con i fogli di stile esterni, quindi utilizzare un include per inserire gli stili direttamente nel documento è probabilmente una buona idea.Puoi provare a utilizzare un @import invece: funziona per alcune persone.Inoltre, farei attenzione ai collegamenti relativi alle immagini, poiché a volte possono rompersi.

IL <cfdocument> è il modo autorizzato per farlo, tuttavia non offre tutto il possibile in termini di manipolazione dei documenti PDF esistenti.Avevo un progetto in cui dovevo generare coupon utilizzando un modello PDF pre-progettato con risoluzione di stampa. <cfdocument> mi avrebbe permesso di approssimare l'output, ma solo con immagini bitmap incorporate in HTML.È vero, avrei potuto falsificare la risoluzione di stampa creando un'immagine di grandi dimensioni e ridimensionandola in HTML, ma l'originale era un file di immagine vettoriale carino e pulito e volevo invece usarlo.

Ho finito per usare una copia di <cfx_pdf> per portare a termine il lavoro.(Sito dello sviluppatore, Negozio di etichette CF) È un wrapper CF attorno a una libreria PDF Java che consente di manipolare documenti PDF esistenti, inclusa la compilazione di moduli PDF, l'impostazione di autorizzazioni, l'unione di file, il disegno di grafica vettoriale, tabelle e testo, l'utilizzo di caratteri personalizzati, ecc. Ecc.Se sei disposto a lavorarci, puoi ottenere risultati davvero spettacolari.

L'unico inconveniente è che sembra che lo sviluppatore abbia lasciato questo prodotto inutilizzato per molto tempo.Il sito dello sviluppatore è ancora protetto da copyright 2003 e non menziona nulla oltre ColdFusion MX 6.1.Alla fine ho dovuto rompere alcuni dei modelli crittografati per correggere un paio di bug e farlo funzionare come ne avevo bisogno.Si tratta comunque di uno strumento potente.

Non ho molta familiarità con ColdFusion, ma quello che devi fare è impostare il tipo di contenuto della pagina quando l'utente richiede che sia application/octet-stream.Ciò richiederà loro di effettuare un download ogni volta.

Spero che questo ti aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top