Créer des fichier PDF depuis une procédure stockée
Techniques
Techniques / PDF : Créer un fichier PDF depuis une procédure stockée
Original version from Masar Ivica - Visiter nos sponsors
Partie I : Créer la procédure stockée SQL2PDF.
- Un rapport dynamique au format PDF à la volée :
Si nous désirons créer une facture simple nous pouvons remplir la table psopdf avec les données qui apparaîtront sur celle-ci. Afin de générer le fichier à la volée depuis ASP nous allons utiliser des requêtes via ADO ensuite nous modifierons le type MIME de contenu de la page et renverrons vers le navgateur client le contenu du fichier PDF afin que celui puisse l'afficher...
' Le script Generate_pdf.asp
'Création de l'objet ADODB Connection
'Set cn = Server.CreateObject("ADODB.Connection")
'Remplissage de la table avec le contenu du PDF:
cn.Execute("INSERT psopdf(code) SELECT SPACE(60) + 'COMPANY LTD'"))
cn.Execute("INSERT psopdf(code) SELECT SPACE(60) + 'COMPANY ADDRESS')
cn.Execute("INSERT psopdf(code) SELECT SPACE(60) + 'STREET NAME & No')
cn.Execute("INSERT psopdf(code) SELECT ' ')
cn.Execute("INSERT psopdf(code) SELECT SPACE(34) + 'BILL OF SALE')
cn.Execute("INSERT psopdf(code) SELECT ' ')
cn.Execute("INSERT psopdf(code) SELECT 'Product' + SPACE(10) + 'Quantity'+ SPACE(10) + 'Price' + SPACE(10) + 'Total')
cn.Execute("INSERT psopdf(code) SELECT REPLACE(SPACE(56), ' ', '_'))
cn.Execute("INSERT psopdf(code) SELECT 'Product1' + SPACE(9) + '10.00 '+ SPACE(10) + '52.30' + SPACE(10) + '5230.0')
cn.Execute("INSERT psopdf(code) SELECT 'Product2' + SPACE(9) + '2.00 '+ SPACE(10) + '10.00' + SPACE(10) + ' 20.0')
cn.Execute("INSERT psopdf(code) SELECT REPLACE(SPACE(56), ' ', '_'))
cn.Execute("INSERT psopdf(code) SELECT SPACE(50) + '5250.0'))
'Maintenant nous pouvons appeler la procédure stockée
'en lui passant en argument le nom du fichier
'que nous désirons générer depuis ASP:
Set rs = Con.Execute("sql2pdf 'TEXTPDF'")
'Si nous avons un résultat,
'nous indiquons le type MIME (ici PDF) du contenu de la page
'renvoyé au navigateur client
If not rs.EOF Then
Response.buffer = true
with response
.Clear
.ContentType = "application/pdf"
.Charset = "UTF-8"
.AddHeader "Content-Disposition", _
"attachment;filename=test.pdf"
end with
'Il ne nous reste plus qu'à écrire le contenu du fichier PDF!
while not rs.EOF
response.write rs.Fields("code") & vbcrlf
rs.MoveNext
wend
'C'est bon nous pouvons stopper le script!
Response.Flush
Response.end
end if
cn.Close
'netoyage des objets en mémoire
Set cn = Nothing
'Création de l'objet ADODB Connection
'Set cn = Server.CreateObject("ADODB.Connection")
'Remplissage de la table avec le contenu du PDF:
cn.Execute("INSERT psopdf(code) SELECT SPACE(60) + 'COMPANY LTD'"))
cn.Execute("INSERT psopdf(code) SELECT SPACE(60) + 'COMPANY ADDRESS')
cn.Execute("INSERT psopdf(code) SELECT SPACE(60) + 'STREET NAME & No')
cn.Execute("INSERT psopdf(code) SELECT ' ')
cn.Execute("INSERT psopdf(code) SELECT SPACE(34) + 'BILL OF SALE')
cn.Execute("INSERT psopdf(code) SELECT ' ')
cn.Execute("INSERT psopdf(code) SELECT 'Product' + SPACE(10) + 'Quantity'+ SPACE(10) + 'Price' + SPACE(10) + 'Total')
cn.Execute("INSERT psopdf(code) SELECT REPLACE(SPACE(56), ' ', '_'))
cn.Execute("INSERT psopdf(code) SELECT 'Product1' + SPACE(9) + '10.00 '+ SPACE(10) + '52.30' + SPACE(10) + '5230.0')
cn.Execute("INSERT psopdf(code) SELECT 'Product2' + SPACE(9) + '2.00 '+ SPACE(10) + '10.00' + SPACE(10) + ' 20.0')
cn.Execute("INSERT psopdf(code) SELECT REPLACE(SPACE(56), ' ', '_'))
cn.Execute("INSERT psopdf(code) SELECT SPACE(50) + '5250.0'))
'Maintenant nous pouvons appeler la procédure stockée
'en lui passant en argument le nom du fichier
'que nous désirons générer depuis ASP:
Set rs = Con.Execute("sql2pdf 'TEXTPDF'")
'Si nous avons un résultat,
'nous indiquons le type MIME (ici PDF) du contenu de la page
'renvoyé au navigateur client
If not rs.EOF Then
Response.buffer = true
with response
.Clear
.ContentType = "application/pdf"
.Charset = "UTF-8"
.AddHeader "Content-Disposition", _
"attachment;filename=test.pdf"
end with
'Il ne nous reste plus qu'à écrire le contenu du fichier PDF!
while not rs.EOF
response.write rs.Fields("code") & vbcrlf
rs.MoveNext
wend
'C'est bon nous pouvons stopper le script!
Response.Flush
Response.end
end if
cn.Close
'netoyage des objets en mémoire
Set cn = Nothing
Voici le document final que nous devrions avoir :
Il ne nous reste plus qu'à écrire une page ASP appelant celle que nous venons d'écrire afin de proposer le téléchargement du fichier PDF.
'Le script displayLink.asp :
<html>
<head>
<title>Cliquer sur le lien pour générer un fichier PDF!</title>
</head>
<body>
<a href="Generate_pdf.asp">Télécharger le fichier PDF ici!</a>
</body>
</html>
Partie I : Créer la procédure stockée SQL2PDF.
<html>
<head>
<title>Cliquer sur le lien pour générer un fichier PDF!</title>
</head>
<body>
<a href="Generate_pdf.asp">Télécharger le fichier PDF ici!</a>
</body>
</html>