2011-09-30 7 views
0

HTML을 기반으로 PDF를 생성하여 "보고서"를 만들려고합니다.HTML을 PDF로 솔루션 (내용, 머리글 및 바닥 글 처리)

처음에는 원시 인코딩 된 HTML을 문서에 쓰고 자바 스크립트를 사용하여 해당 문서를 인쇄하려고했습니다. 그러나 이로 인해 머리글과 바닥 글이 거의 통제되지 않았습니다.

대부분의 브라우저에서 제대로 작동하는 theadtfoot 요소를 사용하려고 시도했지만 찾고자하는 형식을 얻을 수 없었습니다.

현재 - MVC3에서 iTextSharp를 사용하는 서버 측 솔루션에서 작업하고 싶습니다. 그러나 iTextSharp를 많이 사용하지 않고 계속 진행하는 방법에 대해 조금 분실했습니다.

입력 및 출력에 대한 설명 :

보고서를 만드는 데 4 개 항목이있을 것입니다 :

  • 내용을보고 내가 만약 확실하지 오전으로 현재 HTML을 인코딩(디코딩은 모든 형식을 변경합니다)
  • 보고서 제목그는 생성 된 PDF)의 이름
  • 보고서 머리글(에 표시됩니다 왼쪽 상단) 각 페이지의
  • 보고서 바닥 글는 (각 페이지의 왼쪽 아래에 표시됩니다)

컨트롤러 동작 :

//This will be accessed by a jQuery Post 
[HttpPost] 
public FileStreamResult GeneratePDF(string id) 
{ 
     //Grab Report Item 
     ReportClass report = reportingAgent.GetReportById(id); 

     Document doc = new Document(); 

     //Do I need to decode the HTML or is it possible to use the encoded HTML? 

     //Adding Headers/Footers 

     //Best method of returning the PDF? 
} 
,

답변

2

iTextSharp에서 HTML을 PDF로 변환 할 수 없습니다. 그것은 그것이하도록 설계된 것이 아닙니다. 그것은 다양한 형식 사이의 PDF로 변환하지 처음부터 PDF 파일을 만들 수 있도록 설계되었습니다. HTML을 PDF로 변환하려면 예를 들어 iText을 기반으로하는 flying-saucer 라이브러리를 사용할 수 있습니다. 나는 blogged이 어떻게 IKVM.NET Bytecode Compiler (ikvmc.exe)을 사용하여. NET에서 할 수 있었는지에 대해 가지고 있습니다.

그래서 컨트롤러 액션의 라인을 따라 뭔가를 볼 수 있습니다

public class PdfResult : ActionResult 
{ 
    private readonly string _html; 
    public PdfResult(string html) 
    { 
     _html = html; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var response = context.HttpContext.Response; 
     response.ContentType = "application/pdf"; 
     var builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     using (var bais = new ByteArrayInputStream(Encoding.UTF8.GetBytes(_html))) 
     using (var bao = new ByteArrayOutputStream()) 
     { 
      var doc = builder.parse(bais); 
      var renderer = new ITextRenderer(); 
      renderer.setDocument(doc, null); 
      renderer.layout(); 
      renderer.createPDF(bao); 
      var buffer = bao.toByteArray(); 
      response.OutputStream.Write(buffer, 0, buffer.Length); 
     } 
    } 
} 
+0

: PdfResult는 사용자 지정 작업 결과 원시 HTML을 복용하고 응답 스트림에 PDF 출력이 될 수

[HttpPost] public FileStreamResult GeneratePDF(string id) { ReportClass report = reportingAgent.GetReportById(id); return PdfResult(report.Html); } 

대린 감사합니다. 나는 비행 접시를 살펴볼 것입니다. 작업에 적합한 도구를 찾는 것이 항상 좋습니다. –

+0

@Rionmonster, 그것은 프로덕션 응용 프로그램에서 성공적으로 사용한 도구 중 하나입니다. 상용 구성 요소를 포함한 다른 대안도있을 수 있습니다. –

+0

비행 책상 라이브러리를 (블로그에서 언급 한대로) .NET으로 포팅하는 데 추천할만한 도구가 있습니까 –

관련 문제