Script asp: Creare pdf dinamicamente con asp senza componenti

   difficoltà:  script script script script script

Script simili
13/11/2007


Vedremo in questo articolo come creare semplici pdf con asp senza uso di componenti dedicati. Per fare questo useremo la classe Fpdf per asp scritta da Lorenzo Abbati.
Questa classe è la 'traduzione' in asp dello script php fpdf di Olivier Plathey.
Scarichiamo quindi la classe. Avremo una cartella fpdf e un file fpdf.asp che sarà da includere nella pagina in cui utilizzeremo la classe per creare il pdf con asp.

Vediamo ora passo a passo come utilizzare la classe per creare una semplice pagina pdf con asp (vbscript).
Ecco come inizializzare e configurare l'oggetto:

<!--#include file="fpdf.asp"-->
<%
Set pdf=CreateJsObject("FPDF")
pdf.CreatePDF()
pdf.SetPath("fpdf/")
pdf.SetFont "Arial","",6
pdf.Open()
pdf.AddPage()

' qui aggiunta elementi alla pagina che vedremo in seguito

pdf.Close()
filewrite=server.mappath("/public/test.pdf")
pdf.Output(filewrite)
%>

Per prima cosa creiamo l'oggetto:
Set pdf=CreateJsObject("FPDF")
pdf.CreatePDF()

Poi settiamo il path in cui sono presenti i file necessari alla classe, tra cui i font. Questo perchè potremmo decidere di spostare la cartella fpdf da qualche altra parte:
pdf.SetPath("fpdf/")

Settiamo il carattere da utilizzare e la dimensione:
pdf.SetFont "Arial","",6

Dopo di che possiamo aprire il pdf e aggiungere una pagina nuova:
pdf.Open()
pdf.AddPage()

Dopo potremo inserire tutti gli elementi che vanno a formare la pagina che vedremo dopo. Poi chiuderemo il pdf e decideremo dove salvarlo:
pdf.Close()
filewrite=server.mappath("/public/test.pdf")
pdf.Output(filewrite)

Se decidessimo di non salvarlo ma di mostrare solo l'output al browser dell'utente basterà non specificare la posizione del file:
pdf.Output()

Vediamo ora come aggiungere elementi di base al nostro pdf. Per aggiungere un box con del testo basterà scrivere:
pdf.Cell 100,8,"testo cella",0
Creerà una cella larga 100, alta 8, con testo "testo cella", bordo 0
La sintassi corretta è:
Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, int fill [, mixed link]]]]]]])
vedi documentazione su Cell per i dettagli.

Con Cell però se il testo è più lungo della cella questo sforerà. Possiamo quindi usare MultiCell, il quale creerà celle in automatico una sotto l'altra quando il testo sarà più lungo della cella o quando nel testo sarà presente un a capo (\n).
pdf.MultiCell 100, 8, "Questo è un testo \n che va a capo"
Anche in questo caso per l'aggiunta di bordi, allineamenti o quant'altro vedere la documentazione su MultiCell.

Per finire questa panoramica di base vediamo ora come inserire immagini:
pdf.Image "/public/foto.jpg",0,0,20,20
Inseriremo un'immagine a posizione 0,0 di dimensione 20x20. Lasciando una delle dimensioni a 0 verrà calcolata in modo proporzionale.
La documentazione di Image la trovate qui.

Probabilmente tornerò sull'argomento creazione pdf in asp per l'aggiunta di altre nozioni utili, come l'aggiunta della paginazione e di un header comune a tutte le pagine.






Commenti


  Fabio

28/11/2007 0:21:31

Riporto una mail arrivatami da Walter, che puo' essere utile a tutti.


con pdf.output() nel browser appaiono i codici pdf e non direttamente il file aperto con il pdf reader.
con pdf.output(nomefile) il file pdf viene correttamente salvato sul server.
Cosa devo fare per vedere il file pdf direttamente dal browser?
Grazie.


Questo succede quando mandi al browser un output prima dello script. Non deve essere mandato alcun header al browser, ne testo, ne spazi bianchi, ne altro. Per cui se lo script ti sembra corretto controlla che tra un tag asp e l'altro non venga visto uno spazio o altro.

  Cristina

5/5/2008 10:47:11

Ciao,
ho usato questo script per creare fatture online, in filewrite assegno il numero della fattura, in modo che mi salvi ogni volta la fattura con un pdf diverso, tuttavia non lo fa, come mai? grazie in anticipo

  Lorenzo

14/5/2008 18:23:12

Ho estratto dei dati da un database, il problema è che mi visualizza una riga per pagina.
In pratica 10 ID equivalgno non a 10 righe ma a 10 pagine :(

Grazie

  Fabio

14/5/2008 20:28:27

Non è che metti nel ciclo l'aggiunta della pagina?
Nel ciclo lascia solo
pdf.Cell

e magari ogni tot Righe mettici un
pdf.AddPage()

  fabio

15/10/2008 12:17:28

salve, mi serve una mano, come estrai lorenzo dati dal bd? come realizzi i clicli condizionati? grazie

  cristiano

6/11/2008 16:08:51

Con il testo tutto OK, ma inserendo un'immagine e chiamando il metodo output per visualizzare il file nel browser acrobat mi dice: File dows not begin with '%PDF-', e non visualizza niente. Aprendo il documento creato sul server non si vede l'immagine che ho tentato di inserire. Ho provato con svariati jpeg

  Giuseppe

26/11/2008 0:39:26

Ciao Cristiano, anche io ho il tuo stesso problema, inserrendo un immagine il browser mi restituisce il messaggio "File dows not begin with '%PDF-"
Stiamo sbagliando qualcosa noi? Oppure ci sono delle limitazioni legate al tipo spazio...


  Fabio

26/11/2008 9:26:43

@cristiano, Giuseppe:
vi siete assicurati che non ci siano spazi stampati a video?
Mi spiego anche tra una chiususura e l'altra dei tag asp <% non deve esserci nulla, neanche un a capo o uno spazio

  ivan

7/1/2009 17:00:34

Io riscontro stesso problema...non c'è verso di pubblicare una immagine sul documento. HO verificato assenza di spazi o a capo, ma niente da fare. Cosa si puo fare? Grazie.

  ivan

7/1/2009 17:41:21

Dopo tre ore di tentativi svelato il problema...ve lo scrivo cosi se magari serve a qualcuno non impazzisce come me: la cartela dove mettate la vostra pagina per la creazione del pdf deve avere ovviamente(!!!) permesso di scrittura! Banale ma indispensabile.



Lascia un commento


Inserire il codice visualizzato nell'immagine*:
codice
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.