2016-06-21 10 views
0

私は最初の2ページだけを取得しています。私は第3ページに要素のリストを生成しました。私のコレクションでは、あまりにも多くの要素がある場合、そこからすべてのページは私の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ファイルにアイテムのリストを表示しなければならなかった。コレクションにはそれほど多くのアイテムが含まれていないと結果は良好でしたが、1ページに表示できないため、コレクションに50以上のアイテムが含まれているレベルで改ページしました。私がしたことは、アイテムの数を数え始めて、40のようないくつかの番号で、私はちょうどブレイク要素<li style="list-style:none; list-style-type:none; page-break-before:always">@item</li>を含んでいます。カウンターをリセットしてアイテムを表示し続けます。そしてそれは素晴らしく、私の問題は解決しました。 これは誰かに役立つかもしれません。

0

は、私が唯一の経験はJavaでiTextのと協力してきたが、それは可能です使用しているMemoryStreamオブジェクトには、ページ3のテーブルに格納する要素が多すぎるといっぱいになるバイト制限があることを確認します。その場合、その長いテーブルの終了タグはMemoryStreamに書き込まれない可能性があります。そのため、テーブルとそれ以降はすべてレンダリングされません。すなわちgetはPDFコンバータエンジンによって切り捨てられます。

別のStreamオブジェクトを使用できますか?

+0

ありがとうございました。私はちょうどその問題を解決した答えを追加しました。それは他者のためにある程度助けになるかもしれません。 – Tchaps

関連する問題