Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    librerie per creazione pdf

    Vorrei un consiglio da chi ha già provato, su una buona libreria open source per la creazione di pdf.

    Ciao
    Pietro

  2. #2
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da riccardone
    io sto usando questa
    http://sourceforge.net/projects/itextsharp/
    Se hai link di buoni esempi da studiare te ne sarei grato

    Ciao.
    Pietro

  4. #4

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Perfetto, grazie ancora
    Pietro

  6. #6
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Ciao Pietro, Riccardone,
    questo è un post forse più che altro per salutare due vecchie conoscenze del forum...
    Per quanto riguarda invece la libreria per creare i pdf, non posso fare altro che concordare con quanto suggerisce Riccardone.
    Itext, è uno strumento molto potente, forse un po' poco intuitivo ma una volta superato lo scoglio iniziale, si possono creare ottime cose.


    Legnetto

  7. #7
    ...e allora dacci un esempio di metodino che riceve un oggetto con dei dati e crea un doc pdf con:
    - Titolone
    - Sottotili in neretto
    - Paragrafi

    io l'ho fatto velocemente per una demo ed è fermo li ancora alla scarna versione primitiva

    codice:
    public static void CreatePDFDocument(Corso _corso)
        {
            MemoryStream MStream = new MemoryStream();
            Document document = new Document(PageSize.A4, 80, 50, 30, 65);
            try
            {            
                PdfWriter writer = PdfWriter.GetInstance(document, MStream);
                document.Open();
                // Titolo
                document.Add(new iTextSharp.text.Paragraph(string.Format("{0} {1}", _corso.CodiceCorso, _corso.CorsoTitolo)));
                // Descrizione
                SchedaTecnicaCorso st = _corso.SchedaTecnicaCorso.FirstOrDefault();
                if (st != null)
                {
                    document.Add(new iTextSharp.text.Paragraph(st.CorsoDescrizione));
                }
                document.Close();
            }
            catch (Exception e)
            {
                throw e;
            }
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ContentType = "application/pdf";
            HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.pdf", _corso.CodiceCorso));
            HttpContext.Current.Response.BinaryWrite(MStream.GetBuffer());
            HttpContext.Current.Response.End();
        }
    Saluti a tutti
    Riccardo

  8. #8
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Allora, per quanto riguarda l'accesso ai dati, non mi pongo il problema perchè conoscendo il soggetto, non credo che sia la componente fondamentale di difficoltà.
    Per creare il pdf invece, ti posso fare una paginetta di prova(io uso vb ma non credo che sia un problema)con qualcosa di quello che mi chiedi.
    L'esempio sarà semplice semplice perchè la vera forza di questa libreria secondo me è quella di crearsi una classe personalizzata che contenga tutti i metodi e le routine che richiami più spesso.
    Io mi sono creato un parser che interpreta un mio semplice linguaggio tipo xml che permette di risparmiare un sacco di lavoro producendo dei documenti abbastanza complessi.
    Stasera quando tornerò oppure domani produrrò l'esempio.

    Legnetto

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Io debbo fare questo. Ho una tabella in Access e debbo mostrare questa tabella in pdf, su più pagine, orientamento orizzontale, con intestazione e piede per ogni pagina.

    Ho usato ABCpdf.Net ma la resa della tabella è abbastanza scarsa.

    Salutissimi a due vecchi amici del forum
    Pietro

  10. #10
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Eccomi con gli esempi promessi:
    Un pulsantino apre un pdf di due pagine con dentro un po' di tutto quello che può servire.
    Chiaramente è tutto facilmente associabile ad una base dati per rendere dinamico il contenuto.
    Chiaramente 2 il tutto non ha nessun motivo estetico se non quello di mostrare come risolvere le problematiche che mi sono state richieste.
    Richiamo all'interno un'immagine di una faccina del forum, se provate il codice disconnessi da internet, commentate la sezione.
    Io uso l'ultima versione della libreria, la pagina sotto è stata provata con quella.

    Legnetto

    Test_pdf.aspx
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test_pdf.aspx.vb" Inherits="Test_pdf" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <asp:Button ID="crea" Text="Crea il pdf" runat="server" />
        </div>
        </form>
    </body>
    </html>
    Test_pdf.aspx.vb
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.