codice:
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Partial Class Test_pdf
Inherits System.Web.UI.Page
Protected Sub crea_Command(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs) Handles crea.Command
Dim nomefile As String = "html_it.pdf"
Response.Clear()
Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", nomefile))
Response.ContentType = "application/pdf"
'creo il documento itextsharp
Dim myDoc As Document = New Document(PageSize.A4, 25, 25, 25, 25)
'@Pietro--- per il documento in orizzontale diventerebbe così
'Dim myDoc As Document = New Document(PageSize.A4.Rotate, 25, 25, 25, 25)
Try
'creo il writer
Dim pwr As PdfWriter = PdfWriter.GetInstance(myDoc, HttpContext.Current.Response.OutputStream)
' Prima di aprire il documento imposto il footer della pagina
Set_footer(myDoc, pwr)
'...imposto l'header
Dim header As HeaderFooter = New HeaderFooter(New Phrase("Intestazione documento ripetuta in tutte le pagine"), False)
header.Alignment = Element.ALIGN_CENTER
myDoc.Header = header
myDoc.Open()
'esempi vari di inserimento testo nel documento
myDoc.Add(New Paragraph("Testo libero"))
myDoc.Add(New Paragraph(vbCrLf & vbCrLf & vbCrLf))
myDoc.Add(New Chunk("Spazio vuoto creato con i ritorni a capo", FontFactory.GetFont(FontFactory.HELVETICA, 8, Font.BOLD, Color.WHITE)))
myDoc.Add(New Paragraph(vbCrLf & vbCrLf & vbCrLf))
Dim columnsPercentageWidth() As Single = New Single() {15, 50, 15, 20}
'la tabella vera e propria formata da 4 colonne di larghezze diverse
Dim tablePdf As PdfPTable = New PdfPTable(columnsPercentageWidth)
'Per le tabelle, usare l'oggetto PdfPTable e non quello PdfTable, ha funzionalità nettamente migliori
'importante ricordare che non esiste il concetto di riga, le tabelle sono formate da una serie di mattoncini(pdfcell)uniti.
'attenzione che superare nell'assegnazione delle larghezze delle colonne il 100% da errore senza aprire il doc.
'Spesso lo fa anche se si sbaglia magari con il columnspan il totale delle cellette
tablePdf.WidthPercentage = 100
'fonr comune, giocando con l'intellisense si possono vedere i possibili valori
Dim font_test As Font = FontFactory.GetFont(FontFactory.HELVETICA_OBLIQUE, 18, Font.UNDERLINE, Color.BLUE)
Dim cell_titolo As New PdfPCell(New Phrase(New Chunk("Intestazione Tabella", font_test)))
cell_titolo.HorizontalAlignment = Element.ALIGN_CENTER
cell_titolo.BorderWidth = 2
cell_titolo.BorderColor = Color.RED
cell_titolo.Colspan = 4
cell_titolo.Padding = 8
cell_titolo.PaddingBottom = 15
tablePdf.AddCell(cell_titolo)
For i As Integer = 1 To 10
'metto le 4 celle
tablePdf.AddCell("cella" & 1 * i)
tablePdf.AddCell("cella" & 2 * i)
tablePdf.AddCell("cella" & 3 * i)
tablePdf.AddCell("cella" & 4 * i)
Next
Dim cell_01 As New PdfPCell(New Phrase(New Chunk("PROVA COLORE", FontFactory.GetFont(FontFactory.HELVETICA_OBLIQUE, 8, Font.BOLDITALIC, Color.WHITE))))
cell_01.HorizontalAlignment = Element.ALIGN_CENTER
cell_01.BorderWidth = 0.2
cell_01.BackgroundColor = Color.LIGHT_GRAY
cell_01.BorderColor = Color.CYAN
cell_01.Colspan = 2
tablePdf.AddCell(cell_01)
Dim cell_02 As New PdfPCell(New Phrase(New Chunk("PROVA COLORE", FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 12, Font.BOLDITALIC, Color.YELLOW))))
cell_02.HorizontalAlignment = Element.ALIGN_CENTER
cell_02.BorderWidth = 0.5
cell_02.BackgroundColor = Color.BLACK
cell_02.BorderColor = Color.WHITE
cell_02.Colspan = 2
tablePdf.AddCell(cell_02)
'aggiungo la tabella al documento
myDoc.Add(tablePdf)
'creo una pagina nuova per verificare la scritta del numero di pagina in fondo al documento
myDoc.NewPage()
myDoc.Add(New Paragraph("Pagina due"))
myDoc.Add(New Paragraph(vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf))
Dim columnsPercentageWidth1() As Single = New Single() {100}
Dim tablePdf1 As PdfPTable = New PdfPTable(columnsPercentageWidth1)
tablePdf1.WidthPercentage = 100
Dim cell_titolo1 As New PdfPCell(New Phrase(New Chunk("Intestazione Tabella", FontFactory.GetFont(FontFactory.HELVETICA_OBLIQUE, 12, Font.BOLDITALIC, Color.GREEN))))
cell_titolo1.HorizontalAlignment = Element.ALIGN_CENTER
cell_titolo1.BorderWidth = 1
cell_titolo1.BorderColor = Color.RED
cell_titolo1.PaddingTop = 2
cell_titolo1.PaddingBottom = 8
tablePdf1.AddCell(cell_titolo1)
Dim img As Image = Image.GetInstance("http://forum.html.it/forum/faccine/iocero.gif")
'metto l'immagine dentro alla celletta riducendola
img.ScalePercent(50)
Dim cell_1 As PdfPCell = New PdfPCell(New Phrase(New Chunk(img, 10, 10)))
cell_1.HorizontalAlignment = Element.ALIGN_CENTER
tablePdf1.AddCell(cell_1)
'aggiungo la tabella al documento
myDoc.Add(tablePdf1)
'aggiungo la stessa immagine leggermente più grande
img.ScalePercent(80)
myDoc.Add(img)
Dim paragrafo As New Paragraph(vbCrLf & "Allineato a destra")
paragrafo.Alignment = Element.ALIGN_RIGHT
paragrafo.SpacingAfter = 50
myDoc.Add(paragrafo)
myDoc.Add(New Phrase(New Chunk("Il paragrafo sopra ha un margine di 50 e tiene lontano questa scritta.....", FontFactory.GetFont(FontFactory.HELVETICA_OBLIQUE, 8, Font.TIMES_ROMAN, Color.RED))))
myDoc.AddCreator("Legnetto")
myDoc.AddAuthor("Riccardone")
myDoc.AddTitle("Un saluto a Pietro09")
Catch ex As Exception
Finally
'chiudo il documento
myDoc.Close()
End Try
Response.Flush()
Response.End()
End Sub
Public Shared Sub Set_footer(ByRef Doc As iTextSharp.text.Document, ByRef pwr As PdfWriter)
Dim font As New Font(1, 8, font.BOLDITALIC, Color.GRAY)
Dim footer As HeaderFooter = New HeaderFooter(New Phrase(New Chunk("Documento creato in data " & CStr(DateTime.Today) & " Pag: ", font)), True)
footer.Border = Rectangle.NO_BORDER
footer.Alignment = Rectangle.ALIGN_CENTER
footer.Top = 0
Doc.Footer = footer
End Sub