2016-06-21 7 views
0

Ich bekomme nur die ersten beiden Seiten. Ich habe eine generierte Liste von Elementen auf der dritten Seite. Wenn es zu viele Elemente in meiner Sammlung sind, von dort alle Seiten leer geworden in meinem PDF-AusgabeXMLWorkerHelper konvertieren HTML-Seite in PDF produziert nur die ersten 2 Seiten

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(); 
       }     

Hier mein cshtml Code

Antwort

0

Hier ist, wie ich mein Problem gelöst habe. Das Problem war nicht mit dem C# -Backend-Code. Es scheint, als ob die XMLWorkerHelper im Moment nicht gut mit Schleife in Sicht beschäftigen. Ich musste die Liste der Artikel in meiner PDF-Datei anzeigen. Das Ergebnis war gut, wenn die Sammlung nicht so viele Elemente enthält, aber der Seitenumbruch auf der Ebene, wenn die Sammlung mehr als 50 Elemente enthält, da dies nicht auf einer einzelnen Seite angezeigt werden konnte. Was ich tat ist, dass ich begann, die Anzahl der Elemente zu zählen und bei einer Zahl wie 40, ich habe nur ein Break-Element <li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>. Setzen Sie den Zähler zurück und fahren Sie fort, meine Artikel anzuzeigen. Und es war großartig und mein Problem wurde gelöst. Kann dies für jemanden hilfreich sein.

0

Ich habe Erfahrung nur mit iText in Java arbeiten, aber ist es möglich, dass das von Ihnen verwendete MemoryStream-Objekt ein Byte-Limit hat, das voll wird, wenn die Tabelle auf Seite 3 zu viele Elemente zum Speichern enthält? Wenn dies der Fall ist, werden die schließenden Tags in dieser langen Tabelle möglicherweise nicht in den MemoryStream geschrieben, so dass diese Tabelle und alles danach nicht gerendert wird; d. h., die Datei wird durch die PDF-Konverter-Engine abgeschnitten.

Können Sie versuchen, ein anderes Stream-Objekt zu verwenden?

+0

Danke. Ich habe gerade eine Antwort hinzugefügt, wie ich dieses Problem gelöst habe. vielleicht könnte es für etwas Hilfe für andere sein. – Tchaps