【问题标题】:iTextSharp returns a pdf that can not be openediTextSharp 返回无法打开的 pdf
【发布时间】: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


【解决方案1】:

看到this question的答案,去掉了div里面的width标签,还跑了online XHtml validator调整其他的东西,就可以根据对应的HTML生成一个pdf了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2011-08-31
    • 2015-07-12
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多