J'essaie de renvoyer un PDF avec du texte simple, mais j'obtiens l'erreur suivante lors du téléchargement du document : Échec du chargement du document PDF. Toutes les idées sur la façon de résoudre ce problème sont appréciées.

MemoryStream ms = new MemoryStream();

PdfWriter writer = new PdfWriter(ms);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);

document.Add(new Paragraph("Hello World"));

//document.Close();
//writer.Close();

ms.Position = 0;

string pdfName = $"IP-Report-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.pdf";

return File(ms, "application/pdf", pdfName);
1
Terry Doll 18 févr. 2020 à 22:17

1 réponse

Meilleure réponse

Vous devez fermer le rédacteur sans fermer le flux sous-jacent, ce qui videra son tampon interne. Tel quel, le document n'est pas écrit dans le flux mémoire dans son intégralité. Tout sauf ms devrait également être dans un using.

Vous pouvez vérifier que cela se produit en vérifiant la longueur de ms dans votre code par rapport au code ci-dessous.

Lorsque le using (PdfWriter writer =...) se ferme, il ferme l'écrivain, ce qui l'amène à vider ses écritures en attente dans le flux sous-jacent ms.

MemoryStream ms = new MemoryStream();

using (PdfWriter writer = new PdfWriter(ms))
using (PdfDocument pdfDocument = new PdfDocument(writer))
using (Document document = new Document(pdfDocument))
{
    /*
     * Depending on iTextSharp version, you might instead use:
     *     writer.SetCloseStream(false);
     */
    writer.CloseStream = false; 
    document.Add(new Paragraph("Hello World"));
}

ms.Position = 0;

string pdfName = $"IP-Report-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.pdf";

return File(ms, "application/pdf", pdfName);
3
Rainbow Dash 18 févr. 2020 à 19:35