2015-11-13 2 views
0

J'utilise MigraDoc pour générer un fichier PDF dans C# à partir de certaines tables de base de données.Empêcher la division de paragraphe dans MigraDoc

Mon problème majeur est pour certains des paragraphes ajouter, ils ne peuvent pas être installés dans la page en cours, sont donc diviser la page suivante, comment peut-il être évité? Je veux qu'ils soient sur une page (page actuelle ou page suivante).

 Document doc = new Document(); 
     Section section = doc.AddSection(); 
     Paragraph paragraph = section.AddParagraph(); 
     paragraph.AddLineBreak(); 
     paragraph.AddLineBreak(); 
     paragraph.AddLineBreak(); 

     paragraph.Format.TabStops.ClearAll(); 
     paragraph.Format.TabStops.AddTabStop("16cm", TabAlignment.Right, TabLeader.Lines); 
     paragraph.AddTab(); 

     for (int i = 0; i < 20; i++) 
     { 

      Paragraph paragraphBody = paragraph.Section.AddParagraph(); 

      FormattedText ft = paragraphBody.AddFormattedText("This is a title", TextFormat.Bold); 
      ft.Italic = true; ft.Font.Size = 11; 
      ft.Font.Color = Color.FromRgbColor((byte)255, Color.Parse("0x1E9BC6")); //equal to rgb(30, 155, 196); 
      ft.AddLineBreak(); 

      //--detail:---adding text--------------------------------- 

      String DetailText = "This is detail. This is detail. This is detail.This is detail.This is detail.This is detail.This is detail.This is detail. This is detail. This is detail. This is detail. This is detail. This is detail. This is detail. This is detail. This is detail. "; 

      FormattedText ftdet; 
      ftdet = paragraphBody.AddFormattedText(DetailText, TextFormat.NotBold); 
      ftdet.Font.Size = 10; 
      ftdet.Font.Name = "Arial"; 
      ftdet.AddLineBreak(); 
      ftdet.AddLineBreak(); 

      ftdet.AddText("Event Date: " + DateTime.Now.ToString("MM/dd/yyyy h:mm tt")); 
     } 

     PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(false, PdfFontEmbedding.Always); 
     pdfRenderer.Document = doc; 
     pdfRenderer.RenderDocument(); 

     //Save the PDF to a file: 
     string filename = "e:\\Report" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".pdf"; 
pdfRenderer.PdfDocument.Save(filename); 

     Process.Start(filename); 

Répondre

1

Les paragraphes ont une propriété KeepTogether dans le membre Format. Si la valeur est true, toutes les lignes du paragraphe sont conservées sur une page. Il existe également une propriété KeepWithNext. Si vrai, la dernière ligne du paragraphe sera sur la même page que la première ligne du paragraphe suivant.

Si vous avez un paragraphe, il suffit d'écrire le code comme ceci:

paragraphBody.Format.KeepTogether = true; 

Voir aussi:
http://www.nudoq.org/#!/Packages/PDFsharp-MigraDoc-GDI/MigraDoc.DocumentObjectModel/ParagraphFormat

cellules de la table ne déformera pas sur plusieurs pages. Par conséquent, les propriétés KeepTogether et KeepWithNext n'ont aucun effet lorsqu'elles sont appliquées aux paragraphes dans les cellules de tableau.