2009-02-06 5 views
2

HTML 컨텐츠를 PDF로 내보내고 있습니다. 파일이 '% PDF-'로 시작하지 않습니다.

System.IO.StringWriter sWriter = new System.IO.StringWriter(); 

    System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(sWriter); 

    Response.Buffer = true; 
    FormId.RenderControl(htmlWriter); 
    Response.ContentType = "application/pdf"; 
    // Added appropriate headers 
    Response.AddHeader("Content-Disposition", "inline; filename=XXX.pdf"); 
    Response.AddHeader("Content-Length", htmlWriter.ToString().Length.ToString()); 
    Response.Output.Write(sWriter.ToString()); 

    Response.Flush(); 
    Response.Close(); 

FormId

콘텐츠의 내 사업부의 과거 ..

내가

" '%의 PDF-'로 시작하지 않는 파일"나는 포함했다 Response.clear 같은 오류를 얻고있다 (이다); 출력이 나오지 않습니다

+0

sWriter가 실제로 유효한 PDF 파일을 제공합니까? 처음 4 바이트를 확인하십시오. – paxdiablo

답변

3

출력 스트림에서 pdf 앞에 html (div라고 말한 것)을 렌더링하면이 둘이 결합됩니다. 이로 인해 출력물을보고있는 모든 앱이 파일을 손상된 파일로 해석하게됩니다. 그 문제가 해결되지 않으면

Response.Buffer = true; 
FormId.RenderControl(htmlWriter); 

모든 것을하기 전에 Response.Clear() 호출을 추가 : 나는 처음 두 행을 제거하려고 할 것입니다.

이것은 모두 sWriter가이 코드 블록의 시작 부분에 PDF를 포함한다고 가정합니다. 그렇지 않은 경우 조금 더 많은 컨텍스트가 도움이 될 수 있습니다.

가능한 한 모든 페이지에서이 파일을 .ashx 또는 다른 IHttpHandler로 옮기십시오.

+0

좋은 조언, http 처리기에 대한 오버 헤드는 페이지 처리기보다 훨씬 낮습니다. –

0

출력을 스트리밍하기 전에 Response.Clear()를 수행하십시오.

1

일부 HTML 콘텐츠를 PDF에 쓰는 동안 동일한 문제가 발생했습니다.

마지막으로 잘못된 HTML 콘텐츠로 인해이 문제가 발생했습니다.

예 : <ul> 꼬리표가없는 태그 </ul>.

적절한 닫는 태그를 넣으면 제대로 작동합니다.