textsharp: immagine in una pagina PDF, errore 91 "riferimento ad un ...

sabato 27 settembre 2008 - 13.18

ans66 Profilo | Junior Member

Sono cosapevole che l'errore e` dovuto a: Dim imjpg As iTextSharp.text.Image

dove non so come inserire "NEW" e quindi non riesco ad evitare il suddetto errore.

Di seguito le routines in questione:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Doc As iTextSharp.text.Document
Doc = New iTextSharp.text.Document
Dim ord As String = "Ordine"
Dim FilePDF As System.IO.FileStream = New System.IO.FileStream(dirDoc & "\" & ord & ".pdf", System.IO.FileMode.Create)
Dim writer1 As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(Doc, FilePDF)
Doc.Open()
Call intestazione(Doc, writer1)
End Sub

Private Sub intestazione(ByVal dc As iTextSharp.text.Document, ByVal wrt As iTextSharp.text.pdf.PdfWriter)
Dim cb1 As iTextSharp.text.pdf.PdfContentByte = wrt.DirectContent
Dim bf As iTextSharp.text.pdf.BaseFont = iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.HELVETICA, iTextSharp.text.pdf.BaseFont.CP1252, iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED)
cb1.BeginText()
cb1.SetFontAndSize(bf, 12)
cb1.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, Today.Date.ToShortDateString, 10, 820, 0)
cb1.SetColorFill(iTextSharp.text.Color.BLUE)
Dim bf2 As iTextSharp.text.pdf.BaseFont = iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.HELVETICA_BOLD, iTextSharp.text.pdf.BaseFont.CP1252, iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED)
cb1.SetFontAndSize(bf2, 18)
cb1.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_CENTER, "ORDINE NR. " & DataGridView1.Item(0, 0).Value.ToString, 250, 790, 0)
Dim imjpg As iTextSharp.text.Image
Imjpg = iTextSharp.text.Image.GetInstance(dirDoc & "\sf2.jpg")
cb1.AddImage(Imjpg, Imjpg.ScaledWidth(), 0, 0, Imjpg.ScaledHeight(), 700, 200) ====== errore ========


cb1.EndText()
dc.Close()
End Sub
End Class

freeteo Profilo | Guru

ciao,
si effettivamente non ci sono costruttori di Image per ItextSharp, devi usare un metodo statico che ti torna l'istanza dell'oggetto:
iTextSharp.text.Image miaImmagine = iTextSharp.text.Image.GetInstance(...)
il quale ha una serie di overload che coprono le svariate necessità.
In questo modo hai l'oggetto popolato, che puoi manipolare dopo.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ans66 Profilo | Junior Member

Ciao,

Grazie per la risposta...non ho capito bene come funziona esattamente la soluzione che mi hai proposto..
iTextSharp.text.Image mia immagine =iTextSharp.text.Image.GetInstance(..)

come fai a passare il valore stringa della direttrice + file a iTextSharp.text.Image ?

uso VB 2005.

Grazie

freeteo Profilo | Guru

ciao,
scusami ma in effetti riguardando il code dettagliatamente vedo che avevi già fatto il "GetInstance" per avere l'immagine,prima avevo inteso male questo fatto.
Cmq, il codice mi sembra giusto, e l'errore che hai mi sembra di capire è sul fatto che l'oggetto "Imjpg" è a null, quindi diciamo che il GetInstance ha tornato un valore nullo, ma allora forse non esiste il path che gli passi?

Verifica se esiste dirdoc + "\sf2.jpg", per capire che non sia un problema di path, magari se vuoi stare tranquillo con le "\" del path, puoi usare il codice " System.IO.Path.Combine(dirDoc,"sf2.jpg") " che ti genera il path completo sempre in maniera corretta.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ans66 Profilo | Junior Member

quasi quasi mi vergogno..mi hai dato tu l'idea di come capire dove stava l'errore. Il valore null era dovuto a Datagridview1.item(0,0).value.tostring. Ho capito questo con un Messagebox.show sul percorso che mi ha fatto vedere che il valore null veniva fuori prima del valore percorso (path).
Problema risolto...grazie tante

freeteo Profilo | Guru

>quasi quasi mi vergogno..
>dove stava l'errore. Il valore null era dovuto a Datagridview1.item(0,0).value.tostring.
ahaha ma va, l'importante è capire l'errore, ed ogni errore ha la stessa importanza, ovvero non fa andare l'applicazione, e va risolto, stupido o clamoroso che sia


>Ho capito questo con un Messagebox.show sul percorso che mi ha
>fatto vedere che il valore null veniva fuori prima del valore
>percorso (path).
bene

>Problema risolto...grazie tante
ok, se ti è stata utile, accetta una risposta così chiudiamo il thread come risolto.Grazie.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
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