Asp.net mvc iTextSharp返回无法打开的pdf
我遵循了中的答案,并尝试使用iTextSharp从MVC视图输出pdf,以测试渲染保真度 我有以下代码:Asp.net mvc iTextSharp返回无法打开的pdf,asp.net-mvc,pdf-generation,itext,Asp.net Mvc,Pdf Generation,Itext,我遵循了中的答案,并尝试使用iTextSharp从MVC视图输出pdf,以测试渲染保真度 我有以下代码: var ms = new MemoryStream(); var document = new Document(PageSize.A4, 10, 10, 10, 10); var writer = PdfWriter.GetInstance(document, ms); document.Open(); var html = this.RenderView(GetViewName()
var ms = new MemoryStream();
var document = new Document(PageSize.A4, 10, 10, 10, 10);
var writer = PdfWriter.GetInstance(document, ms);
document.Open();
var html = this.RenderView(GetViewName(), reportVM);
var css = System.IO.File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "\\Content\\site.css"));
var msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css));
var msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html));
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, msHtml, msCss);
document.Close();
return File(ms, "application/pdf");
不幸的是,它在浏览器中返回一个窗口,其中包含以下消息:
无法加载PDF
这种行为的主要原因是什么
注意:我已经用PdfSharp从相同的html生成了一个pdf,它也是基于iTextSharp的,所以我想我没有正确地使用iTextSharp
编辑:
我在评论中遵循了布鲁诺的建议,因此我将回复改为:
bytes = ms.ToArray();
return File(new MemoryStream(bytes), "application/pdf");
现在结果是一个2页的空pdf,所以它更好,但是有可能使它更准确,因为pdf的内容应该有一些文本在里面吗?在我看到答案并删除divs中的
宽度标签后,还运行了一个,我能够根据相应的HTML相对生成pdf。在中看到答案并删除divs中的宽度标签后,我还运行了一次调整,以调整其他所有内容,我能够根据相应的HTML生成一个相对的pdf。您是否尝试过在文本编辑器中打开pdf以查看其内容?为什么添加这一行:writer.CloseStream=false代码>基础内存流
从未关闭!另外:您所指的答案将ms
显式转换为数组:ms.ToArray()
@DavidG,不,谢谢,这是个好主意@meJustAndrew你真的应该听Bruno的,他在iText工作,所以有点知道他在说什么……谢谢@BrunoLowagie,它在没有writer.CloseStream=false的情况下工作代码>所以这确实是我的错误。您是否尝试过在文本编辑器中打开PDF以查看其内容?为什么添加这一行:writer.CloseStream=false代码>基础内存流
从未关闭!另外:您所指的答案将ms
显式转换为数组:ms.ToArray()
@DavidG,不,谢谢,这是个好主意@meJustAndrew你真的应该听Bruno的,他在iText工作,所以有点知道他在说什么……谢谢@BrunoLowagie,它在没有writer.CloseStream=false的情况下工作所以这确实是我的错误。