2014-12-12 3 views
1

나는 지난 며칠 동안 HTML 문자열을 입력으로 사용하는 사용하기 쉬운 라이브러리를 검색하고 클라이언트 브라우저에 파일로 PDF 출력을 생성하는 데 많은 시간을 보냈다.HTML을 PDF로 변환 - 거의 작동하지만

제가 시도한 몇 가지 도구 중 NReco PDF Generator이라는 제품이 wkhtmltopdf에 기반한 많은 파생 툴 중 하나 인 것은 내 필요에 맞는 것 같습니다.

가 여기 내 테스트 코드입니다 : 위의 코드와

var strHtml = String.Format("<h1>Hello World!</h1"); 

Response.Clear(); 
Response.ClearHeaders(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "attachment; filename=test.pdf"); 

(new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(strHtml, null, Response.OutputStream); 
Response.End(); 

, 나는 PDF 파일이 브라우저에 전달되는 것을 볼 것으로 예상. 대신 개발자 콘솔에서 생성되는 출력 스트림 만 볼 수 있습니다. (BTW, 나는 크롬을 사용하고있다)

내 질문은 의도 한대로 작동한다고 생각하는 제품이 어떻게 작동하는지에 관한 것이 아니라 내 코드가 .NET의 Response 개체에 대한 동작을 빠뜨리는 지 여부와 관련이있다. 아무것도 잘못하고있다. 앞에서 설명한 것처럼 변환 된 Pdf 스트림을 콘솔에서 볼 수 있습니다. 파일의 스트림을 캡처하여 클라이언트에 전달하는 것만으로도 충분하다고 생각합니다.

답변

0

PDF를 바이트 배열로 저장 한 다음 응답에 씁니다. 대신 NReco's site에서 찍은에 대한

(new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(strHtml, null, Response.OutputStream); 

영감의

var pdfBytes = new NReco.PdfGenerator.HtmlToPdfConverter().GeneratePdf(strHtml); 
Response.BinaryWrite(pdfBytes); 

.

+0

메이슨 (물론, 당신이 using NReco.PdfGenerator;을 추가해야합니다)에 대한

Response.Clear(); Response.ClearHeaders(); 

다음 작품 -이 중 하나입니다 전에 시도한 몇 가지 접근 방식과 작동하는 것처럼 보이지만 PDF가 브라우저로 전달되는 것을 보지 못했습니다. – BinaryCat

+0

브라우저의 디버깅 도구를 사용하여 서버의 응답을 검사하십시오. 파일이 가로 질러 가거나 HTML 문서에 어떻게 든 포함되는지 확인하십시오. – mason

2

누락 된 줄은 Response.BinaryWrite(pdfBytes)입니다. 이 줄이 없으면 PDF가 사용자에게 렌더링되지 않습니다.

지금까지 내가 줄 필요가 없습니다 당신을 말할 수 : 나를

string strHtml = String.Format("<h1>Hello World!</h1"); 
HtmlToPdfConverter pdfConverter = new HtmlToPdfConverter(); 
var pdfBytes = pdfConverter.GeneratePdf(strHtml); 

Response.ContentType = "application/pdf"; 
Response.ContentEncoding = System.Text.Encoding.UTF8; 
Response.AddHeader("Content-Disposition", "Inline; filename=TEST.pdf"); 
Response.BinaryWrite(pdfBytes); 
Response.Flush(); 
Response.End();