Create PDF in memory instead of physical file

后端 未结 4 1843
说谎
说谎 2020-11-27 04:23

How do one create PDF in memorystream instead of physical file using itextsharp.

The code below is creating actual pdf file.

Instead how can I create a byte[

相关标签:
4条回答
  • 2020-11-27 04:40
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
    
    byte[] pdfBytes;
    using(var mem = new MemoryStream())
    {
        using(PdfWriter wri = PdfWriter.GetInstance(doc, mem)) 
        {
            doc.Open();//Open Document to write
            Paragraph paragraph = new Paragraph("This is my first line using Paragraph.");
            Phrase pharse = new Phrase("This is my second line using Pharse.");
            Chunk chunk = new Chunk(" This is my third line using Chunk.");
    
            doc.Add(paragraph);
    
            doc.Add(pharse);
    
            doc.Add(chunk); 
        }
        pdfBytes = mem.ToArray();
    }
    
    0 讨论(0)
  • 2020-11-27 04:48

    Where your code has new FileStream, pass in a MemoryStream you've already created. (Don't just create it inline in the call to PdfWriter.GetInstance - you'll want to be able to refer to it later.)

    Then call ToArray() on the MemoryStream when you've finished writing to it to get a byte[]:

    using (MemoryStream output = new MemoryStream())
    {
        PdfWriter wri = PdfWriter.GetInstance(doc, output);
    
        // Write to document
        // ...
        return output.ToArray();
    }
    

    I haven't used iTextSharp, but I suspect some of these types implement IDisposable - in which case you should be creating them in using statements too.

    0 讨论(0)
  • 2020-11-27 04:56

    I've never used iTextPDF before but it sounded interesting so I took upon the challenge and did some research on my own. Here's how to stream the PDF document via memory.

    protected void Page_Load(object sender, EventArgs e)
    {
        ShowPdf(CreatePDF2());
    }
    
    private byte[] CreatePDF2()
    {
        Document doc = new Document(PageSize.LETTER, 50, 50, 50, 50);
    
        using (MemoryStream output = new MemoryStream())
        {
            PdfWriter wri = PdfWriter.GetInstance(doc, output);
            doc.Open();
    
            Paragraph header = new Paragraph("My Document") {Alignment = Element.ALIGN_CENTER};
            Paragraph paragraph = new Paragraph("Testing the iText pdf.");
            Phrase phrase = new Phrase("This is a phrase but testing some formatting also. \nNew line here.");
            Chunk chunk = new Chunk("This is a chunk.");
    
            doc.Add(header);
            doc.Add(paragraph);
            doc.Add(phrase);
            doc.Add(chunk);
    
            doc.Close();
            return output.ToArray();
        }
    
    }
    
    private void ShowPdf(byte[] strS)
    {
        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + DateTime.Now);
    
        Response.BinaryWrite(strS);
        Response.End();
        Response.Flush();
        Response.Clear();
    }
    
    0 讨论(0)
  • 2020-11-27 04:58

    Switch the filestream with a memorystream.

    MemoryStream memStream = new MemoryStream();
    PdfWriter wri = PdfWriter.GetInstance(doc, memStream);
    ...
    return memStream.ToArray();
    
    0 讨论(0)
提交回复
热议问题