Как отобразить pdf в iframe из байтового массива c # MVC .NET Core - PullRequest
0 голосов
/ 06 декабря 2018

Я искал в Интернете ответ, но безуспешно.Мне интересно, как и если я могу отрисовать PDF-файл с помощью Razor в 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>

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Хорошо, поэтому через несколько дней мне удалось заставить его работать, изменив значение 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», «AdjustController») и заменил его следующим:URI данных в качестве источника iframes.

0 голосов
/ 07 декабря 2018

Вы можете изменить свой код следующим образом:

public ActionResult ByteConverter()
{
    ApiClient api = new ApiClient("http://localhost:43674/ApiCore");
    var result = await api.GetAsync();
    var pdfData = result.Pdf;
    MemoryStream Stream = new MemoryStream(pdfData);
    Stream.Write(pdfData, 0 , pdfData.Length);
    Stream.Position = 0;
    return new FileStreamResult(Stream,"application/pdf");
}

В поле зрения:

<div class="tab-pane active" id="dokument">
    <iframe src="@Url.Action("ByteConverter", "RegulationController")"></iframe>
</div>

Затем удалите ByteConverter(viewModel.Pdf); в представлении индекса. И также подтвердите, что вы установили правильное имя контроллера, используйте Home вместо HomeController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...