2009-12-07 1 views
3

영수증을 HTML 및 프린터 친화적 인 버전으로 표시합니다. HTML 버전은 jQuery 탭 등을 제공하며, 프린터 친화적 인 스크립트 및 외부 의존성, 마스터 레이아웃, 추가 버튼, 인라인 CSS가 없으며 문제없이 HTML로 저장할 수 있습니다.ASP.NET MVC : PDF를 생성하는 뷰 렌더링 : iTextSharp 또는 더 나은 솔루션을 사용 하시겠습니까?

저는 Spark View Engine을 사용하기 때문에 iTextSharp 엔진을 사용하여 PDF를 생성하는 것이 좋습니다. 그러나 몇 단락 후에 나는 너무 성가시다. a) 전체 영수증을 다시 써야하기 때문에 (소스 스파크보기는 약 5 페이지 정도이다.) b) 나는 처음부터 iTextSharp에 문제가 있었다. 예를 들어, 번호가 매겨진 목록은 글 머리 기호가없고 들여 쓰기 및 indentationLeft = "20"은 작동하지 않습니다. 아마도 설명서가 없기 때문일 수 있지만 (a)를 참조하십시오.

PDF에 대한 나의 요구 사항은 매우 간단합니다. 동일한 HTML을 유지하면서 개별 영수증 사이에 페이지 나누기를 삽입하고 싶습니다 (예 : 하나의 문서에 여러 페이지가 있음).

이상한 반 문서화 된 엔진을 사용하여보기를 다시 작성하지 않고보기/HTML에서 PDF를 생성하는 간단한 방법이 있습니까?

업데이트 : 시도한 커뮤니티 HTMLDoc 버전; 내 인라인 CSS 스타일을 사용하지 않고 통화에 유니 코드 기호를 잘못 표시했습니다. wkhtmltopdf는 CSS를 선택했지만 통화 기호에 대해 실패했습니다. 문자셋을 utf-8로 설정하여 인코딩 문제를 해결할 수 있습니다. wkhtmltopdf는 좋은 것처럼 보이지만 아직 페이지 나누기를 설정하는 방법을 알아 내려고합니다 ...

+0

Java의 복잡한 API 인 iTextSharp의 느낌은 말할 것도 없습니다. –

답변

0

마지막으로 인코딩을 설정할 때 잘 작동하는 wkhtmltopdf를 사용하여 페이지 나누기를 설정하는 방법을 찾았으며 CSS를 매우 멋지게 처리합니다. 문제는 Windows 버전에서 stdin/out을 올바르게 처리 할 수 ​​없다는 것입니다 (작동하지 않는 경우 기억이 안납니다) - 최근 버전에서는 수정 될 수 있지만 임시 파일은 정상입니다.

1

HTML을 메모리에 저장할 수 있으면 PDF로 변환 할 수 있습니다. 한번은 xhtmlrenderer을 사용하여 비슷한 것을했습니다. iText를 묶어서 HTML 스트림을 PDF로 변환 할 수있는 JAVA 프레임 워크입니다. JAVA로 작성되었으므로 ikvmc.exe을 사용하여 jar 파일을 .NET 어셈블리로 변환하고 관리 코드에서 직접 사용합니다.

+0

적어도 ikvmc 링크에 대한 멋진, 알고 좋은 물건. 비록 모든 의존성을 끌어 내고 싶지는 모르겠다. – queen3

1
public class Pdf : IPdf 
    { 
     public FileStreamResult Make(string s) 
     { 
      using (var ms = new MemoryStream()) 
      { 
       using (var document = new Document()) 
       { 
        PdfWriter.GetInstance(document, ms); 
        document.Open(); 
        using (var str = new StringReader(s)) 
        { 

         var htmlWorker = new HTMLWorker(document); 

         htmlWorker.Parse(str); 
        } 
        document.Close(); 
       } 

       HttpContext.Current.Response.ContentType = "application/pdf"; 
       HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=MyPdfName.pdf"); 
       HttpContext.Current.Response.Buffer = true; 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
       HttpContext.Current.Response.OutputStream.Flush(); 
       HttpContext.Current.Response.End(); 

       return new FileStreamResult(HttpContext.Current.Response.OutputStream, "application/pdf"); 
      } 
     } 
    } 
+0

+1 omu - itextsharp pdf mvc 구현을 찾고있는 동안 발견되었습니다. 당신이 찾은 이것에 대한 다른 '좋은'포인터들 ?? 스타일 시트 매개 변수의 additon이 make() 메소드에서 유용 할 수 있다고 생각했지만, itexsharp에 대한 기분이 들었다. 따라서 트릭이 누락 된 것인지 확실하지 않다. 나는 인터페이스가 다음과 같다고 가정합니다 : public interface IPdf { FileStreamResult Make (string s); } –

관련 문제