iTextSharp VB.Net - 修复我的 table 的格式以在 PDF 中正确显示
iTextSharp VB.Net - Fixing the formatting of my table to properly display in PDF
到目前为止,我不断获得 PDF 的生命:
我只是想要一个 PDF 文件,可以像 Excel 那样显示它们。例子:
如何使我的 iTextSharp 值正确显示?我只想让我的文字排成一行,而不是将它们切成两半。我的按钮代码如下所示:A4.Rotate 如@JoshPart
所建议
Dim pdfTable As New PdfPTable(DataGridView1.ColumnCount)
'Add Title of PDF
Dim cell1 As New PdfPCell(New Phrase(StudentToolStripMenuItem.Text))
cell1.Colspan = 28
cell1.Border = 0
cell1.HorizontalAlignment = 1
pdfTable.AddCell(cell1)
'Creating iTextSharp Table from the DataTable data
pdfTable.DefaultCell.Padding = 3
pdfTable.WidthPercentage = 100
pdfTable.HorizontalAlignment = Element.ALIGN_LEFT
pdfTable.DefaultCell.BorderWidth = 1
'Adding Header row
For Each column As DataGridViewColumn In DataGridView1.Columns
Dim cell As New PdfPCell(New Phrase(column.HeaderText))
cell.BackgroundColor = New iTextSharp.text.BaseColor(240, 240, 240)
pdfTable.AddCell(cell)
Next
'Adding DataRow
For Each row As DataGridViewRow In DataGridView1.Rows
If row.IsNewRow = False Then
For Each cell As DataGridViewCell In row.Cells
pdfTable.AddCell(cell.Value.ToString())
Next
End If
Next
'Exporting to PDF
Dim folderPath As String = "C:\Mickosis\Class Manager\PDFs\"
If Not Directory.Exists(folderPath) Then
Directory.CreateDirectory(folderPath)
End If
Using stream As New FileStream(folderPath & StudentToolStripMenuItem.Text & ".pdf", FileMode.Create)
Dim pdfDoc As New Document(PageSize.A4.Rotate, 5.0F, 5.0F, 5.0F, 5.0F)
PdfWriter.GetInstance(pdfDoc, stream)
pdfDoc.Open()
pdfDoc.Add(pdfTable)
pdfDoc.Close()
stream.Close()
End Using
MsgBox("PDF Created", , msgboxtitle)
A4 纸旋转后为 280 毫米或 11 英寸宽。您正在尝试在其上放置 28 列,这意味着每列可以有 10 毫米或 3/8 英寸的 space,并且不包括任何单元格填充或列边框。如您所见,在正常可读的字体大小下,一行只能容纳 3 到 5 个字符。
一个选择是减小字体大小,可能减小到难以阅读的大小,例如 3 或 4。
Dim HeaderFont = FontFactory.GetFont(FontFactory.HELVETICA, 4)
Dim cell As New PdfPCell(New Phrase("Your Text", HeaderFont))
但是,更好的选择是只使用更大的页面大小。如果您还降低字体大小,您也许可以使用 A2,但您可能需要转到 A1,甚至可能需要转到 A0。
Dim Doc As New Document(PageSize.A1.Rotate, 5.0F, 5.0F, 5.0F, 5.0F)
当然,当你在屏幕上看这个时,你将不得不放大,当你打印它时,你将需要缩小到更小的纸张,你可能无法阅读它,但这就是带有很长文本的 28 列的样子。
我谈到的第三个选项是垂直拆分您的 table。虽然可能,但它不是自动的,如果您的值的长度经常变化,它可能会非常脆弱。 Bruno has a great post on doing it here..
Josh Part 谈到的第四个选项是旋转文本或垂直绘制。你可以看到一个 writing vertically here 的例子,尽管那很复杂。然而,旋转文本实际上非常简单,只需将单元格上的 Rotation
属性 设置为 90 的倍数即可。
cell.Rotation = 90
到目前为止,我不断获得 PDF 的生命:
我只是想要一个 PDF 文件,可以像 Excel 那样显示它们。例子:
如何使我的 iTextSharp 值正确显示?我只想让我的文字排成一行,而不是将它们切成两半。我的按钮代码如下所示:A4.Rotate 如@JoshPart
所建议Dim pdfTable As New PdfPTable(DataGridView1.ColumnCount)
'Add Title of PDF
Dim cell1 As New PdfPCell(New Phrase(StudentToolStripMenuItem.Text))
cell1.Colspan = 28
cell1.Border = 0
cell1.HorizontalAlignment = 1
pdfTable.AddCell(cell1)
'Creating iTextSharp Table from the DataTable data
pdfTable.DefaultCell.Padding = 3
pdfTable.WidthPercentage = 100
pdfTable.HorizontalAlignment = Element.ALIGN_LEFT
pdfTable.DefaultCell.BorderWidth = 1
'Adding Header row
For Each column As DataGridViewColumn In DataGridView1.Columns
Dim cell As New PdfPCell(New Phrase(column.HeaderText))
cell.BackgroundColor = New iTextSharp.text.BaseColor(240, 240, 240)
pdfTable.AddCell(cell)
Next
'Adding DataRow
For Each row As DataGridViewRow In DataGridView1.Rows
If row.IsNewRow = False Then
For Each cell As DataGridViewCell In row.Cells
pdfTable.AddCell(cell.Value.ToString())
Next
End If
Next
'Exporting to PDF
Dim folderPath As String = "C:\Mickosis\Class Manager\PDFs\"
If Not Directory.Exists(folderPath) Then
Directory.CreateDirectory(folderPath)
End If
Using stream As New FileStream(folderPath & StudentToolStripMenuItem.Text & ".pdf", FileMode.Create)
Dim pdfDoc As New Document(PageSize.A4.Rotate, 5.0F, 5.0F, 5.0F, 5.0F)
PdfWriter.GetInstance(pdfDoc, stream)
pdfDoc.Open()
pdfDoc.Add(pdfTable)
pdfDoc.Close()
stream.Close()
End Using
MsgBox("PDF Created", , msgboxtitle)
A4 纸旋转后为 280 毫米或 11 英寸宽。您正在尝试在其上放置 28 列,这意味着每列可以有 10 毫米或 3/8 英寸的 space,并且不包括任何单元格填充或列边框。如您所见,在正常可读的字体大小下,一行只能容纳 3 到 5 个字符。
一个选择是减小字体大小,可能减小到难以阅读的大小,例如 3 或 4。
Dim HeaderFont = FontFactory.GetFont(FontFactory.HELVETICA, 4)
Dim cell As New PdfPCell(New Phrase("Your Text", HeaderFont))
但是,更好的选择是只使用更大的页面大小。如果您还降低字体大小,您也许可以使用 A2,但您可能需要转到 A1,甚至可能需要转到 A0。
Dim Doc As New Document(PageSize.A1.Rotate, 5.0F, 5.0F, 5.0F, 5.0F)
当然,当你在屏幕上看这个时,你将不得不放大,当你打印它时,你将需要缩小到更小的纸张,你可能无法阅读它,但这就是带有很长文本的 28 列的样子。
我谈到的第三个选项是垂直拆分您的 table。虽然可能,但它不是自动的,如果您的值的长度经常变化,它可能会非常脆弱。 Bruno has a great post on doing it here..
Josh Part 谈到的第四个选项是旋转文本或垂直绘制。你可以看到一个 writing vertically here 的例子,尽管那很复杂。然而,旋转文本实际上非常简单,只需将单元格上的 Rotation
属性 设置为 90 的倍数即可。
cell.Rotation = 90