iTextSharp returns 打不开的pdf
iTextSharp returns a pdf that can not be opened
我按照 this question 中的答案尝试使用 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(), 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");
不幸的是,它 return 在浏览器中显示 window 消息:
Failed to load PDF
这种行为的主要原因是什么?
注意:我使用同样基于 iTextSharp 的 PdfSharp 从 html 生成了一个 pdf,所以我想我没有正确使用 iTextSharp。
编辑:
我在评论中采纳了 Bruno 的建议,所以我将 return 更改为:
bytes = ms.ToArray();
return File(new MemoryStream(bytes), "application/pdf");
现在结果是一个 2 页的空 pdf,所以更好,但是是否可以使它更准确,因为 pdf 的内容应该有一些文本?
看到 and removed the width
tags inside divs, and also ran an online XHtml validator中的答案调整其他一切后,我可以根据相应的HTML.
相对生成pdf
我按照 this question 中的答案尝试使用 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(), 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");
不幸的是,它 return 在浏览器中显示 window 消息:
Failed to load PDF
这种行为的主要原因是什么?
注意:我使用同样基于 iTextSharp 的 PdfSharp 从 html 生成了一个 pdf,所以我想我没有正确使用 iTextSharp。
编辑:
我在评论中采纳了 Bruno 的建议,所以我将 return 更改为:
bytes = ms.ToArray();
return File(new MemoryStream(bytes), "application/pdf");
现在结果是一个 2 页的空 pdf,所以更好,但是是否可以使它更准确,因为 pdf 的内容应该有一些文本?
看到width
tags inside divs, and also ran an online XHtml validator中的答案调整其他一切后,我可以根据相应的HTML.