2011-02-24 10 views
0

.NET4 MVC3 VS2010을 사용하고 있습니다. 우리는 ABCpdf를 사용하여 HTML을 pdf로 변환하고 브라우저로 스트리밍합니다. 문제는 pdf를 새 창이나 탭에서 열 수있는 방법을 찾아야한다는 것입니다. 나는 비슷한 문제에 관한 많은 글을 읽었지만이 특별한 경우에 도움이 될만한 것을 찾을 수 없었다. 페이지의 버튼 (링크가 아님)을 클릭하면 컨트롤러 동작으로 해당 페이지의 HTML에서 메모리 스트림을 만든 다음 pdf로 변환하여 브라우저로 보냅니다. 해당 페이지에 대한보기버튼을 클릭하거나 새 창이나 탭에서 스트리밍 된 페이지 열기

번호 : VAR = pdfUrl 및 String.format ("window.location.href ="{0} ";", Html.BuildUrlFromExpressionForAreas (c => c.GeneratePdf (myURL이))) ; (Html.Button ("btnPdf", "PDF를 생성", HtmlButtonType.Button, pdfUrl))) @ }

코드 MyController에 행동 : 공공 ActionResult의 GeneratePdf (문자열 URL) 문서의 pdfDoc = 새로운 문서 (); int docId; MemoryStream outputStream = 새 MemoryStream();

및 기타 pdf 변환 코드 ..... ..... byte [] pdfData = pdfDoc.GetData(); outputStream.Write (pdfData, 0, pdfData.Length); outputStream.Position = 0; 새로운 FileStreamResult를 반환합니다 (outputStream, "application/pdf"); }

잘 작동하지만 pdf는 동일한 창/탭에 표시됩니다. 브라우저에서 새 창이나 탭으로 데이터를 스트리밍하려면 어떻게해야합니까? 신생아입니다. 자세한 도움을 주시면 감사하겠습니다. 이 경우 대상 속성이 작동하지 않습니다. window.open을 단추에 대한보기 코드로 열 수 없으며 트릭도 수행 할 수 있는지 확신 할 수 없습니다.

@Html.ActionLink(
    "Generate PDF", 
    "GeneratePdf", 
    "MyController", 
    null, 
    new { 
     url = "some url", 
     target = "_blank" 
    } 
) 

또는 당신이 버튼을 원한다면 당신은 자바 스크립트 사용할 수 있습니다 : 사전

답변

0

에서 덕분에 당신은 target="_blank" 속성으로 정상적인 링크를 사용할 수있는 별도의 자바 스크립트 파일에 다음

<input type="button" value="Generate PDF" id="btnPdf" data-pdf-url="@Url.Action("GeneratePdf", "MyController", new { url = "some url" })" /> 

및 jQuery를 사용하고이 버튼의 클릭 이벤트에 가입하고 새 창을 열 수 있습니다.

$(function() { 
    $('#btnPdf').click(function() { 
     // get the url of the data-pdf-url property of the button 
     var url = $(this).data('pdf-url'); 
     window.open(url, 'pdf'); 
     return false; 
    }); 
}); 
+0

빠른 응답 감사드립니다. 두 번째 제안과 비슷한 코드를 만들었지 만 Firebug를 사용하면 "$ is defined"가됩니다. – FZF

+0

@FZF, jquery입니다. 귀하의 페이지에 포함되어 있습니까? –

+0

마스터 페이지에 포함되어 있습니다. 나는 그것을 더 조사 할 것이다. – FZF

0

@Darin Dimitrov, 감사합니다. 페이지에 참조가 누락되었습니다. 그 문제가 해결되었지만 이상하게 작동합니다. 버튼을 처음 클릭해도 아무 것도하지 않습니다 (컨트롤러의 아무 동작으로 돌아 가지 않습니다). 두 번째로 버튼을 클릭하면 새 탭이 열리지 만 자원을 사용할 수 없다는 오류를 표시하고 undefined라는보기를 찾고 있음을 보여줍니다! 이 문제를 무시하고 원래 페이지로 돌아가서 세 번째로 동일한 버튼을 클릭하면 첫 번째 클릭에서 기대했던대로 작동합니다. 새 탭이 열리 며 원래 페이지 데이터가 스트리밍되어 PDF 형식으로 표시됩니다. 모두 올바르게! 어떤 제안? 나는 당신의 도움에 정말 감사드립니다. 내 JS 코드는 다음과 같습니다.

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#btnPdf").click(function() { 
     var url = $(this).attr("href"); 
     $(this).attr("href", '@MvcHtmlString.Create(Html.BuildUrlFromExpressionForAreas<MyController>(c => c.GeneratePdf(Request.Url.ToString())))').bind("click", 
       function() { 
        var win = window.open(url); 
        win.focus(); 
        return false; 
       }); 
    }); 
    }); 
</script> 
+0

@Darin Dimitrov, 내 원래 프로필에 대한 액세스 권한을 잃어 버렸고 대답과 같은 내 의견을 게시해야했습니다. 죄송합니다 모두, 위의 답변은 정말 대답이 아니지만 첫 번째 답변 아래의 의견에 대한 후속 질문! – FZF

+0

@Darin Dimitrov, 원본 페이지로 돌아가서 계속 클릭하면 코드가 실제로 이상하게 작동합니다. 첫 번째 클릭에는 아무런 변화가 없으며 두 번째 클릭은 오류가있는 새 창을, 세 번째 클릭은 오류 및 하나의 오류가있는 새 창을 엽니 다. 정확한 클릭률로 브라우저에 스트리밍, 클릭하면 오류가있는 새로운 승리가 열리고 pdf 출력으로 2 개의 새로운 승리가 열립니다. 다섯 번째 클릭은 한 번의 새로운 오류 승리와 pdf 출력으로 3 번의 새로운 승리를 얻습니다. 이 이상한 행동을 유발할 수있는 제안이 있습니까? – FZF

관련 문제