43 messaggi dal 22 ottobre 2007
Ciao,

sto seguendo questo tutorial:
http://www.aspsnippets.com/Articles/Export-GridView-To-Word-Excel-PDF-CSV-Formats-in-ASP.Net.aspx
per fare l'export del contenuto della tabella in vari formati.
Per excel e word, tutto ok.
Mentre per il PDF, al click del button, ho il seguente problema:

Impossibile eseguire il cast di oggetti di tipo 'iTextSharp.text.html.simpleparser.CellWrapper' sul tipo 'iTextSharp.text.Paragraph'.

Alla riga:
htmlparser.Parse(sr)

Questo il mio codice:
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.text.html
Imports iTextSharp.text.html.simpleparser

...

Protected Sub bttPdf_Click(ByVal sender As Object, ByVal e As EventArgs) Handles bttPdf.Click
        Response.ContentType = "application/pdf"
        Response.AddHeader("content-disposition", "attachment;filename=report_grid.pdf")
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Dim s_w As StringWriter = New StringWriter
        Dim h_w As HtmlTextWriter = New HtmlTextWriter(s_w)
        GridView1.AllowPaging = False
        GridView1.DataBind()
        GridView1.RenderControl(h_w)
        GridView1.HeaderRow.Style.Add("width", "15%")
        GridView1.HeaderRow.Style.Add("font-size", "10px")
        GridView1.Style.Add("text-decoration", "none")
        GridView1.Style.Add("font-family", "Arial, Helvetica, sans-serif;")
        GridView1.Style.Add("font-size", "8px")
        Dim sr As StringReader = New StringReader(s_w.ToString)
        Dim pdfDoc As Document = New Document(PageSize.A2, 7.0!, 7.0!, 7.0!, 0.0!)
        Dim htmlparser As HTMLWorker = New HTMLWorker(pdfDoc)
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
        pdfDoc.Open()
        htmlparser.Parse(sr)
        pdfDoc.Close()
        Response.Write(pdfDoc)
        Response.End()


    End Sub

Modificato da luis_figo il 29 aprile 2013 10.36 -
3.939 messaggi dal 28 gennaio 2003
Ho seguito l'articolo. Usando una mia tabella con due campi, il codice funziona.
Se solo si tenta di aumentare la complessità della pagina, il parser html non funziona e dà quell'errore.

Secondo me è dovuto al fatto che il parser è davvero semplice e fa solo cose elementari.
Io lascerei perdere questo approccio e creerei la tabella con iTextSharp, ex novo.
102 messaggi dal 26 maggio 2009
Ciao,

ho avuto lo stesso problema e ho risolto cosi!!!

    Protected Sub btnEsportaElencoGiorno_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEsportaElencoGiorno.Click

        SqlDataSource1.SelectCommand = "SELECT ID_Agenda_Sale, Sala, Data_Prenotazione, LEFT(CONVERT(varchar, Data_Prenotazione, 1), 2) AS Mese, DATEPART(yyyy,Data_Prenotazione) AS Anno, CONVERT(VARCHAR(5),Ora_Prenotazione_Inizio,108) AS Ora_Prenotazione_Inizio, CONVERT(VARCHAR(5),Ora_Prenotazione_Fine,108) AS Ora_Prenotazione_Fine, Titolo FROM [AgendaSale] ORDER BY [Data_Prenotazione] ASC, [ID_Agenda_Sale] DESC"
        Filtra()
        grvLista.DataBind()

        Dim table As New iTextSharp.text.pdf.PdfPTable(grvLista.Columns.Count)
        table.WidthPercentage = 95
        For i As Integer = 0 To grvLista.Rows.Count - 1
            Dim widths As Integer() = {30, 75, 40, 40, 200, 250, 0, 0}
            'CREA LA RIGA DI INTESTAZIONE
            Dim Giorno_OLD As String
            If grvLista.Rows(i).Cells(1).Text <> Giorno_OLD Then
                Dim cellTextGiorno As String = Server.HtmlDecode(grvLista.Rows(i).Cells(1).Text)
                Dim fntBoldTextGiorno As Font = FontFactory.GetFont(FontFactory.HELVETICA, 12, Font.BOLD)
                Dim cellGiorno As iTextSharp.text.pdf.PdfPCell = New iTextSharp.text.pdf.PdfPCell(New Phrase(Server.HtmlDecode("&nbsp;&nbsp;" + UCase(Left(WeekdayName(Weekday(cellTextGiorno, vbMonday), False, vbMonday), 1)) & LCase(Right(WeekdayName(Weekday(cellTextGiorno, vbMonday), False, vbMonday), Len(WeekdayName(Weekday(cellTextGiorno, vbMonday), False, vbMonday)) - 1)) + ""), fntBoldTextGiorno))
                cellGiorno.Colspan = 8
                cellGiorno.BackgroundColor = New BaseColor(System.Drawing.Color.Silver)
                'cellGiorno.Padding = "3"
                table.AddCell(cellGiorno)
                Giorno_OLD = grvLista.Rows(i).Cells(1).Text
            End If
            'CREA LE CELLE
            For x As Integer = 0 To grvLista.Columns.Count - 1
                Dim cellText As String = Server.HtmlDecode(grvLista.Rows(i).Cells(x).Text)
                Dim cell As iTextSharp.text.pdf.PdfPCell = New iTextSharp.text.pdf.PdfPCell(New Phrase(cellText))
                'cell.Padding = "3"
                table.AddCell(cell)
            Next
            table.SetWidths(widths)
        Next

        Dim pdfDoc As New Document(PageSize.A4, 10.0F, 10.0F, 10.0F, 10.0F)
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
        pdfDoc.Open()

        Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(Server.MapPath("../../allegati/TemplatePDF/header.jpg"))
        image.ScalePercent(25.0F)
        image.Alignment = Element.ALIGN_CENTER
        pdfDoc.Add(image)

        Dim Spazio As String = "<br>"
        For Each element As IElement In HTMLWorker.ParseToList(New StringReader(Spazio), New StyleSheet)
            pdfDoc.Add(element)
        Next

        pdfDoc.Add(table)

        Dim Data_Stampa As String = "<span style=""font-size:8px;text-align:right;"">Stampato il " & Now & "</span>"
        For Each element1 As IElement In HTMLWorker.ParseToList(New StringReader(Data_Stampa), New StyleSheet)
            pdfDoc.Add(element1)
        Next

        pdfDoc.Close()
        Response.ContentType = "application/pdf"
        Response.AddHeader("content-disposition", "attachment;filename=ElencoGiornoAgendaSale.pdf")
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Response.Write(pdfDoc)
        Response.End()

    End Sub



Studialo un po' e vedi che trovi la soluzione!!!
Queste dovrebbero essere le righe che ti interessano maggiormente!

                Dim cellTextGiorno As String = Server.HtmlDecode(grvLista.Rows(i).Cells(1).Text)
                Dim cellGiorno As iTextSharp.text.pdf.PdfPCell = New iTextSharp.text.pdf.PdfPCell(New Phrase(Server.HtmlDecode("&nbsp;&nbsp;" + UCase(Left(WeekdayName(Weekday(cellTextGiorno, vbMonday), False, vbMonday), 1)) & LCase(Right(WeekdayName(Weekday(cellTextGiorno, vbMonday), False, vbMonday), Len(WeekdayName(Weekday(cellTextGiorno, vbMonday), False, vbMonday)) - 1)) + ""), fntBoldTextGiorno))



Ciao
Tommaso

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.