Posts
163
Comments
179
Trackbacks
5
Compilare un template PDF in ASP.NET

Dopo mesi di assenza torno a postare nel mio blog e, complice un cambio di lavoro, spero di poterlo fare più assiduamente da qui in avanti.
Bando alle ciance: in una mia applicazione ASP.NET è nata una nuova esigenza e cioè quella di consentire agli utenti la stampa in PDF di vari moduli precompilati.
Come fare? I metodi sono tanti, le librerie PDF presenti sul mercato sono innumerevoli. La soluzione che propongo in questo post è quella di usare template PDF più la libreria gratuita iTextSharp. I template PDF possono essere realizzati con un qualsiasi strumento di editing e devono solo avere una serie di field nei punti in cui dovranno essere inseriti dinamicamente i dati dell'utente.

Una volta preparati i template PDF e aggiunto un riferimento alla libreria iTextSharp, il codice necessario alla compilazione dinamica è molto semplice:

   1: Imports System
   2: Imports System.IO
   3: Imports iTextSharp.text
   4: Imports iTextSharp.text.pdf
   5: ...
   6: ...
   7: ...
   8: Private Sub Stampa()
   9:    Dim memStream As New MemoryStream
  10:    Dim pdfTemplate As String = GlobalVars.TemplatesPath & "template.pdf"
  11:    Dim pdfReader As New PdfReader(pdfTemplate)
  12:    Dim pdfStamper As New PdfStamper(pdfReader, memStream)
  13:    pdfStamper.Writer.CloseStream = False
  14:    Dim pdfFormFields As AcroFields = pdfStamper.AcroFields
  15:    ' Setto i field che voglio valorizzare sul documento PDF
  16:    ' Checkbox
  17:    pdfFormFields.SetField("Check1", "1")
  18:    pdfFormFields.SetField("Check2", "0")
  19:    ' Campi testuali
  20:    pdfFormFields.SetField("Text1", "Nome")
  21:    pdfFormFields.SetField("Text2", "Cognome")
  22:    ' Rimuovo tutti i fields
  23:    pdfStamper.FormFlattening = True
  24:    pdfStamper.Close()
  25:  
  26:    ' Faccio direttamente la response del contenuto
  27:    Response.AppendHeader("content-disposition", "attachment; filename=modulo_utente.pdf")
  28:    Response.AppendHeader("Content-Length", memStream.Length.ToString)
  29:    Response.ContentType = "application/pdf"
  30:    Response.BinaryWrite(memStream.ToArray)
  31:    Response.Flush()
  32:    memStream.Close()
  33:  End Sub


Tutto qui. Da notare che il modulo generato non viene salvato da nessuna parte ma viene "sparato" direttamente nella response.

posted on mercoledì 24 settembre 2008 14:30 Print
Comments
Gravatar
# re: Compilare un template PDF in ASP.NET
Marco Minerva
24/09/2008 15:07
Non puoi immaginare quanto il tuo post mi tornerà utile a breve... GRAZIE INFINITE!
Gravatar
# re: Compilare un template PDF in ASP.NET
Alessandro Sorcinelli
24/09/2008 15:50
Anche io ho cercato in giro per trovare strumenti gratuiti. A parte le trial di ogni cosa, non ho trovato qualcosa di gratuito.

Ho visto anche un plug-in per Word, ma anche quello a pagamento.
Gravatar
# re: Compilare un template PDF in ASP.NET
marcom
03/12/2008 01:49
e' da poco che programmo in asp.net ... vorrei sapere dove copiare la libreria itextsharp e dove reperire e come utilizzare i template pdf visto che il listato mi dà errore sulla "globalvars"
Gravatar
# re: Compilare un template PDF in ASP.NET
asorcinelli@hotmail.it
13/02/2009 01:22
Guarda io ho usato template preparati da altre persone, ma da quello che erano stati preparati con la versione full di Adobe.
Non il reader ovviamente. Non so se sia possibile farli con Word e poi esportarli in PDF.
Gravatar
# re: Compilare un template PDF in ASP.NET
chicco
19/01/2010 18:21
Ciao,

consiglio a tutti di utilizzare OpenOffice Writer per generare i template PDF: è facile e abbastanza intuitivo da utilizzare. Ricordate di dare un nome ad ogni campo che inserite perchè poi lo valorizzerete da codice.
Gravatar
# re: Compilare un template PDF in ASP.NET
asorcinelli@hotmail.it
12/07/2011 17:36
Non lo so. La mia esperienza con la iTextSharp non è andata molto avanti in questi mesi.
Comments have been closed on this topic.
News
Se volete sapere con chi avete a che fare eccomi qui in uno "scatto" lavorativo.

La mia foto

Logo MCAD
Logo MCTS