9

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

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

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

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

我已经看到了 MVC 的答案,但我使用的是 ASP.NET Web 应用程序。

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

4

4 回答 4

12

在 jsFiddle中尝试过,它在 Chrome 和 FF 中运行良好,还需要检查其他浏览器。

转换byte[]Base64使用,

string base64PDF = System.Convert.ToBase64String(outputPDF, 0, outputPDF.Length);

我所要做的就是在源代码中指定MIME typeas并给出.data:application/pdf;base64,Base64PDF

<object data="data:application/pdf;base64, JVBERi0xLjQKJeLjz9MKMyA..." type="application/pdf" width="160px">
    <embed src="data:application/pdf;base64, JVBERi0xLjQKJeLjz9MKMyA..." type="application/pdf" />
</object>

我无法通过附加来隐藏 FF 中出现的顶部工具栏#toolbar=0&navpanes=0&statusbar=0

IE8 需要一个保存的 pdf 文件才能显示。

于 2013-07-10T05:07:33.697 回答
6

尝试这个

Response.ContentType = "application/pdf";
Response.AddHeader("content-length", outputPDF.Length.ToString());
Response.BinaryWrite(outputPDF);
于 2013-06-14T12:21:01.373 回答
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;
    }
}
于 2019-08-16T01:17:44.747 回答
0

像这样的东西会起作用吗?

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

您只需要将您的 pdf 文件传递​​到对象数据源中。

于 2013-07-09T18:05:34.560 回答