将ASP.NET生成的pdf byte []显示到网页而不保存文件

时间:2013-06-14 12:15:49

标签: c# asp.net pdf itextsharp mime

我正在使用iTextSharp生成pdf。我可以从PDF字节[]中保存PDF文件。

byte[] outputPDF = cnt.CreateBreakPDF();
File.WriteAllBytes(pdfOutPutPath, outputPDF);

将输出byte[]显示到网页的最佳方法是什么?

我想在页面中的div中显示PDF。不是PDF作为完整的回复。

我见过MVC的答案,但我正在使用ASP.NET Web应用程序。

有比使用HTTP处理程序更好的方法吗?我不想发送创建PDF作为查询字符串的所有细节。

4 个答案:

答案 0 :(得分:9)

我试过了this in jsFiddle,它在Chrome& FF,还需要检查其他浏览器。

使用

byte[]转换为Base64
string base64PDF = System.Convert.ToBase64String(outputPDF, 0, outputPDF.Length);

我所要做的就是在源代码中将MIME type指定为data:application/pdf;base64,,并提供Base64的{​​{1}}版本。

PDF

我无法通过附加<object data="data:application/pdf;base64, JVBERi0xLjQKJeLjz9MKMyA..." type="application/pdf" width="160px"> <embed src="data:application/pdf;base64, JVBERi0xLjQKJeLjz9MKMyA..." type="application/pdf" /> </object> 来隐藏在FF中显示的顶部工具栏。

IE8需要显示已保存的pdf文件。

答案 1 :(得分:4)

试试这个

Response.ContentType = "application/pdf";
Response.AddHeader("content-length", outputPDF.Length.ToString());
Response.BinaryWrite(outputPDF);

答案 2 :(得分:2)

对于某些项目,我一直在使用Convert.ToBase64String(content),直到今天,它的18页文件约为1 MB。 Chrome控制台的错误是Failed to load resource: net::ERR_INVALID_URL。我猜是因为字符串大小吗?!

我最终使用了Web API,只是将其返回为FileStreamResult而不是Base64字符串。

var stream = new MemoryStream();
await stream.WriteAsync(content, 0, content.Length);
stream.Position = 0;
return new FileStreamResult(stream, "application/pdf");
  

更新:在剃须刀页面上显示基本上相同。我只是在此处复制了用于使用RingCentral检索传真内容的代码。更好的是,只需使用FileContentResult,因为您已经拥有byte[]

public async Task<IActionResult> OnGet(string messageId)
{
    try
    {
        using (var rc = new RingCentral.RestClient(setting.ClientId, setting.ClientSecret, setting.Production, "Fax"))
        {
            await rc.Authorize(setting.UserName, setting.Extension, setting.Password);
            var extension = rc.Restapi().Account().Extension();
            var outputPDF = await extension.MessageStore(messageId).Content(messageId).Get();

            return new FileContentResult(outputPDF, "application/pdf");
        }
        return Page();
    }
    catch (Exception ex)
    {
        _logger.Error(ex.Message);
        throw;
    }
}

答案 3 :(得分:0)

这样的事情会起作用吗?

<div>
<object data="myPDF.pdf" type="application/pdf" width="200" height="500">
alt : <a href="myPDF.pdf">myPDF.pdf</a>
</object>
</div> 

您只需要将pdf传递到对象数据源。