web-dev-qa-db-fra.com

iTextsharp, PdfPCell.VerticalAlignment et PdfPCell.HorizontalAlignment

J'essaie de comprendre comment insérer mon texte dans une PdfPCell au milieu. J'ai essayé beaucoup d'options différentes, comme:

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

Rien de tout cela ne fonctionne pour moi. VerticalAlignment prend un int, alors j'ai essayé de faire une boucle, pour voir si je pouvais trouver le bon nombre, mais tout ce qui reste à gauche est aligné 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();
24
Jimmy

Je pense que le problème fondamental que vous rencontrez est que vous ajoutez du texte aux objets iTextSharp Paragraph, puis que vous essayez de définir l'alignement de ce texte à l'aide de l'objet PdfPCell qui le contient. Je ne sais pas si la propriété PdfPCell.VerticalAlignment concerne uniquement le texte d'une PdfPCell, ou si l'alignement de l'objet Paragraph à l'intérieur de la PdfPCell n'a aucun effet visible dans votre test.

Vous définissez également myCell.HorizontalAlignment et myCell.VerticalAlignment sur la valeur d'index de votre boucle for. Je pense que vous vouliez utiliser 1 mot de i.

Quoi qu'il en soit, définir les propriétés HorizontalAlignment et VerticalAlignment d'un PdfPCell fonctionne bien. Vous trouverez ci-dessous une petite méthode qui le démontre. Je l'ai écrit très vaguement en fonction de ce que vous tentiez de faire. si cela est assez proche de ce que vous essayez de faire, vous pouvez peut-être utiliser cela comme point de départ de 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();
    }
}
35
Jay Riggs

La solution de Jay Riggs a également commencé à fonctionner pour l'alignement vertical lorsque j'ai ajouté:

cell.UseAscender = true;

http://www.afterlogic.com/mailbee-net/docs-itextsharp/html/0602b79e-ea9c-0c7d-c4b2-bc4b5f976f15.htm

4
Andreas Holmlund

J'ai essayé de donner des entiers directs et d'autres solutions mentionnées ici. Mais rien n'a fonctionné pour moi. Une combinaison de ceci a fonctionné pour moi dans la méthode de composition. 

cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
2
Tester Account

S'il vous plaît utiliser le code donné, j'espère que je serai plus utile pour ceux qui veulent imprimer un texte dans une cellule dans l'alignement moyen et supérieur Protected void Page_Load (expéditeur d'objet, 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();
        }

    }
0
Deepak Maddeshiya