Generare PDF con ItextSharp

mercoledì 02 dicembre 2009 - 22.41

gianbe Profilo | Newbie

Salve, ho il seguente codice :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Using System
Using System.IO

Using iTextSharp.text
Using iTextSharp.text.pdf

document = New Document()
PdfWriter.getInstance(document, New FileStream("Chap0101.pdf", FileMode.Create))
document.Open()
document.Add(New Paragraph("Hello World"))
document.Close()


End Using

End Using

End Using

End Using

End Sub

Molto semplicemente sto testando la libreria ItextSharp e al click sul Button vorrei che generasse il PDF ma mi da il seguente errore sul primo Using System:
"'System' è uno spazio dei nomi e non può essere utilizzato come espressione."
Come mai?
Grazie per la collaborazione

freeteo Profilo | Guru

Ciao,
hai sbagliato la sintassi completamente!

Non puoi usare uno "Using" (che dice al compilatore di fare riferimento anche a quel determinato Namespace, facente parte di qualche libreria referenziata, e lui sa quale) dentro a del codice, come ti dicevo è una direttiva del linguaggio ma serve fuori dai metodi.

Tu stai usando un codice vb.net ma lo using si traduce come "Imports" e soprattutto ripeto, va fuori dal metodo va nella classe, ad esempio:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

mi sa da quello che vedo che hai fatto copia-incolla di codice C# mentre tu stai lavorando con vb.net...in questi casi siccome i linguaggi sono abbastanza simili, puoi usare come "prima passata" un traduttore automatico come questo:
http://www.carlosag.net/Tools/CodeTranslator/

Però attento che il pattern "using" di C# che serve ad invokare automaticamente il dispose dell'oggetto all'uscita dalla parentesi graffa, non c'è in vb.net, quindi stai attento.
Se lo trovi, ti basta costruire le variabili normalmente, e poi a mano invocarne il dispose quando hai finito di usarle per far si che vengano rilasciate le risorse...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

gianbe Profilo | Newbie

Grazie e soprattutto complimenti per la celerità.
...avevo intuito che si trattava di C# ma essendo alle prime armi e vedendo che mi dava errore solo sul primo Using pensavo che sbagliassi la sintassi.

Ho fatto come dici tu e funziona perfettamente e ti ringrazio per il suggerimento.
Ti chiedo un'unica cosa...è possible aprire, contestualmente al click sul Button, il file pdf generato senza andare ad aprirlo dalla cartella dove è stato salvato?
Grazie ancora e alla prossima
Gianni

totti240282 Profilo | Guru

>Però attento che il pattern "using" di C# che serve ad invokare
>automaticamente il dispose dell'oggetto all'uscita dalla parentesi
>graffa, non c'è in vb.net, quindi stai attento.
>Se lo trovi, ti basta costruire le variabili normalmente, e poi
>a mano invocarne il dispose quando hai finito di usarle per far
>si che vengano rilasciate le risorse...


Forse ho capito male ,ma lo using c'è anche in vb.net e fa la stessa identica cosa.
C'è solo un capitano !!!!!!

freeteo Profilo | Guru

>Ho fatto come dici tu e funziona perfettamente e ti ringrazio
>per il suggerimento.
di niente, figurati siamo qui per questo.


>Ti chiedo un'unica cosa...è possible aprire, contestualmente
>al click sul Button, il file pdf generato senza andare ad aprirlo
>dalla cartella dove è stato salvato?
se non ho capito male tu vuoi evitare di aprire un file esistente, ma vorresti crearlo in memoria tutto per salvarlo e darlo in qualche modo all'utente (download etc...).
Se è questo che cerchi ti basta un codice di questo tipo:
Document doc = new Document(); MemoryStream ms = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(doc, ms); doc.Open(); doc.NewPage(); doc.Add(new Paragraph("Ciao ciao")); doc.Close(); //--- con i bytes ci fai quello che vuoi ad esempio: byte[] bytes = ms.ToArray(); File.WriteAllBytes("c:\\prova.pdf",bytes);

il codice è C# inquanto io programmo in questo linguaggio, ma adesso dovresti aver capito come fare a passare da uno all'altro

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

freeteo Profilo | Guru

Ciao Totti,
c'è anche in vb.net il pattern using per il dispose (ad esempio: http://www.pluralsight.com/community/blogs/fritz/archive/2005/04/28/7834.aspx)
Ma non ha lo stesso significato dello using di C# a livello di "namespace", quello si chiama "Imports" in vb.net e sta appunto fuori dai metodi...era chiaramente un errore di copia-incolla.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

totti240282 Profilo | Guru

Ok
C'è solo un capitano !!!!!!

gianbe Profilo | Newbie

Grazie ancora per la disponibilità.
La mia intenzione è quella di aprire al click sul Botton il file PDF generato.
Ho risolto aggiungendo questa riga di codice:
System.Diagnostics.Process.Start("c:\\prova.pdf")

Per adesso così mi sta bene, se hai soulzioni migliori puoi postarle.
Ciao
Gianni
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5