从 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);
}
要让您的 MemoryStream
和 Document
自动关闭 + 为您处置,请将它们放入 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);
}
我的项目中有如下方法
[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);
}
要让您的 MemoryStream
和 Document
自动关闭 + 为您处置,请将它们放入 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);
}