2012-11-29 2 views
1

MVC 3에서 제 3 자 compnents를 사용하지 않고이 작업을 수행 할 수 있는지 궁금합니다. 무료 컴포넌트를 사용할 수 있습니다. 거기에는 몇 가지 링크가 있지만 대부분보고 및 기타 코드에 관심이있는 것 같습니다. 이런 종류의 일을한다고 주장하는 샘플은 컴파일하지 않는 것 같습니다. 내 데이터베이스에서 PDF를 저장하고 검색하는 데 문제가 없지만 PDF를 File 또는 FileStreamResult으로 반환하면 사용자에게 다운로드하라는 메시지가 표시됩니다. 더 바람직한 접근 방법은 실제로 브라우저 내부에서 PDF를 렌더링하는 것입니다. 나는 iTextSHarp를 살펴 봤지만 어느 정도까지 일을하고 있지만 완벽한 해결책은 아닙니다. 예를 들어 클라이언트에 Adobe Reader가 설치되어있는 경우에만 PDF가보기 안에 표시됩니다. 그렇지 않으면 다운로드하라는 메시지가 나타납니다. 기술적으로, 저는 주로 PDF 뷰어를 찾고 있습니다. 어떤 아이디어?MVC 뷰 내의 데이터베이스에서 PDF를 렌더링 하시겠습니까?

답변

3

현재로서는 시도하지는 않았지만 this이 가장 좋은 해결책으로 보입니다. C#으로 이식해야하며 MVC를 호환 가능하게 만들었지 만 타사 구성 요소 인 like Syncfusion에서 튀는 것을 원하지 않는다면이 방법이 될 것 같습니다.

EDIT 4 일

12월 나는 해결 방법을 찾고 좋은 몇 일 동안, 나는 내가 꽤 좋은 하나를 발견했습니다 생각합니다. 고스트 스크립트 변환기에는 이미 수많은 C# 래퍼가 있으므로 자신의 구성표를 배포하지 않으시겠습니까? (나는 그것을 끝내었다). 래퍼 :

Mark Redman's Wrapper

Matt Ephraim's Wrapper

그리고 좀 더 실용적인 솔루션을 원하는 경우, CodeProject의 2 개 환상적인 기사가 있습니다 :

How To Convert PDF to Image Using Ghostscript API

Convert a PDF into a series of images using C# and GhostScript

내가 그러나 해결책은 여전히 ​​아니오라고 생각하십시오. 최적. 예를 들어, Ghostscript 변환기는 파일 디렉토리와 함께 작동합니다. 즉, 변환기를 사용하기 위해 디스크에 PDF 파일의 실제 사본을 생성해야하므로 바이트 배열을 사용하여이를 달성 할 수 있다면 훨씬 더 좋았을 것입니다. 아마도이를 해결할 방법이있을 것입니다.

편집 21 년 12 월

그리고 마지막으로, 완성도의 술과 실제 질문에 대답을 위해 : 좀 더 연구 한 후

을 나는 순간에 최고의 PDF 뷰어가 있음을 체결했습니다 환상적인 PDF.js 라이브러리. 나는 몇 가지를 시도했고, 나를 위해 이것은 지금까지 최고입니다. 심지어 타사 구성 요소 (Syncfusion's Pdf Viewer)를 사용해 보았습니다. 심지어 PDF.js처럼 일관성이 없거나 안정적이지 않았습니다. PDF.js의 단점 :

  1. 약간 혼란스럽고 어려운 문서는
  2. 그것은 최신 브라우저 (너무 많은 HTML5을 사용하기 때문에 자연)에서 작동 somehwat 약한, 시작합니다. 나는 그것을 Firefox 17과 Chrome 23에서 성공적으로 테스트했습니다. IE9에는 몇 가지 문제가 있지만 IE10에서는 완벽하게 작동합니다. 그러나 나는 전혀 신경 쓰지 않는다. 웹 사이트 사용자가 응용 프로그램 (또는 다른 웹 응용 프로그램)에서 강력한 기능을 기대하는 경우 최신 기술을 사용해야합니다.
  3. 바이트 배열/스트림으로 PDF를로드하는 방법이없는 것 같습니다 (따라서 적어도 필자가 아는 것은 아님). 원하는 경우 디스크에 PDF 사본을 만들어야합니다. 그것을 표시하십시오. 이러한 무시할 수없는 딸꾹질 외에도 PDF.js는 정말 놀랍습니다.

PDF.js here의 작지만 완전한 기능을 갖춘 MVC 데모를 만들었습니다.

2

iTextSharp를 사용하여 좋은 결과를 얻었습니다. 별도의 창에서 Adobe를 설치하지 않아도 PDF를 열 수 있습니다 (필자는 Foxit Reader를 사용하고 있습니다). 실제로 필자는 iTextSharp를 전혀 사용하지 않고있다.

내보기 :

<a href="@Url.Action("RetreiveFile", "File", new { id = fileId })" target="_blank"> 
    OpenPdf 
</a> 

내 컨트롤러 : 내 contentdata 이진 데이터로 데이터베이스에 저장되어있는 반면

public ActionResult RetreiveFile(int id) 
    { 
     ComplexClass myClass= _FileModel.GetFile(id); 
     byte[] img = myClass.ContentData.ToArray(); 
     Response.AppendHeader("Content-Disposition", "inline; filename=xyz.pdf"); 
     return File(img, "application/pdf"); 
    } 

.

어쨌든, 어쩌면 당신의 질문을 오해 미안하지만 난 내 프로젝트에서 PDF 파일을 처리하고 브라우저가 결코 PDF :

안부를 다운로드하라고 요청하지 방법이있다.

+1

감사합니다. IE 9로 코드를 테스트 한 이래로 뭔가 실종되었습니다. Chrome 및 FF에서는 게시했지만 IE에서는 작동하지 않습니다. IE와는 달리 Chrome과 FF에는 PDF 뷰어가 내장되어있어 사용자에게 즉시 다운로드하라는 메시지가 표시됩니다. –

+0

mhm .... IE9와 관련이있을 때 실제로는 놀라운 것이 아닙니다. 하지만 실제로 내 코드는 IE9에서 작동합니다. 아마도 IE9에 엄격한 보안 설정이 있습니까? (또는 아마도 기본값 일뿐입니다.) – gardarvalur

+0

사실 저는 PDF를 제대로 렌더링하기 위해 브라우저에 설치된 뷰어를 설치해야한다고 생각합니다. Foxit 리더를 설치하지 않았으며 PDF를 렌더링 한 브라우저가 없기 때문에 다운로드하라는 메시지가 표시되지 않습니다. 아직까지도 PDF 뷰어가 필요합니다. –

관련 문제