Как открыть отчет в формате PDF (из средства просмотра отчетов) с помощью ajax в asp.net mvc - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу напечатать файл PDF из своего приложения (отчет rdlc).Поэтому мне нужно отобразить файл в браузере без загрузки с помощью Ajax.Следующий код пытается открыть файл с помощью тега <a> (<a href="~/.../" target="_blank">print </a>), но он не работает в вызове ajax.Пожалуйста, предоставьте образец кода или инструкцию на C #.

Вот генерация PDF из средства просмотра отчетов:

public void CreatePdfFromList(string fileName, string reportpath, ArrayList dsNameArray, ArrayList DTArray)
{
    ReportViewer viewer = new ReportViewer();
    Warning[] warnings = null;
    string[] streamIds = null;
    string mimeType = string.Empty;
    string encoding = string.Empty;
    string extension = string.Empty;
    string filetype = string.Empty;

    viewer.SizeToReportContent = true;
    viewer.LocalReport.ReportPath = reportpath;
    viewer.ProcessingMode = ProcessingMode.Local;

    for (int i = 0; i < dsNameArray.Count; i++)
    {
        ReportDataSource rds1 = new ReportDataSource((string)dsNameArray[i], (IEnumerable)DTArray[i]);
        viewer.LocalReport.DataSources.Add(rds1);
    }

    viewer.LocalReport.Refresh();

    byte[] pdfContent = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

    Response.Buffer = true;
    Response.Clear();
    Response.ContentType = mimeType;
    //Response.AddHeader("content-disposition", "attachment; filename=" + fileName + "." + extension);
    Response.BinaryWrite(pdfContent);
    //Response.Flush(); // send it to the client to download
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.End();
}

, а вот ajax:

$.ajax({
        type: "GET",
        url: "/.../",
         data: {...},
         success: function (json) {
         //window.open(json);
         //open file i think...
         }
         })

При попытке показать содержимое в формате pdf я использую console.log (json).Он показывает мне строку, но содержимое выглядит так:

�~�

1 Ответ

0 голосов
/ 20 сентября 2019

In AJAX

function openpdf()
    {
        $.ajax({
            url: '@Url.Action("OpenPDF", "TrangChu")',
            type: "GET",
            success: function (data) {
                 let pdfWindow = window.open("");
            pdfWindow.document.write("<iframe width='100%' height='100%' src='data:application/pdf;base64," + data + "'></iframe>");

            }
        });
    }

In View

  <button onclick="openpdf()">Open PDF</button>

In Controller

 string strAttachment = Server.MapPath(@"/Reports/haha.pdf");
 byte[] renderdByte = lr.Render("Pdf", "", out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
             string base64EncodedPDF = System.Convert.ToBase64String(renderdByte);
        return Json(base64EncodedPDF, JsonRequestBehavior.AllowGet);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...