2016-06-21 15 views
0

처음 두 페이지 만 표시됩니다. 세 번째 페이지에 요소 목록이 생성되었습니다. 내 컬렉션에 너무 많은 요소가있을 때, 거기에서 모든 페이지XMLWorkerHelper가 html 페이지를 pdf로 변환하면 첫 번째 페이지 만 생성됩니다.

여기
using (FileStream fs = new FileStream(filePath, FileMode.Create)) 
       {       
        Document document = new Document(PageSize.A4, 25, 25, 30, 30); 
        WebClient wc = new WebClient(); 
        string htmlText = wc.DownloadString(textUrl);      

        PdfWriter pdfWriter = PdfWriter.GetInstance(document, fs); 
        document.Open(); 
         // register all fonts in current computer 
        FontFactory.RegisterDirectories(); 
        XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(); 
        using (var msHtml = new MemoryStream(System.Text.Encoding.Default.GetBytes(htmlText))) 
        { 
         //Set factories 
         var cssAppliers = new CssAppliersImpl(fontProvider); 
         var htmlContext = new HtmlPipelineContext(cssAppliers); 

         //HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); 
         htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 

         //FontFactory.Register(arialuniTff); 
         string gishaTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "GISHA.TTF"); 
         FontFactory.Register(gishaTff); 

         var worker = XMLWorkerHelper.GetInstance(); 
         var cssStream = new FileStream(FolderMapPath("/css/style.css"), FileMode.Open); 

         worker.ParseXHtml(pdfWriter, document, msHtml, cssStream, new UnicodeFontFactory()); 
        } 

        // Close the document 
        document.Close(); 

        // Close the writer instance 
        pdfWriter.Close(); 
       }     

내 cshtml 코드

답변

0

여기 내 문제를 해결하는 방법입니다. 문제는 C# 백엔드 코드가 아닙니다. XMLWorkerHelper은 현재 루프를 잘 다루지 못합니다. 내 PDF 파일에 항목 목록을 표시해야했습니다. 컬렉션에 너무 많은 항목이 포함되어 있지 않은 경우에도 결과는 좋았지 만 한 페이지에 표시 할 수 없기 때문에 컬렉션에 50 개가 넘는 항목이 포함 된 수준의 페이지 나누기가 발생했습니다. 내가 한 것은 내가 아이템의 수를 세고, 40과 같은 어떤 숫자에서, 나는 단지 break 요소 <li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>을 포함하기 시작했다는 것이다. 그리고 카운터를 재설정하고 항목을 계속 표시하십시오. 그리고 커다란 문제가 해결되었습니다. 누군가에게 도움이 될 수 있습니다.

0

내가 경험 자바에서 iText를 작업이 내 PDF 출력 빈 될,하지만이 가능합니다 사용중인 MemoryStream 객체에 3 페이지의 테이블에 저장하기에 너무 많은 요소가있을 때 채워지는 바이트 제한이 있습니까? 이 경우, 긴 테이블의 닫는 태그는 MemoryStream에 기록되지 않을 수 있습니다. 따라서 테이블과 그 이후의 모든 요소는 렌더링되지 않습니다. 즉 get은 PDF 변환기 엔진에서 잘립니다.

다른 Stream 개체를 사용해 볼 수 있습니까?

+0

감사합니다. 방금 문제를 해결 한 방법에 대한 답변을 추가했습니다. 다른 사람들에게 도움이 될 수도 있습니다. – Tchaps