2012-02-15 5 views
1

J'ai besoin d'un moyen de générer dynamiquement un pdf à partir du document coldfusion actuellement ouvert. Mais je n'ai aucune idée de la façon de gérer cela, car je n'ai pas trouvé le moyen de passer le texte courant (html) à une fonction qui génère le pdf en utilisant la balise cfdocument.Générer un pdf à partir du document courant

Des astuces ou des idées, comment résoudre ce problème?

+0

Utilisez-vous un cadre particulier (Fusebox, CF on Wheels, etc ...)? –

Répondre

1

Plutôt que de capturer le corps de réponse actuel, vous pouvez utiliser l'attribut "src" de cfdocument pour demander la page en cours via une demande d'auto-référencement interne.

au sein Application.cfc:

<cffunction name="onRequestStart"> 

    <cfif IsDefined("url.showAsPDF") AND 
     url.showAsPDF IS "true" AND 
     cgi.http_user_agent IS NOT "ColdFusion"> 

    <cfset myURL = 
     "http" & 
     (IsDefined('CGI.HTTPS') AND CGI.HTTPS IS "On") ? "s" : "") & 
     "://#cgi.server_name#:#cgi.SERVER_PORT##cgi.script_name#?#cgi.query_string#"> 

    <cfdocument src="#myURL#" format="PDF"></cfdocument><cfabort> 

    </cfif> 
</cffunction> 

Cela recherchera la présence d'un paramètre d'URL nommé "showAsPDF". Quand il est défini et défini sur "true", ce code prendra le relais et exécutera la même requête en interne, acheminée via un appel à cfdocument. La réponse sera ensuite produite en tant que document PDF.

1

Vous pouvez générer un pdf de HTML de base en utilisant cfpdf

Vous pouvez même spécifier votre cfdocument comme source pour cfpdf:

<cfpdf action="write" source="someCfDocument" destination="myBook1.pdf" overwrite="yes"> 

Exemple sans cfdocument:

<cfpdf action="write" destination="myBook1.pdf" overwrite="yes"> 
    <p>My dynamic html goes here</p> 
</cfpdf> 
3

I a fait quelque chose comme ça avant:

<cfsavecontent variable="pdf"> 
    <table> 
     ...lots of html and CF code ... 
    </table>  

</cfsavecontent> 

<cfdocument format="PDF" encryption="NONE"> 
    <cfdocumentsection> 
    <cfoutput>#pdf#</cfoutput> 
     <cfdocumentitem type="footer"> 
     <cfoutput> 
      #cfdocument.currentpagenumber# of #cfdocument.totalpagecount# 
     </cfoutput> 
     </cfdocumentitem> 
</cfdocumentsection> 
</cfdocument> 
Questions connexes