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.

  Salvo

6/10/2010 15:22:59

Ciao a tutti.
Come faccio a caricarmi nella pagina pdf i dati che richiamo da un database sql server, dove li metto? Dove e come faccio la query?
GRAZIE A TUTTI COLORO CHE VOLESSERO COLMARE LA MIA IGNORANZA.

  Roger

17/10/2010 15:24:51

La stringa pdf.image da me non funziona

  Luke

29/4/2013 0:04:53

sto impazzendo un pochino con questo script, anche perchè non esiste più il sito con i tutorial e manuali.
2 i miei problemi irrisolti:
1) pdf.cell non permette di dare le coordinate di partenza della cella, quindi l'allineamente risulta complicato. Qualche suggerimento?
2) pdf.Output mi restituisce solo "Caricamento del documento PDF non riuscito". Il PDF tuttavia è stato salvato perfettamente.

Non so se ancora qualcuno segue questa pagina, ma ringrazio chiuque possa darmi una mano, anche solo indicandomi dove trovare le guide dello script.

Grazie


  Luke

29/4/2013 1:02:44

Piccolo update: ho risolto il problema degli allineamenti, tuttavia ho ancora problemi a visualizzare il file online. Quali sono i parametri ?

Grazie

  AJC

27/5/2014 10:10:12

Ciao Luke, prova a modificare il file fpdf.asp dalla riga 871 a quelle successive che coinvolgono la visualizzazione online e il download del file pdf, che a me dava errori, modificando il codice ho risolto.

  Livio

11/4/2015 10:10:59

Volevo ringraziare Ivan, per il problema delle immagini con cui stavo impazzendo e sopratutto perdendo ore di lavoro.
Grazie Ivan: essere tornato sul forum per condividere la conoscenza con altri, e non, una volta risolto il problema esserti fatto gli affari tuoi, è un esempio di senso della comunità.
Come vedi, anche a 6 anni di distanza, il tuo post è stato ancora utile, e sicuramente non solo a me.



Lascia un commento


Codice di controllo*:
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.