我正在使用iTextSharp生成pdf。我可以从PDF字节[]中保存PDF文件。
byte[] outputPDF = cnt.CreateBreakPDF();
File.WriteAllBytes(pdfOutPutPath, outputPDF);
将输出byte[]
显示到网页的最佳方法是什么?
我想在页面中的div中显示PDF。不是PDF作为完整的回复。
我见过MVC的答案,但我正在使用ASP.NET Web应用程序。
有比使用HTTP处理程序更好的方法吗?我不想发送创建PDF作为查询字符串的所有细节。
答案 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传递到对象数据源。