我在网上搜索了答案,但没有找到答案。我想知道如何以及是否能够使用 Razor 将 pdf 文件渲染到位于我 View 中的 iFrame 中。 pdf 是一个字节数组并加载到我的模型中。
到目前为止,这是我的代码:
public ActionResult ByteConverter(byte[] pdfData)
{
MemoryStream Stream = new MemoryStream(pdfData);
Stream.Write(pdfData, 0 , pdfData.Length);
Stream.Position = 0;
return new FileStreamResult(Stream,"application/pdf");
}
我的模型:
public async Task<ActionResult> Index()
{
ApiClient api = new ApiClient("http://localhost:43674/ApiCore");
var result = await api.GetAsync();
RegulationViewModel viewModel = new RegulationViewModel
{
ConnectedToRoadMap = result.ConnectedToRoadMap,
Decided = result.Decided,
Enforced = result.Enforced,
Id = result.Id,
Paragraph = result.Paragraph,
Pdf = result.Pdf,
Published = result.Published,
Region = result.Region,
StructuredInfo = result.StructuredInfo,
Title = result.Title,
ValidThru = result.ValidThru
};
ByteConverter(viewModel.Pdf);
return View(viewModel);
}
我的观点:
<div class="tab-pane active" id="dokument">
<iframe src="@Url.Action("ByteConverter", "RegulationController")"></iframe>
</div>
最佳答案
好吧,几天后我设法通过将模型中的 Pdf 值更改为 Convert.ToBase64String(result.Pdf) 来使其工作,如下所示:
public async Task<ActionResult> Index()
{
ApiClient api = new ApiClient("http://localhost:43674/ApiCore");
var result = await api.GetAsync();
RegulationViewModel viewModel = new RegulationViewModel
{
ConnectedToRoadMap = result.ConnectedToRoadMap,
Decided = result.Decided,
Enforced = result.Enforced,
Id = result.Id,
Paragraph = result.Paragraph,
Pdf = Convert.ToBase64String(result.Pdf),
Published = result.Published,
Region = result.Region,
StructuredInfo = result.StructuredInfo,
Title = result.Title,
ValidThru = result.ValidThru
};
return View(viewModel);
}
在我看来,我完全跳过了 @Url.Action("ByteConverter", "RegulationController") 并将其替换为:
<iframe src="data:application/pdf;base64,@Model.Pdf" type="application/pdf"></iframe>
在除 IE 之外的所有网络浏览器中都能正常工作,这是因为 Internet Explorer 不支持使用 DATA URI 作为 iframe 的来源。
关于c# - 如何从字节数组 c# MVC .NET Core 在 iframe 中显示 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53648736/