Bonjour,

voila quelques jours que je recherche une solution pour exporter en pdf un listing de données et je n'ai rien réussi à mettre en place...

L'objectif est le suivant. J'ai plusieurs pages comportant des filtres sur des listes d'objets (tels que des contrats, des offres, ...) et l'utilisateur désire pouvoir les exporter en .pdf pour avoir un document utilisable et portable.

J'ai googlé pas mal et trouvé deux librairies intéressantes, et qui pourraient m'être utiles"iTextsharp" et "microsoft reportviewer".

Le problème est que "reportviewer" a l'air compliqué (j'ai un code qui ne donne rien...) et que la documentation/exemples de code d'utilisation de iTextSharp ne sont pas à jour (utilisation d'une classe [interface] qui n'existe plus dans le package.

Voila le code que j'utilise pour iTextSharp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 //voir site la www.codeproject.com/Articles/66948/Rendering-PDF-views-in-ASP-MVC-using-iTextSharp.aspx
        public string RenderActionResultToString(ActionResult result)
        {
            // Create memory writer.
            var sb = new StringBuilder();
            var memWriter = new StringWriter(sb);
 
            // Create fake http context to render the view.
            var fakeResponse = new HttpResponse(memWriter);
            var fakeContext = new HttpContext(System.Web.HttpContext.Current.Request, fakeResponse);
            var fakeControllerContext = new ControllerContext(  new HttpContextWrapper(fakeContext), 
                                                                this.ControllerContext.RouteData,
                                                                this.ControllerContext.Controller);
            var oldContext = System.Web.HttpContext.Current;
            System.Web.HttpContext.Current = fakeContext;
 
            // Render the view.
            result.ExecuteResult(fakeControllerContext);
 
            // Restore old context.
            System.Web.HttpContext.Current = oldContext;
 
            // Flush memory and return output.
            memWriter.Flush();
            return sb.ToString();
        }
 
        public ActionResult ViewPdf(object model)
        {
            // Create the iTextSharp document.
            Document doc = new Document();
            // Set the document to write to memory.
            MemoryStream memStream = new MemoryStream();
            PdfWriter writer = PdfWriter.GetInstance(doc, memStream);
            writer.CloseStream = false;
            doc.Open();
 
            // Render the view xml to a string, then parse that string into an XML dom.
            string xmltext = this.RenderActionResultToString(this.View(model));
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.InnerXml = xmltext.Trim();
 
            // Parse the XML into the iTextSharp document.
            //ITextHandler textHandler = new ITextHandler(doc); //probleme sur cette ligne
            //textHandler.Parse(xmldoc); 
 
            // Close and get the resulted binary data.
            doc.Close();
            byte[] buf = new byte[memStream.Position];
            memStream.Position = 0;
            memStream.Read(buf, 0, buf.Length);
 
            // Send the binary data to the browser.
            return new BinaryContentResult(buf, "application/pdf");
        }
L'interface qui n'existe plus dans la librairie est ITextHandler et cette ligne semble importante (parsing du xml).

Je développe en ASP.NET MVC (C#).

Avez vous une solution pour l'export en pdf ? Si c'est iTextSharp, comment résoudre mon problème ?

Merci par avance.
@+