2010-11-04 32 views
23

Tôi đang cố gắng tìm ra cách lấy văn bản của tôi bên trong PdfPCell để hiển thị ở giữa. Tôi đã thử nhiều tùy chọn khác nhau, như:iTextsharp, PdfPCell.VerticalAlignment và PdfPCell.HorizontalAlignment

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

Không có cách nào phù hợp với tôi. VerticalAlignment mất một int, vì vậy tôi cố gắng để thực hiện một vòng lặp, để xem nếu tôi có thể tìm ra số đúng, nhưng tất cả mọi thứ chỉ có được trái class đáy ..

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(); 

Trả lời

32

Tôi nghĩ vấn đề cơ bản bạn đang gặp là bạn đang thêm văn bản vào các đối tượng iTextSharp Paragraph và sau đó cố gắng đặt căn chỉnh của văn bản này bằng cách sử dụng đối tượng PdfPCell có chứa đối tượng đó. Tôi không chắc liệu thuộc tính PdfPCell.VerticalAlignment chỉ dành cho văn bản của PdfPCell hay nếu căn chỉnh đối tượng Paragraph bên trong PdfPCell không có bất kỳ ảnh hưởng nào bạn có thể thấy trong thử nghiệm của mình.

Bạn cũng đang đặt myCell.HorizontalAlignmentmyCell.VerticalAlignment vào giá trị chỉ mục trong vòng lặp for của mình. Tôi nghĩ bạn có ý định sử dụng 1 bản sao của i.

Dù sao, đặt thuộc tính HorizontalAlignmentVerticalAlignment của PdfPCell sẽ hoạt động. Dưới đây là một phương pháp nhỏ thể hiện điều này. Tôi đã viết nó rất lỏng lẻo dựa trên những gì bạn đang cố gắng làm; nếu nó đủ gần với những gì bạn đang cố gắng làm có lẽ bạn có thể sử dụng nó như là một điểm khởi đầu trong dự án của bạn.

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

Cảm ơn, nó làm việc tốt hơn khi tôi bắt đầu sử dụng cụm từ thay vì khoản – Jimmy

0

Hãy dùng mã số nhất định, tôi hy vọng tôi sẽ rất hữu ích nhất cho những ai muốn in một văn bản trong một tế bào ở giữa và đầu thẳng 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(); 
     } 

    } 
giải pháp
Các vấn đề liên quan