2016-06-21 7 views
0

Я получаю только первые две страницы. У меня есть сгенерированный список элементов на третьей странице. Когда слишком много элементов в моей коллекции, все страницы оттуда пропажи в моем выходе PdfXMLWorkerHelper конвертировать 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, я просто включаю элемент break <li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>. И сбросьте счетчик и продолжите отображение моих товаров. И это было здорово, и моя проблема была решена. Может быть, это может быть полезно для кого-то.

0

У меня есть только опыт работы с IText в Java, но это возможно что объект MemoryStream, который вы используете, имеет ограничение байта, которое заполняется, когда таблица на странице 3 содержит слишком много элементов для хранения? Если это так, то закрывающие теги на этой длинной таблице не могут быть записаны в MemoryStream, таким образом, таблица и все после того, как не будут отображаться; т. е. get усекается движком PDF-конвертера.

Можете ли вы попробовать использовать другой объект Stream?

+0

Спасибо. Я просто добавил ответ, как я решил эту проблему. может быть, это может быть для некоторой помощи для других. – Tchaps

Смежные вопросы