Toon posts:

[ASP.NET] Pdf maken met template

Pagina: 1
Acties:

Onderwerpen


  • Beejee0
  • Registratie: Maart 2011
  • Laatst online: 04-11-2022
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();
}

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 16-05 22:53
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:
  • 0Henk 'm!

  • Beejee0
  • Registratie: Maart 2011
  • Laatst online: 04-11-2022
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:
  • 0Henk 'm!

  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 11:46
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]


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 05:25

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:
  • 0Henk '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:
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 03:26

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk 'm!

  • Beejee0
  • Registratie: Maart 2011
  • Laatst online: 04-11-2022
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


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee