2010-11-04 17 views
23

J'essaie de comprendre comment afficher mon texte dans une PdfPCell au milieu. J'ai essayé beaucoup d'options différentes, comme:iTextsharp, PdfPCell.VerticalAlignment et PdfPCell.HorizontalAlignment

 
myCell.VerticalAlignment = Element.ALIGN_MIDDLE; 
myCell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE; 
myCell.VerticalAlignment = Rectangle.ALIGN_MIDDLE; 

Rien de tout cela fonctionne pour moi. VerticalAlignment prend un entier, donc j'ai essayé de faire une boucle, pour voir si je pouvais trouver le bon nombre, mais tout simplement se aligner à gauche en bas ..

Document myDocument = new Document(PageSize.A4); 

    PdfWriter myPdfWriter = PdfWriter.GetInstance(myDocument, new FileStream(strPDFFilePath, FileMode.Create)); 
    myDocument.Open(); 

    myDocument.NewPage(); 

    PdfContentByte myPdfContentByte = myPdfWriter.DirectContent; 

    PdfPCell myCell; 
    Paragraph myParagraph; 

    PdfPTable myTable = new PdfPTable(4); 
    myTable.WidthPercentage = 100; 
    myTable.SetWidths(new int[4] { 25, 25, 25, 25 }); 

    myTable.DefaultCell.BorderWidth = 1; 
    myTable.DefaultCell.BorderColor = BaseColor.RED;     

    for (int i = -100; i < 100; i++) 
    { 
     myParagraph = new Paragraph(String.Format("Alignment: {0}", i)); 
     myParagraph.Font.SetFamily("Verdana"); 
     myParagraph.Font.SetColor(72, 72, 72); 
     myParagraph.Font.Size = 11; 

     myCell = new PdfPCell(); 
     myCell.AddElement(myParagraph); 
     myCell.HorizontalAlignment = i; 
     myCell.VerticalAlignment = i;      
     myTable.AddCell(myCell); 
    } 

    myDocument.Add(myTable); 
    myDocument.Add(new Chunk(String.Empty)); 
    myDocument.Close(); 

Répondre

32

Je pense que le problème fondamental que vous rencontrez est que vous ajoutez du texte à des objets iTextSharp Paragraph puis tentez de définir l'alignement de ce texte à l'aide de l'objet PdfPCell qui le contient. Je ne suis pas sûr si la propriété PdfPCell.VerticalAlignment est seulement pour un texte PdfPCell, ou si l'alignement de l'objet Paragraph à l'intérieur du PdfPCell n'a aucun effet que vous pouvez voir dans votre test. Vous définissez également myCell.HorizontalAlignment et myCell.VerticalAlignment à la valeur d'index de votre boucle for. Je pense que vous vouliez utiliser 1 instread de i. Quoi qu'il en soit, la définition des propriétés HorizontalAlignment etde PdfPCell fonctionne cependant. Voici une petite méthode qui le démontre. Je l'ai écrit très vaguement sur la base de ce que vous essayiez de faire; Si c'est assez proche de ce que vous essayez de faire, vous pouvez peut-être l'utiliser comme point de départ dans votre projet.

private void TestTableCreation() { 
    using (FileStream fs = new FileStream("TableTest.pdf", FileMode.Create)) { 
     Document doc = new Document(PageSize.A4); 
     PdfWriter.GetInstance(doc, fs); 
     doc.Open(); 

     PdfPTable table = new PdfPTable(4); 

     for (int i = -100; i < 100; i++) { 
      PdfPCell cell = new PdfPCell(new Phrase(String.Format("Alignment: {0}", i))); 
      // Give our rows some height so we can see test vertical alignment. 
      cell.FixedHeight = 30.0f; 

      // ** Try it ** 
      //cell.HorizontalAlignment = Element.ALIGN_LEFT; 
      //cell.HorizontalAlignment = Element.ALIGN_CENTER; 
      cell.HorizontalAlignment = Element.ALIGN_RIGHT; 

      cell.VerticalAlignment = Element.ALIGN_TOP; 
      //cell.VerticalAlignment = Element.ALIGN_MIDDLE; 
      //cell.VerticalAlignment = Element.ALIGN_BOTTOM; 

      table.AddCell(cell); 
     } 

     doc.Add(table); 
     doc.Close(); 
    } 
} 
+2

Merci, il a mieux fonctionné quand je commencé à utiliser Phrase au lieu du paragraphe – Jimmy

0

S'il vous plaît utiliser le code donné, je l'espère, je serai le plus utile pour ceux qui veulent imprimer un texte dans une cellule en alignement milieu et haut protected void Page_Load (object sender, EventArgs e) { gettable() }

void gettable() 
    { 
     using (FileStream fs = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Vedic-Chart-Life-Report.pdf"), FileMode.Create, FileAccess.Write, FileShare.Read)) 
     { 

      Document doc = new Document(PageSize.LETTER); 
      PdfWriter writer = PdfWriter.GetInstance(doc, fs); 
      doc.Open(); 
      doc.NewPage(); 

      BaseFont bf = BaseFont.CreateFont("C:/WINDOWS/Fonts/krdv010.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
      Font f = new Font(bf, 16, Font.BOLD); 

      PdfContentByte cb = writer.DirectContent; 

      cb.MoveTo(0, doc.PageSize.Height - 20); 
      cb.LineTo(doc.PageSize.Width, doc.PageSize.Height - 20); 
      cb.Stroke(); 
      cb.ClosePathStroke(); 

      PdfPTable table = new PdfPTable(1); 
      PdfPCell cell = new PdfPCell(new Phrase("eaxynks'k foospu", f)); 

      // Give our rows some height so we can see test vertical alignment. 
      cell.FixedHeight = 15f; 
      cell.HorizontalAlignment = 1; 
      cell.VerticalAlignment = Element.ALIGN_TOP; 

      table.AddCell(cell); 
      doc.Add(table); 

      //cb.RoundRectangle(10f, 550f, 592f, 200f, 20f); 
      //cb.Stroke(); 

      //doc.Add(new Phrase("eaxynks'k foospu", f)); 

      doc.Close(); 
     } 

    }