Asp.net mvc Itext.Sharp文档到字节数组问题
我有以下代码:Asp.net mvc Itext.Sharp文档到字节数组问题,asp.net-mvc,itextsharp,Asp.net Mvc,Itextsharp,我有以下代码: public byte[] ExportToPdf(DataTable dt) { iTextSharp.text.Document document = new iTextSharp.text.Document(); document.Open(); iTextSharp.text.Font font5 = iTextSharp.text.FontFactory.GetFont(FontFactory.HELVETICA, 5); PdfPT
public byte[] ExportToPdf(DataTable dt)
{
iTextSharp.text.Document document = new iTextSharp.text.Document();
document.Open();
iTextSharp.text.Font font5 = iTextSharp.text.FontFactory.GetFont(FontFactory.HELVETICA, 5);
PdfPTable table = new PdfPTable(dt.Columns.Count);
PdfPRow row = null;
float[] widths = new float[] { 4f, 4f, 4f, 4f, 4f, 4f, 4f, 4f };
table.SetWidths(widths);
table.WidthPercentage = 100;
foreach (DataColumn c in dt.Columns)
{
table.AddCell(new Phrase(c.ColumnName, font5));
}
document.Add(table);
document.Close();
byte[] bytes;
MemoryStream msPDFData = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(document, msPDFData);
return msPDFData.ToArray();
}
在另一个函数中,我调用如下函数:
byte[] bytes = ExportToPdf(table);
return File(bytes, "application/pdf", "RaportDocumenteEmise.pdf");
当我试图打开pdf文件时,它说文件已损坏。
不知何故,字节数组是空的。
你能告诉我我做错了什么吗?这是错的:
iTextSharp.text.Document document = new iTextSharp.text.Document();
document.Open();
使用5个简单步骤创建PDF:
文档
对象PdfWriter
实例PdfWriter
实例
打开文档会将PDF标题写入
OutputStream
。如果没有有效的PdfWriter
实例,这是不可能发生的。我正试图做与您相同的事情。
经过多次尝试,我发现如果我将PdfWriter.GetInstance
在内部使用(var ms=new MemoryStream()){}
一切正常
我的全部代码是:
public FileContentResult GetPDF() {
string htmlContent = "<p>First line</p><p>Second line</p>";
StringReader sr = new StringReader(htmlContent);
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
HTMLWorker hw= new HTMLWorker(pdfDoc);
FileContentResult result;
using (var ms = new MemoryStream()) {
PdfWriter.GetInstance(pdfDoc, ms);
pdfDoc.Open();
hw.Parse(sr);
pdfDoc.Close();
result = this.File(ms.ToArray(), "application/pdf", "teste.pdf");
}
return result;
}
public FileContentResult GetPDF(){
字符串htmlContent=“第一行第二行”;
StringReader sr=新的StringReader(htmlContent);
文档pdfDoc=新文档(PageSize.A4、10f、10f、100f、0f);
HTMLWorker hw=新HTMLWorker(pdfDoc);
文件内容结果;
使用(var ms=new MemoryStream()){
GetInstance(pdfDoc,ms);
pdfDoc.Open();
硬件解析(sr);
pdfDoc.Close();
结果=这个.File(ms.ToArray(),“application/pdf”,“teste.pdf”);
}
返回结果;
}
注:这是我控制器中的一个方法。实际上,PdfWriter应该在文档打开之前就实例化。您的“解决方案”是错误的,请删除注释。有关正确的解决方案,请参见我的答案。谢谢你们的告别,伙计们。