[ASP.NET] Pdf maken met template

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Beejee0
  • Registratie: Maart 2011
  • Laatst online: 11-09-2023
Voor een project wens ik een inventaris te maken aan de hand van iTextSharp.
Deze inventaris dient afhankelijk van de data in de databank opgesteld te worden.
Het maken van de PDF afhankelijk van de data is geen probleem en is me doorgaans altijd gelukt.
Het probleem zit hem in het gebruiken van een pdf als template.

Op de template staat het logo en de gegevens van het bedrijf met daarbij reeds een beetje opmaak.
Nu wens ik de content van deze pdf te gaan gebruiken als achtergrond op iedere pagina.
Dit is me doorgaans al gelukt aan de hand van een afbeelding als achtergrond. Maar om later eenvoudiger gegevens te wijzigen geef ik de voorkeur aan een pdf.

Na wat zoekwerk kwam ik uit op enkel voorbeelden. Deze voorbeelden gebruikten echter een pdf-form.
Aangezien ik een tabel wens toe te voegen lijkt mij dit niet mogelijk aan de hand van die code.
Heb ik het ergens mis of kan iemand me helpen?

De huidige code die ik nu heb maakt dus gebruik van de voorbeelden op pdf-forms. Dus met een stamper enzo. Toen merkte ik op dat ik de tabel dus nergens kan toevoegen.


C#: code_iTextSharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public void PrintInventory(string path, MemoryStream ms)
{
            VoorraadService vService = new VoorraadService();

            PdfReader reader;
            PdfStamper stamper;
            Document document = new Document(PageSize.A4, (float)28.3464567, (float)28.3464567, (float)60.3307087, (float)30.3307087);

            try
            {
                PdfCopy copy = new PdfCopy(document, ms);
                document.Open();

                var stock = vService.GetInventaris();
                while(stock.Count >0)
                {
                    reader = new PdfReader(path + "\\Images\\Inventaris_Template.pdf");
                    MemoryStream mscopy = new MemoryStream();
                    stamper = new PdfStamper(reader, mscopy);

                    PdfPTable table = new PdfPTable(5);
                    table.WidthPercentage = 100;
                    for (int i = 0; i < 15; i++)
                    {
                        table.AddCell(new Phrase(stock[0].ArtikelID));
                        table.AddCell(new Phrase(stock[0].ExternArtikelID));
                        table.AddCell(new Phrase(stock[0].Naam));
                        table.AddCell(new Phrase(stock[0].Aankoopprijs.ToString()));
                        table.AddCell(new Phrase(stock[0].Aantal.ToString()));
                        table.AddCell(new Phrase(stock[0].Totaal.ToString()));
                        stock.Remove(stock[0]);
                    }
                    stamper.Close();
                    reader = new PdfReader(mscopy);

                    copy.AddPage(copy.GetImportedPage(reader, 1));
                }
            }
            catch (Exception e)
            { }

            document.Close();
}

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Je zou kunnen proberen om je template eerst van PDF om te zetten naar EPS en dat direct als plaatje te gebruiken. Geen idee hoe je het met iTextSharp op zou lossen, maar dat is wat ik zo'n anderhalf jaar geleden gedaan heb met een andere library voor het bakken van PDF reports.

Acties:
  • 0 Henk 'm!

  • Beejee0
  • Registratie: Maart 2011
  • Laatst online: 11-09-2023
Ik denk dat het me nu gelukt is.
Maar nu heb ik een ander probleem.
Om de een of andere rede wil hij mijn pdf niet opslaan. Althans niet via de methode die ik bij mijn vorige projecten gebruikt heb.

Ik maak gebruik van een MemoryStream die ik dan gebruik om de pdf te genereren.
Iemand die me hierbij kan helpen?
Hieronder zie je de code ik gebruikt heb, als ik debug loopt alles goed. er verschijnt gewoon geen resultaat.
C#: pdf_from_Template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public void PrintInventory(string path, MemoryStream ms)
{
            VoorraadService vService = new VoorraadService();

            PdfReader reader;
            Document document;
            PdfCopy copy;

            try
            {
                var stock = vService.GetInventaris();
                reader = new PdfReader(path + "Images/Inventaris_Template.pdf");
                document = new Document(reader.GetPageSizeWithRotation(1));
                copy = new PdfCopy(document, ms);

                document.Open();
                
                while(stock.Count >0)
                {
                    copy.AddPage(copy.GetImportedPage(reader, 1));

                    PdfPTable table = new PdfPTable(6);
                    table.WidthPercentage = 100;
                    for (int i = 0; i < 15 && stock.Count > 0; i++)
                    {
                        table.AddCell(new Phrase(stock[0].ArtikelID));
                        table.AddCell(new Phrase(stock[0].ExternArtikelID));
                        table.AddCell(new Phrase(stock[0].Naam));
                        table.AddCell(new Phrase(stock[0].Aankoopprijs.ToString()));
                        table.AddCell(new Phrase(stock[0].Aantal.ToString()));
                        table.AddCell(new Phrase(stock[0].Totaal.ToString()));
                        stock.Remove(stock[0]);
                    }
                    table.CompleteRow();
                    copy.Add(table);        
                }
                document.Close();
                reader.Close();
            }
            catch (Exception e)
            { return; }            
}

//Waar ik de methode aanroep
protected void btnPrinten_Click(object sender, EventArgs e)
{
            using (MemoryStream ms = new MemoryStream())
            {
                PdfGenerator pdf = new PdfGenerator();
                pdf.PrintInventory(Request.Url.OriginalString.Replace("Applicatie/Voorraad/Inventory.aspx", ""), ms);
                
                Response.ContentType = "application/pdf";
                Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
                Response.OutputStream.Flush();
                Response.OutputStream.Close();
            }
}

Acties:
  • 0 Henk 'm!

  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 09:29
Krijg je toevallig een exception?

Dit is best wel ranzig:
[codd
Beejee0 schreef op vrijdag 03 juni 2011 @ 12:28:
C#: pdf_from_Template
1
2
            catch (Exception e)
            { return; }            
Een exception moet je bijna nooit gewoon afvangen en verder niets, zo kom je er nooit achter of er iets fout gaat.
Je kan het hele try/catch net zogoed weghalen nu. beter weghalen, dan merk je het nog eens als er iets fout gaat. Zo goed Rob? :9

[ Voor 10% gewijzigd door alwinuzz op 06-06-2011 12:37 ]


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-09 16:19

alienfruit

the alien you never expected

Waarom gebruik je niet een degelijke reporting engine? Lijkt mij veel makkelijker... Kan iemand anders ook met een designer de template aanpassen.

Acties:
  • 0 Henk 'm!

  • Rinzler
  • Registratie: Februari 2011
  • Laatst online: 13-10-2022

Rinzler

You. Just. Did.

Om de een of andere rede wil hij mijn pdf niet opslaan.
Krijg je een error of gebeurd er gewoon niets? Ga er eens met de debugger over als je in VS werkt of zoek de exception op msdn als het om een error gaat. :)

Denkt aleer ge doende zijt en doende denkt dan nog! - PSN: Peunbrechts


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
alwinuzz schreef op vrijdag 03 juni 2011 @ 20:04:
Je kan het hele try/catch net zogoed weghalen nu.
offtopic:
Euh, nee. Hoewel je intentie goed is (en terecht at that!), de try/catch weghalen resulteert in een (waarschijnlijk unhandled?) exception terwijl 'ie 'm nu inslikt; "net zo goed weghalen" zal het (huidige) gedrag van de applicatie dus wijzigen. "Net zo goed weghalen" gaat dus niet op ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Beejee0
  • Registratie: Maart 2011
  • Laatst online: 11-09-2023
Het probleem is ondertussen opgelost en het lag aan mijn AJAX updatepanel.
In mijn masterpage zit een updatepanel. Op de pagina zelf had ik nog een updatepanel met dezelfde naam hierdoor werd de pdf niet aangemaakt.
Wat raar is is dat ik de code wel helemaal kon debuggen.
Pagina: 1