2017-03-09 1 views
0

현재 ITextSharp를 사용하여 브라우저에 표시되지 않는 인쇄용 PDF를 만듭니다. PDF 파일의itextsharp pdf가 생성되었지만 브라우저에 표시되지 않습니다.

세대는 아래의 jQuery를 트리거 인쇄 아이콘을 클릭을 통해 처리됩니다

<script type="text/javascript"> 
function printDiv() { 
    $.post("@Url.Action("DownloadAdultReportPdf", "Monthly")", 
    { 
     RegionId: $("#RegionId").val(), 
     DatCodeId: $("#DatCodeId").val(), 
     AgencyId: $("#AgencyId").val(), 
     ReportVersionId: $("#ReportVersionId").val() 
    }); 
} 

인쇄 아이콘 코드는 다음과 같습니다

<input class="print-icon tooltip" title="print this report" type="image" src="~/Content/images/printer-icon-23.png" onclick="printDiv()"/> 

은 클릭 이 아이콘은 DownloadAdultReportPdf라는 MonthlyController의 FileResult로 이동합니다. 코드는 아래와 같습니다.

public FileResult DownloadAdultReportPdf(AdultViewModel model) 
    { 
     MemoryStream workStream = new MemoryStream(); 
     DateTime dTime = DateTime.Now; 
     string strPDFFileName = string.Format("SamplePdf" + dTime.ToString("yyyyMMdd") + "-" + ".pdf"); 
     Document doc = new Document(); 
     doc.NewPage(); 
     Paragraph paragraph = new Paragraph(); 
     paragraph.Add("Hello World!"); 
     doc.SetMargins(0f, 0f, 0f, 0f); 

     string strAttachment = Server.MapPath("~/Downloads/" + strPDFFileName); 

     PdfWriter.GetInstance(doc, workStream).CloseStream = false; 
     doc.Open(); 
     doc.Add(paragraph); 
     doc.Close(); 

     byte[] byteInfo = workStream.ToArray(); 
     workStream.Write(byteInfo, 0, byteInfo.Length); 
     workStream.Position = 0; 

     return File(workStream, "application/pdf", strPDFFileName); 
    } 

사용자 브라우저에 PDF를 표시하려면 어떻게합니까?

+0

브라우저는 pdf를 준비 할 수 있어야합니다. 그리고'return File (workStream, ....)'에 코드를 디버깅 해 봤어? –

+0

내가 테스트중인 브라우저는 Chrome의 최신 버전입니다. workStream 변수에 대한 인텔리 센스에서 ReadTimeout을 가져오고 두 경우 모두 WriteTimeout 오류가 System.InvalidOperationException으로 표시됩니다. – CryoFusion87

+0

크레이 테에 두 가지 문제가 있습니다. pdf가 작동하지 않습니다. jquery'post' 호출이 파일을 반환 할 때 응답을 처리하기 위해 정의 된'success' 함수가 없기 때문에 jquery 코드 페이지가 두 번째로 pdf를 다운로드 /보기로 리디렉션하지 않습니다. –

답변

1

는 C# 코드에 몇 가지 문제가 있습니다

Document doc = new Document(); 
doc.NewPage(); 

당신은 그것을 개방 그걸로 PdfWriter을 연결하지 않고 Document doc를 사용합니다. 이런 식으로 페이지 내용을 변경할 수있는 지침은 분실 될 가능성이 큽니다.

여기
PdfWriter.GetInstance(doc, workStream).CloseStream = false; 
doc.Open(); 
doc.Add(paragraph); 
doc.Close(); 

byte[] byteInfo = workStream.ToArray(); 
workStream.Write(byteInfo, 0, byteInfo.Length); 

당신은 효과적으로 byteInfo에 완성 된 PDF의 사본을 얻을 workStream에 finishedPDF에 추가 : 누락 된 단계는 결국 여기에 실행됩니다! 따라서 workStream에는 두 개의 동일한 PDF 사본이 순서대로 포함되어 있습니다.

workStream.Position = 0; 
return File(workStream, "application/pdf", strPDFFileName); 

여기에서 완성 된 PDF 사본 2 개를 사용하여 MemoryStream을 반환합니다.

유효한 PDF를 표시하려면이 문제를 해결하십시오.

JavaScript 코드에 추가 문제가있을 수 있습니다.