【发布时间】:2016-12-18 04:20:29
【问题描述】:
我已按照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");
不幸的是,它在浏览器中返回了一个带有消息的窗口:
加载 PDF 失败
这种行为的主要原因是什么?
注意:我已经使用基于 iTextSharp 的 PdfSharp 从相同的 html 生成了一个 pdf,所以我想我没有正确使用 iTextSharp。
编辑:
在cmets中我已经听从了Bruno的建议,所以我把return改成了:
bytes = ms.ToArray();
return File(new MemoryStream(bytes), "application/pdf");
现在结果是一个2页的空pdf,所以更好,但是有没有可能让它更准确,因为pdf的内容里面应该有一些文字?
【问题讨论】:
-
您是否尝试过在文本编辑器中打开 PDF 以查看其内容?
-
为什么加这行:
writer.CloseStream = false;底层MemoryStream永远不会关闭!另外:您引用的答案明确地将ms转换为数组:ms.ToArray()。 -
@DavidG,不,但谢谢这是个好主意!
-
@meJustAndrew 你真的应该听听布鲁诺在这里,他在 iText 工作,所以有点知道他在说什么......
-
谢谢@BrunoLowagie,它可以在没有
writer.CloseStream = false;的情况下工作,所以这确实是我的错误。
标签: asp.net-mvc pdf-generation itext