2010-01-13 3 views
17

간단히 말해, 누군가가 링크를 클릭하여 일회용 pdf를 얻을 수 있기를 바랍니다. PDF 파일을 만들 수있는 라이브러리가 있으므로 문제가되지 않습니다.ASP.NET의 웹 요청에서 PDF를 반환하려면 어떻게해야합니까?

aspx 페이지에 대한 링크를 생성하고, 해당 페이지에서 PDF를 생성하고, pdf를 파일 시스템에 저장 한 다음 저장된 pdf에 Response.Redirect 할 수 있습니다. 그런 다음 PDF 파일을 계속 추적하고 정리해야합니다.

우리는이 데이터를 보관할 필요가 없으므로 가능한 경우 aspx 페이지에서 pdf를 생성하고 원래 요청에 대한 응답으로 직접 제공해야합니다. . 이것이 가능한가?

(우리의 경우, 우리는 C#을 사용하고, 우리는 다시 PDF 서비스를 제공하기를 원하지만 모든 솔루션은 아마 다양한 .NET 언어에 대한 작업 및 파일 형식을 반환하는 것처럼 보인다.)

+0

정확한 복제본 : http://stackoverflow.com/questions/177/how-do-i-programmatically-create-a-pdf-in-my-net-application – RedFilter

+3

위의 내용을 의미하지는 않습니다. – nothrow

+0

(나는 두 사람이 속독으로 닫히고 그런 유형의 질문을 가리키게 될 것이라는 것을 알고 있었다. 그래서 나는 두 번째 문장을 포함시켰다. 나는 첫 문장을 만들어야했다. :) – Beska

답변

30

당신에게 수 가정

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

Response.BinaryWrite(yourPdfAsByteArray); 

Response.Flush(); 

Response.End(); 
+1

이것은 매우 유망 해 보입니다 ... 나는 이 라인을 따라 뭔가있을 것이지만, 세부 사항을 알기위한 배경 지식은 없습니다. 응답 주셔서 감사합니다; 나는이 전술을 시도 할 것이다. – Beska

+0

이것은 정확하게 문제를 못 박았습니다. 감사! – Beska

+0

관련 질문 하나 (별개의 질문을 열어야 할 수도 있지만이 답변과 밀접하게 관련되어 있습니다 ...) Response.Flush()가 필요한 이유는 무엇입니까? 우리가 그 행을 가지고 요청을 한 후에 누군가가 브라우저를 닫으면 오류가 발생합니다 : "원격 호스트가 연결을 닫았습니다."만약 우리가 그 라인을 남겨 두었다면 아무런 오류도없고 모든 것이 제대로 작동하는 것 같아요. MSDN 문서를 읽는 것은 이것이 꼭 필요한지 아닌지를 밝히지 않았을 것입니다 . – Beska

2

HTTP가 작동하는 방식을보십시오. 클라이언트 (= 브라우저)는 확장 기능에 의존하지 않고 서버가 문서와 함께 일부 메타 데이터 만 반환하기를 원합니다.

메타 데이터는 Response.AddHeader를 사용하여 추가 할 수 있으며 '메타 데이터 라인'은 이름과 값으로 구성됩니다.

Content-Type은 관심있는 속성이며 값은 데이터의 MIME 유형입니다 (연구 : HTTP 헤더의 경우 RFC1945, MIME 유형의 경우 Google).

서수용 aspx 페이지 (html, ....)의 경우 속성은 'text/html'입니다 (그리 간단하지는 않지만이 예제에서는 충분합니다.). JPG 이미지를 반환하면 'image.gif'라는 이름을 가질 수 있지만 Content-Type에 'image/jpeg'를 보내면 JPG 이미지로 처리됩니다. pdf의 콘텐츠 유형은 'application/pdf'입니다.

브라우저는 Adobe 플러그인과 같이 기본 동작에 따라 작동하며 PDF 창에 PDF를 표시합니다. PDF 용 플러그인이 없으면 파일 등을 다운로드해야합니다.

내용 처리 헤더에 데이터로 수행해야 할 작업이 나와 있습니다. 명시 적으로 클라이언트가 HTML/PDF/무엇이든 '다운로드'하고 기본적으로 표시하지 않으려면 '첨부 파일'값을 원하는 값으로 지정하십시오. 그것은 (Justin Niessner가 제안한) 다른 매개 변수를 가져야합니다.

http://server/download.aspx?file=11 -> Content-Disposition : attachment; filename = file.jpg는 파일이 기본적으로 어떻게되어야하는지에 대해 말합니다. 명명 된.

+0

그건 도움이되는 정보입니다. – malckier

관련 문제