2016-06-21 122 views
0

我只收到前兩頁。我在第三頁中生成了一個元素列表。當有在我的收藏太多的元素,從那裏所有的頁面成爲我的PDF輸出空白XMLWorkerHelper將html頁面轉換爲pdf只生成前2頁

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的一些數字,我只包括一個休息元素<li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>。並重置計數器並繼續顯示我的項目。這很好,我的問題解決了。 可能會對某人有所幫助。

0

我只是有經驗的iText在Java中的工作,但有可能您使用的MemoryStream對象有一個字節限制,當第3頁的表格有太多元素存儲時,它會被填滿?如果是這樣的話,那麼長表上的結束標記可能不會被寫入到MemoryStream中,因此該表和後面的所有內容都不會被渲染;即得到的PDF轉換引擎截斷。

你可以嘗試使用不同的Stream對象嗎?

+0

謝謝。我剛剛添加了答案,我如何解決這個問題。可能會對其他人有所幫助。 – Tchaps