Создать отчет Crystal в PDF ... Как открыть в новой вкладке или странице? - PullRequest
9 голосов
/ 07 февраля 2012

Я сделал код для создания отчета Crystal Reports в PDF ... Но он открывается на той же странице, пользователь выполнил поиск и нажал на кнопку ... Есть ли способы открыть PDF в новомвкладка или страница?

Мой код:

private void OpenPDF()
{
    ReportDocument Rel = new ReportDocument();
    Rel.Load(Server.MapPath("../Reports/Test.rpt"));
    BinaryReader stream = new BinaryReader(Rel.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat));
    Response.ClearContent();
    Response.ClearHeaders();
    Response.ContentType = "application/pdf";
    Response.BinaryWrite(stream.ReadBytes(Convert.ToInt32(stream.BaseStream.Length)));
    Response.Flush();
    Response.Close(); 
}

Спасибо за помощь!

Ответы [ 2 ]

7 голосов
/ 07 февраля 2012

В самом простом варианте, чтобы открыть новое окно или вкладку, гиперссылка на страницу должна иметь атрибут target, установленный на "_blank".

<a href="GeneratePDF.aspx" target="_blank">Link to open PDF in new window</a>

Или вы можете создать Javascriptвместо этого открывается новое окно.Обязательно вызовите функцию Javascript где-нибудь на странице.

<script type="text/javascript">
function loadPDF() {
   window.open('GeneratePDF.aspx','','scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,location=no,status=no');
}
</script>

Или этот код сообщит веб-браузеру, что файл загружается (а не страница для просмотра в окне браузера).Я думаю, что это лучший подход, потому что пользователь получает выбор открытия или сохранения PDF.Так что это не делает то, что вы просите, но вы можете подумать, что это лучше.

private void OpenPDF(string downloadAsFilename)
{
    ReportDocument Rel = new ReportDocument();
    Rel.Load(Server.MapPath("../Reports/Test.rpt"));
    BinaryReader stream = new BinaryReader(Rel.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat));
    Response.ClearContent();
    Response.ClearHeaders();
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment; filename=" + downloadAsFilename);
    Response.AddHeader("content-length", stream.BaseStream.Length.ToString());
    Response.BinaryWrite(stream.ReadBytes(Convert.ToInt32(stream.BaseStream.Length)));
    Response.Flush();
    Response.Close(); 
}
1 голос
/ 19 ноября 2014

Просто напишите этот код на кнопке ::: OnClientClick = "target = '_blank';"

...