ITextsharp, PdfPCell.VerticalAlignment и PdfPCell.HorizontalAlignment
Я пытаюсь понять, как получить мой текст внутри PdfPCell, чтобы показать его посередине. Я пробовал много разных вариантов, например:
myCell.VerticalAlignment = Element.ALIGN_MIDDLE;
myCell.VerticalAlignment = PdfPCell.ALIGN_MIDDLE;
myCell.VerticalAlignment = Rectangle.ALIGN_MIDDLE;
Ничто из этого не работает для меня. VerticalAlignment принимает int, поэтому я попытался сделать цикл, чтобы увидеть, могу ли я найти нужное число, но все просто выравнивается слева внизу.
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();
Ответы
Ответ 1
Я думаю, что основная проблема, с которой вы сталкиваетесь, заключается в том, что вы добавляете текст в объекты iTextSharp Paragraph
, а затем пытаетесь установить это выравнивание текста с помощью объекта PdfPCell
, который содержит его. Я не уверен, что свойство PdfPCell.VerticalAlignment
предназначено только для текста PdfPCell
, или если выравнивание объекта Paragraph
внутри PdfPCell
не имеет никакого влияния, которое вы можете увидеть в своем тесте.
Вы также устанавливаете myCell.HorizontalAlignment
и myCell.VerticalAlignment
значение индекса в вашем цикле for
. Я думаю, вы хотели использовать 1 instread из i
.
Во всяком случае, настройка свойств PdfPCell HorizontalAlignment
и VerticalAlignment
действительно работает. Ниже приведен небольшой метод, демонстрирующий это. Я написал это очень свободно на основании того, что вы пытались сделать; если он достаточно близко к тому, что вы пытаетесь сделать, возможно, вы можете использовать это как отправную точку в своем проекте.
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
Решение Jay Riggs начало работать и для вертикального выравнивания, когда я добавил:
cell.UseAscender = true;
http://www.afterlogic.com/mailbee-net/docs-itextsharp/html/0602b79e-ea9c-0c7d-c4b2-bc4b5f976f15.htm
Ответ 3
Пожалуйста, используйте данный код, я надеюсь, что я буду самым полезным для тех, кто хочет напечатать текст в ячейке в средней и верхней настройках
protected void Page_Load (отправитель объекта, 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();
}
}