首页 > 解决方案 > 在 Blazor 页面中从字节数组显示 PDF 的问题

问题描述

我已经阅读了有关如何将存储在 SQL Server db 中的字节数组varbinary作为 PDF 并在 Blazor 网站中显示为 PDF 的所有建议。我在 ASP.Net 中取得了成功,背后有 aspx 页面和代码,但我似乎找不到 Blazor 的正确组合(ShowPDF.razor和背后的代码ShowPDF.razor.cs

这是我在后面代码中的变体:

  1. aReport.ReportDocument 正在从数据库返回 aReport.DocumentSize 的字节数组

     FileStreamResult GetPDF()
     {
         var pdfStream = new System.IO.MemoryStream();
         this.rdb = new ReportData();
         aReport = rdb.GetWithReport(1);
    
         pdfStream.Write(aReport.ReportDocument, 0, aReport.DocumentSize);
         pdfStream.Position = 0;
         return new FileStreamResult(pdfStream, new Microsoft.Net.Http.Headers.MediaTypeHeaderValue("application/pdf"));
     }
    

或 2. 将二进制数组直接转为 base 64 编码:

return Convert.ToBase64String(aReport.ReportDocument);

虽然这两个进程返回数据,但我无法找到如何设置剃刀页面来显示结果。我努力了:

<object src="@Url.Action("GetPDF")"/> 

和其他变体没有成功。

谢谢!

标签: pdfbyteblazor

解决方案


好的,我终于找到了解决方案。ShowPDF.razor.cs 页面后面的代码是:

public partial class ShowPDF: ComponentBase
{
    private IReportData rdb;       // the database
    private ReportModel aReport;   // report model 

    /*
    aReport.ReportDocument holds the byte[]
    */
    string GetPDF(int ReportId)
    {
        this.rdb = new ReportData();
        aReport = rdb.GetWithReport(ReportId);
        return "data:application/pdf;base64," + Convert.ToBase64String(aReport.ReportDocument);
    }
}

ShowPDF.razor 页面是:

@page "/ShowPDF"
@page "/ShowPDF/{Report:int}"


@code {
    [Parameter]
    public int Report { get; set; }
}
<embed src="@GetPDF(Report)" visible="false" width="1500" height="2000" />

推荐阅读