2015-02-04 3 views
0

MVC 뷰를 PDF로 변환하기 위해 iTextSharp를 사용하고 있습니다. 뷰는 인라인 스타일을 사용합니다. 모든 코드 아래로 잘 작동하지만 구문 분석 느린 - 여기에 전문가들에 의해 제안 내가 itextsharp (xmlworker) 구문 분석이 느립니다.

  • 이전이 CSS를 diffrent하는 stylinging 아래 modifications-

    • 등록 글꼴로 이동

       using (var ms = new MemoryStream()) 
           { 
            using (var doc = new Document(PageSize.A4, 0, 1, 0,0)) 
            { 
      
      
             using (var writer = PdfWriter.GetInstance(doc, ms)) 
             { 
              doc.Open(); 
      
             XMLWorkerHelper.GetInstance().ParseXHtml(writer,doc, htmlcontent); 
             //Above line is too slow  
              doc.Close(); 
             } 
            } 
      

      파일

    이제 아래 코드를 사용하지만 생성 된 PDF는 b입니다. 행크스. 그것은 스타일하지만 글꼴 및 도이 방식을 유지하지 나는 대기 시간에 걸쳐 필요

    using (var ms = new MemoryStream()) 
          { 
           using (var doc = new Document(PageSize.A4, 0, 1, 0,0)) 
           { 
            using (var writer = PdfWriter.GetInstance(doc, ms)) 
            { 
    
             doc.Open(); 
    
             // css 
             var cssResolver = new StyleAttrCSSResolver(); 
             var cssFile = XMLWorkerHelper.GetCSS((new FileStream(Server.MapPath("~/Content/scptpdf.css"), FileMode.Open, FileAccess.Read))); 
             cssResolver.AddCss(cssFile); 
    
             // html 
             var fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); 
             fontProvider.Register(Server.MapPath("~/Content/fonts/arial.ttf")); 
             fontProvider.Register(Server.MapPath("~/Content/fonts/arialbd.")); 
             fontProvider.AddFontSubstitute("calibri","ARIAL"); 
    
             var cssAppliers = new CssAppliersImpl(fontProvider); 
             var htmlContext = new HtmlPipelineContext(cssAppliers); 
             htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 
    
             var pdf = new PdfWriterPipeline(doc, writer); 
             var html = new HtmlPipeline(htmlContext, pdf); 
             var css = new CssResolverPipeline(cssResolver, html); 
    
             var worker = new XMLWorker(css,true); 
             var p = new XMLParser(worker); 
    
             byte[] byteArray = Encoding.UTF8.GetBytes(pdftext); 
             var htmlstream = new MemoryStream(byteArray); 
             p.Parse(htmlstream); 
    
             //XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, htmlcontent); 
    
             doc.Close(); 
            } 
           } 
    

    을 구문 분석 같은 시간이 걸립니다. 이걸 좀 도와 줄 수 있니? 미리 감사드립니다.

  • +0

    HTML을 보지 않고도이 질문에 대해 의견을 말하기는 어렵습니다. 어쩌면 당신은 많은 중첩 된 요소를 가진 거대한 테이블을 가지고있을 것입니다. HTML이 없으면 코드를 변경할 때 PDF가 비어있는 이유를 찾는 것도 불가능합니다. 내 첫 번째 추측은 다음과 같습니다. 글꼴 문제가 있지만 추측에 불과합니다. –

    +0

    2 년간 itextsharp를 사용해 왔습니다. 일을 끝내기 때문에 좋아했지만 100000 자 HTML 파일을 변환하려고 할 때도 똑같은 문제가있었습니다. iTextsharp는 받아 들일 수없는 ~ 10 분 안에 그것을 변환합니다. wkhtmltopdf를 사용하여 동일한 HTML 파일을 변환하려고 시도했는데 ~ 10 초 내에 파일을 변환 한 것에 놀랐습니다. iTextSharp는 훌륭한 도구이지만 관리 코드로 작성 되었기 때문에 성능이 느립니다. 한편, wkhtmltopdf는 전적으로 원어로 작성됩니다. 나는 지금까지 ASP.NET 프로젝트를위한 최고의 wkhtmltopdf 래퍼 인 TuesPechkin을 사용한다. – rajeemcariazo

    답변

    0

    글꼴 유형이 제거되었습니다. 이제 iTEXT는 OWN을 사용합니다. 그것도 빠르다.

    +2

    나는 또한 동일한 문제가 있습니다. 업데이트 된 코드를 게시 할 수 있습니까? –

    +0

    잘 작동하는 코드를 추가 할 수 있습니까? – Rob