iTextSharp:如何在 1 行中添加 2 个句子并从 datagridview 调整单元格的宽度?
iTextSharp : How to add 2 sentence in 1 line and adjust width of cells from datagridview?
我有一个 winform,允许用户通过 DataGridView 键入,然后将数据转换为 PDF 文档。
但是我在 Table 的格式方面遇到了问题,其中单元格的格式根据宽度大小不正确。
我已经尝试将我的 DataGridView 单元格宽度设置为 "Fill" 类型,但在转换为 PDF 时它不会改变结果。
除此之外,我们真的可以使用 iTextSharp 在 1 行中插入 2 个不同的句子吗?
Paragraph b1 = new Paragraph("OWNER NAME: " + " " + "Property Name: ");
Paragraph b2 = new Paragraph("Property Name: " + "\n");
有没有办法合并 b1 和 b2?
结果应该如图所示。
属性 名称应该在与 "Owner Name" 同一行的最右侧。
单元格宽度应基于 DataGridView
中配置的列大小
编辑 1:
在下面的 PDF 代码中添加我的 DataGridView 转换 -
private void Button1_Click(object sender, EventArgs e)
{
PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
//pdfTable.DefaultCell.Padding = 10;
pdfTable.WidthPercentage = 100;
pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;
pdfTable.DefaultCell.BorderWidth = 1;
//Adding Header row from DGV to PDFTable
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText));
//cell.BackgroundColor = new iTextSharp.text.Color(240, 240, 240);
pdfTable.AddCell(cell);
}
//Adding DataRow from DGV to PDFTable
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
try
{
pdfTable.AddCell(cell.Value.ToString());
}
catch { }
}
}
//PDFVariablesForPathAndNaming
int filecount = 0;
int i;
string path = pathtofile1;
for (i = 0; File.Exists(path + @"YTLHPITARF_" + i + DateTime.Now.ToString("yyyyMMdd") + ".pdf"); i++)
{
filecount = i + 1;
}
string fileLoc = path + @"YTLHPITARF_" + filecount + DateTime.Now.ToString("yyyyMMdd") + ".pdf";
var filename = Path.GetFileName(fileLoc);
string pathtofile2 = pathtofile1 + filename;
//ToBeUsedInDataBase
dName = filename;
//Start of PDF Creation
Document document = new Document(iTextSharp.text.PageSize.A4.Rotate());
PdfWriter.GetInstance(document, new FileStream(fileLoc, FileMode.Create));
document.Open();
//FontSizeAndFormat
iTextSharp.text.Font head1 = FontFactory.GetFont("Arial", 14, iTextSharp.text.Font.BOLD);
iTextSharp.text.Font head2 = FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL);
iTextSharp.text.Font head3 = FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.NORMAL);
iTextSharp.text.Font bold1 = FontFactory.GetFont("Arial", 12, iTextSharp.text.Font.BOLD);
Paragraph a1 = new Paragraph("ASSET RETURN FORM", head1);
Paragraph a2 = new Paragraph("(due to Staff resign / Outlet close / Repair)" + "\n\n", head2);
Paragraph b1 = new Paragraph("OWNER NAME: ", head3);
b1 = new Paragraph();
b1.Add(new Chunk("OWNER NAME: ", head3));
iTextSharp.text.TabSettings tab = new TabSettings();
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(new Chunk("Property Name: ", head3));
Paragraph c1 = new Paragraph("SUBMITTED BY: "+ "\n\n" + "\n", head3);
Paragraph d1 = new Paragraph("NAME: ", head3);
Paragraph e1 = new Paragraph("DATE: " + DateTime.Today.ToString("yyyyMMdd"), head3);
//Paragraph Alignment
a1.Alignment = Element.ALIGN_CENTER;
a2.Alignment = Element.ALIGN_CENTER;
//Paragraph Insertion
document.Add(a1);
document.Add(a2);
document.Add(b1);
pdfTable.SpacingBefore = 3f;
document.Add(pdfTable);
document.Add(c1);
document.Add(d1);
document.Add(e1);
//document.Add(f1);
//document.Add(g1);
//CloseCreationOfPDF
document.Close();
//OpenCreatedPDF
System.Diagnostics.Process.Start(pathtofile2);
}
[解决方案]
在 C# 中,创建带制表符的内联文本按以下方式完成:
Paragraph c1 = new Paragraph("SUBMITTED BY: "+ "\n\n" + "\n", head3);
c1 = new Paragraph();
c1.Add(new Chunk("SUBMITTED BY : ", head3));
c1.Add(Chunk.TABBING);
c1.Add(Chunk.TABBING);
c1.Add(Chunk.TABBING);
c1.Add(Chunk.TABBING);
c1.Add(new Chunk("ACKNOWLEDGED/TAKEN BY : ", head3));
Chunk.TABBING 将在文本之间创建一个 space。如下图所示:
根据您将 DataGridView 转换为 PDF 等文件的方式调整单元格宽度大小,代码如下:
PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
float[] widths1 = new float[] { 5f, 30f, 30f, 5f, 15f, 30f, 30f };
pdfTable.SetWidths(widths1);
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
iTextSharp.text.Font header1 = FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.NORMAL);
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, header1)) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
//cell.BackgroundColor = new iTextSharp.text.Color(240, 240, 240);
pdfTable.AddCell(cell);
}
我使用 DataGridView 中的列数创建了我的 pdftable。
有了这个,我使用浮点数组手动调整每列宽度的大小。上图已经在用这个方法了
我有一个 winform,允许用户通过 DataGridView 键入,然后将数据转换为 PDF 文档。
但是我在 Table 的格式方面遇到了问题,其中单元格的格式根据宽度大小不正确。
我已经尝试将我的 DataGridView 单元格宽度设置为 "Fill" 类型,但在转换为 PDF 时它不会改变结果。
除此之外,我们真的可以使用 iTextSharp 在 1 行中插入 2 个不同的句子吗?
Paragraph b1 = new Paragraph("OWNER NAME: " + " " + "Property Name: ");
Paragraph b2 = new Paragraph("Property Name: " + "\n");
有没有办法合并 b1 和 b2?
结果应该如图所示。
属性 名称应该在与 "Owner Name" 同一行的最右侧。 单元格宽度应基于 DataGridView
中配置的列大小编辑 1:
在下面的 PDF 代码中添加我的 DataGridView 转换 -
private void Button1_Click(object sender, EventArgs e)
{
PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
//pdfTable.DefaultCell.Padding = 10;
pdfTable.WidthPercentage = 100;
pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;
pdfTable.DefaultCell.BorderWidth = 1;
//Adding Header row from DGV to PDFTable
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText));
//cell.BackgroundColor = new iTextSharp.text.Color(240, 240, 240);
pdfTable.AddCell(cell);
}
//Adding DataRow from DGV to PDFTable
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
try
{
pdfTable.AddCell(cell.Value.ToString());
}
catch { }
}
}
//PDFVariablesForPathAndNaming
int filecount = 0;
int i;
string path = pathtofile1;
for (i = 0; File.Exists(path + @"YTLHPITARF_" + i + DateTime.Now.ToString("yyyyMMdd") + ".pdf"); i++)
{
filecount = i + 1;
}
string fileLoc = path + @"YTLHPITARF_" + filecount + DateTime.Now.ToString("yyyyMMdd") + ".pdf";
var filename = Path.GetFileName(fileLoc);
string pathtofile2 = pathtofile1 + filename;
//ToBeUsedInDataBase
dName = filename;
//Start of PDF Creation
Document document = new Document(iTextSharp.text.PageSize.A4.Rotate());
PdfWriter.GetInstance(document, new FileStream(fileLoc, FileMode.Create));
document.Open();
//FontSizeAndFormat
iTextSharp.text.Font head1 = FontFactory.GetFont("Arial", 14, iTextSharp.text.Font.BOLD);
iTextSharp.text.Font head2 = FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL);
iTextSharp.text.Font head3 = FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.NORMAL);
iTextSharp.text.Font bold1 = FontFactory.GetFont("Arial", 12, iTextSharp.text.Font.BOLD);
Paragraph a1 = new Paragraph("ASSET RETURN FORM", head1);
Paragraph a2 = new Paragraph("(due to Staff resign / Outlet close / Repair)" + "\n\n", head2);
Paragraph b1 = new Paragraph("OWNER NAME: ", head3);
b1 = new Paragraph();
b1.Add(new Chunk("OWNER NAME: ", head3));
iTextSharp.text.TabSettings tab = new TabSettings();
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(Chunk.TABBING);
b1.Add(new Chunk("Property Name: ", head3));
Paragraph c1 = new Paragraph("SUBMITTED BY: "+ "\n\n" + "\n", head3);
Paragraph d1 = new Paragraph("NAME: ", head3);
Paragraph e1 = new Paragraph("DATE: " + DateTime.Today.ToString("yyyyMMdd"), head3);
//Paragraph Alignment
a1.Alignment = Element.ALIGN_CENTER;
a2.Alignment = Element.ALIGN_CENTER;
//Paragraph Insertion
document.Add(a1);
document.Add(a2);
document.Add(b1);
pdfTable.SpacingBefore = 3f;
document.Add(pdfTable);
document.Add(c1);
document.Add(d1);
document.Add(e1);
//document.Add(f1);
//document.Add(g1);
//CloseCreationOfPDF
document.Close();
//OpenCreatedPDF
System.Diagnostics.Process.Start(pathtofile2);
}
[解决方案]
在 C# 中,创建带制表符的内联文本按以下方式完成:
Paragraph c1 = new Paragraph("SUBMITTED BY: "+ "\n\n" + "\n", head3);
c1 = new Paragraph();
c1.Add(new Chunk("SUBMITTED BY : ", head3));
c1.Add(Chunk.TABBING);
c1.Add(Chunk.TABBING);
c1.Add(Chunk.TABBING);
c1.Add(Chunk.TABBING);
c1.Add(new Chunk("ACKNOWLEDGED/TAKEN BY : ", head3));
Chunk.TABBING 将在文本之间创建一个 space。如下图所示:
根据您将 DataGridView 转换为 PDF 等文件的方式调整单元格宽度大小,代码如下:
PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
float[] widths1 = new float[] { 5f, 30f, 30f, 5f, 15f, 30f, 30f };
pdfTable.SetWidths(widths1);
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
iTextSharp.text.Font header1 = FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.NORMAL);
PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, header1)) { BorderWidth = 1, VerticalAlignment = Element.ALIGN_MIDDLE, HorizontalAlignment = Element.ALIGN_CENTER };
//cell.BackgroundColor = new iTextSharp.text.Color(240, 240, 240);
pdfTable.AddCell(cell);
}
我使用 DataGridView 中的列数创建了我的 pdftable。 有了这个,我使用浮点数组手动调整每列宽度的大小。上图已经在用这个方法了