Laden...

Pdf erstellen mit "iTextSharp"

Erstellt von baste3003 vor 17 Jahren Letzter Beitrag vor 17 Jahren 5.965 Views
B
baste3003 Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren
Pdf erstellen mit "iTextSharp"

Hi @ all.

Ich habe die dll eingebunden und einige Beispiele mir angeschaut, funktioniert alles. Ist es irgendwie möglich "eigene Tabellen" (sprich DataTables) dem Dokument zu übergeben und als Pdf zu erstellen.
Hier mein Vorhaben (Telefonbuch): ich suche nach einem Stichwort und als Ergebnis bekomme ich einen oder mehrere Mitarbeiter. Diese Einträge werden als GridView dargestellt. Nun möchte ich es so machen, dass ich diese GridViews (DataTable) in eine Pdf packe.

Danke im Voraus.

Mfg Baste

B
baste3003 Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Hat keiner ne Idee??? 🙁

O
778 Beiträge seit 2007
vor 17 Jahren

ich weiß nicht, was andere darüber denken, aber ich kenne ITextSharp nicht. Ist das ein Programmteil von SharpDevelop? Schreib mal, was das ist, was die Bibliothek kann und wie du gedenkst sie zu nutzen.

S
1.047 Beiträge seit 2005
vor 17 Jahren

kannst dir sonst auch mal den report viewer anschaun. der hat eine exportfunktion für pdf. die berichte würden dan nwenigstens auch ordentlich aussehen =)

http://www.gotreportviewer.com/

B
baste3003 Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Hallo.

Ich schau mir den report viewer mal an.

iTextSharp ist eine dll, die man in sein Projekt einbinden kann und mittels dieser Pdf´s erstellt werden können.
mehr im web: http://itextsharp.sourceforge.net/

Was ich machen will:
Ich hol mir aus einer Datenbank Infos zu Mitarbeitern. Diese Einträge stehen nun in einem GridView, sprich pro Mitarbeiter ein GridView. D. h. wenn die Suche 5 Mitarbeiter "ausspuckt", sind 5 GridViews zu sehen. Diese Übersicht möchte ich nun noch als Pdf speichern.

Danke.
Mfg Baste

3.003 Beiträge seit 2006
vor 17 Jahren

Hi,

das nenne ich mal Zufall...habe gestern den Tag damit verbracht, einen Adapter zu schreiben, der genau das tut: aus einer Datatable anhand des DefaultView (plus einiger Spalteneinschränkungen) eine Tabelle auf einem iTextSharp-Document zu erstellen.

Im Wesentlichen läuft das so (es geht nur ums Prinzip...):


public Interface IPdfElement {  void Render(Document doc);  }

public class MyPdfDoc : IPdfElement
{
   private Document m_doc;
   private PdfPageEventHelper pEvent
   private List<IPdfElement> myElements;   

   public myPdfDoc(Document doc)
   {
         this.m_doc = doc;
         myElements = new List<IPdfElement>();
    }
    
   public void Add(IpdfElement e) 
   {
       myElements.Add(e);
    }

    //andere Zugriffe auf die Elemente...weggelassen

    public void Render(Document doc) { return; }
    public void Render() 
    {
       //getInstance und der andere Kram...weggelassen.
      //..
      m_doc.Open();
      foreach(IPdfElement element in myElements)
         element.Render(m_doc);
      m_doc.Close();
      }
}

public class MyTable : IPdfElement
{
     private DataTable m_data;
     private PdfPTable m_pdfTable;

     public MyTable(DataTable table) 
     {
          m_data = table;
          databind();
     }

     private void databind() 
     {
          m_pdfTable = new PdfPTable(m_data.Columns.Count);
           foreach(DataRowView row in m_data.DefaultView)
                for(int i = 0;i<m_data.Columns.Count; i++)
                m_pdfTable.AddCell(row[i].ToString());        
     }

     public void Render(Document doc)
     {
           doc.Add(m_pdfTable);
     }
}

...und in der Anwendung dann etwa so:


DataTable datatable; //stellen wir uns vor, hier drin stünde was...
MyPdfDoc doc = new MyPdfDoc(new Document()); //Konstruktor stimmt so nicht, die Parameter von Document() müssen natürlich richtig übergeben werden...
doc.Add(new MyTable(datatable));
doc.Render();

Wirklich schreiben müsstest du's schon selber 😉.

Das wäre dann etwa eine Herangehensweise, mit der du nicht nur Datatables gut anbinden und darstellen kannst. Funktioniert recht gut.

Grüße,

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

B
baste3003 Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Hi, hab vielen dank!!! Werd mich gleich mal drüber machen.

Mfg Baste

3.003 Beiträge seit 2006
vor 17 Jahren

Speziell das DataBind läuft in meiner realen Umsetzung ganz anders...wenn du die Tabelle nach dem Einbinden ins pdf-Dokument, aber vor dem Rendern, noch verändern willst, solltest du das beachten...wie gesagt, ging nur ums Prinzip.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

B
baste3003 Themenstarter:in
10 Beiträge seit 2006
vor 17 Jahren

Hi. Hat alles super geklappt, hier mal meine Methode, evtl. kannst da ja was davon gebrauchen....


    private void erzeugePdf()
    {

        Document document = new Document();
        PdfPTable pdfTable = new PdfPTable(nameTable.Columns.Count);
        PdfPTable pdfTable2 = new PdfPTable(nummernTable.Columns.Count);

        foreach (DataColumn col in nameTable.Columns)
                pdfTable.AddCell(col.Caption);

        foreach (DataRowView row in nameTable.DefaultView)
            for (int i = 0; i < nameTable.Columns.Count; i++)
                pdfTable.AddCell(row[i].ToString());

        foreach (DataColumn col2 in nummernTable.Columns)
                pdfTable2.AddCell(col2.Caption);

        foreach (DataRowView row2 in nummernTable.DefaultView)
            for (int j = 0; j < nummernTable.Columns.Count; j++)
                pdfTable2.AddCell(row2[j].ToString());

        try
        {
            PdfWriter.GetInstance(document, new FileStream("C:\\Dokumente und Einstellungen\\bla\\Desktop\\Test.pdf", FileMode.Create));
            document.Open();
            document.Add(pdfTable);
            document.Add(pdfTable2);
        }
        catch { }
        document.Close();
    }

nameTable und nummernTable sind meine vorher erzeugten DataTables...

Mfg Baste