从 iTextSharp 生成 Base64

Generate Base64 from iTextSharp

我的项目中有如下方法

        [Route("GerarPdf")]
        [HttpGet()]
        public object GerarPdf()
        {

            var doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
            var mem = new MemoryStream();

            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);

            var pdf = mem.ToArray();

            return Convert.ToBase64String(pdf);
        }

此代码的 objective 生成一个 PDF 文件,可通过以下 JavaScript 代码下载

     var dataURI = "data:application/pdf;base64," +result;
     window.open(dataURI,'_blank'); 

但是新打开的页面return加载PDF总是出错。方法return对结果变量的base64编码为:

JVBERi0xLjQKJeLjz9MK

有人可以帮我解决这个问题吗?

问题是在转换成bytearray的时候文档没有关闭。在我添加 doc.Close(); 之后PDF已成功生成。

        [Route("GerarPdf")]
        [HttpGet()]
        public object GerarPdf()
        {

            var doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
            var mem = new MemoryStream();

            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);

            doc.Close();

            var pdf = mem.ToArray();

            return Convert.ToBase64String(pdf);
        }

要让您的 MemoryStreamDocument 自动关闭 + 为您处置,请将它们放入 using() 块中,如下所示:

[Route("GerarPdf")]
[HttpGet()]
public object GerarPdf()
{
    byte[] pdf = new byte[] { };

    using (var mem = new MemoryStream())
    {
        using (var doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35))
        {
            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);
        } // doc goes out of scope and gets closed + disposed

        pdf = mem.ToArray();
    } // mem goes out of scope and gets disposed

    return Convert.ToBase64String(pdf);
}