从 Win Form 将 iTextSharp 中的列对齐方式更改为 "RIGHT"
Changing Column Alignment to "RIGHT" in iTextSharp from Win Form
我试图将 "Amount" 的数据网格列之一对齐到右侧,但在尝试使用 itextsharp 创建 PDF 时无法这样做。所有列都左对齐,一些列应该左对齐,最后一列应该右对齐。请帮助
下面列出了代码。
PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
pdfTable.SetWidths(new float[] { 5f, 10f, 10f, 7f, 9f });
pdfTable.DefaultCell.Padding = 3;
pdfTable.WidthPercentage = 90;
pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;
pdfTable.DefaultCell.BorderWidth = 1;
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, fontTitle2));
cell.BackgroundColor = new iTextSharp.text.BaseColor(240, 240, 240);
cell.HorizontalAlignment = Element.ALIGN_CENTER;
pdfTable.AddCell(cell);
}
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
pdfTable.AddCell(new Phrase(cell.Value.ToString(), fontTitle));
}
}
您的问题很奇怪,因为您创建第一行的方式会导致假设您已经知道问题的答案。
创建第一行时,您需要:
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, fontTitle2));
cell.BackgroundColor = new iTextSharp.text.BaseColor(240, 240, 240);
cell.HorizontalAlignment = Element.ALIGN_CENTER;
pdfTable.AddCell(cell);
您在 文本模式 中创建了一个 PdfPCell
,并在单元格级别将对齐设置为 ALIGN_CENTER
。这是正确的。
当您创建后续行时,您需要:
pdfTable.AddCell(new Phrase(cell.Value.ToString(), fontTitle));
这还会在文本模式(内部)中创建一个PdfPCell
,并使用默认单元格的对齐方式。如果您没有更改此对齐方式,则对齐方式为 ALIGN_LEFT
.
而不是使用:
pdfTable.AddCell(new Phrase(cell.Value.ToString(), fontTitle));
为什么不使用在为第一行创建代码时已经掌握的知识?
PdfPCell cell = new PdfPCell(new Phrase(cell.Value.ToString(), fontTitle));
cell.HorizontalAlignment = Element.ALIGN_RIGHT;
pdfTable.AddCell(cell);
当然:如果某些单元格需要 Element.ALIGN_LEFT
而其他单元格需要 Element.ALIGN_RIGHT
,则必须在循环中添加一个 if。如果应该检查 cell
是否是 row
中的最后一个单元格。
我试图将 "Amount" 的数据网格列之一对齐到右侧,但在尝试使用 itextsharp 创建 PDF 时无法这样做。所有列都左对齐,一些列应该左对齐,最后一列应该右对齐。请帮助
下面列出了代码。
PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
pdfTable.SetWidths(new float[] { 5f, 10f, 10f, 7f, 9f });
pdfTable.DefaultCell.Padding = 3;
pdfTable.WidthPercentage = 90;
pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;
pdfTable.DefaultCell.BorderWidth = 1;
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, fontTitle2));
cell.BackgroundColor = new iTextSharp.text.BaseColor(240, 240, 240);
cell.HorizontalAlignment = Element.ALIGN_CENTER;
pdfTable.AddCell(cell);
}
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
pdfTable.AddCell(new Phrase(cell.Value.ToString(), fontTitle));
}
}
您的问题很奇怪,因为您创建第一行的方式会导致假设您已经知道问题的答案。
创建第一行时,您需要:
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, fontTitle2));
cell.BackgroundColor = new iTextSharp.text.BaseColor(240, 240, 240);
cell.HorizontalAlignment = Element.ALIGN_CENTER;
pdfTable.AddCell(cell);
您在 文本模式 中创建了一个 PdfPCell
,并在单元格级别将对齐设置为 ALIGN_CENTER
。这是正确的。
当您创建后续行时,您需要:
pdfTable.AddCell(new Phrase(cell.Value.ToString(), fontTitle));
这还会在文本模式(内部)中创建一个PdfPCell
,并使用默认单元格的对齐方式。如果您没有更改此对齐方式,则对齐方式为 ALIGN_LEFT
.
而不是使用:
pdfTable.AddCell(new Phrase(cell.Value.ToString(), fontTitle));
为什么不使用在为第一行创建代码时已经掌握的知识?
PdfPCell cell = new PdfPCell(new Phrase(cell.Value.ToString(), fontTitle));
cell.HorizontalAlignment = Element.ALIGN_RIGHT;
pdfTable.AddCell(cell);
当然:如果某些单元格需要 Element.ALIGN_LEFT
而其他单元格需要 Element.ALIGN_RIGHT
,则必须在循环中添加一个 if。如果应该检查 cell
是否是 row
中的最后一个单元格。