itextsharp 单元格中带下划线的文本落在单元格外
itextsharp underlined text in cell falls outside cell
我已经能够在我的 VB .net 代码中使用 iTextSharp 创建一个 PDF,它看起来几乎和我想要的一样。但是,我正在使用具有一列和多行的 table 来显示使用块和短语组合在一起的长文本字符串。一些块包含带下划线的文本。当短语中有下划线文本时,需要将整个单元格突出显示为灰色,我使用 PdfPCell 的 BackgroundColor 属性
我遇到的问题是下划线落在单元格边界之外(突出显示之外)。我尝试了很多方法来解决这个问题,例如设置固定的单元格高度,然后将 cell.VerticalAlignment 设置为 Element.ALIGN_TOP;使用 SetLeading 和各种值,包括 (0, 0) 这只会使问题变得更糟;将 cell.Ascender 设置为 True;和改变填充值。我可能也尝试过其他方法,但出于某种原因,无论我尝试什么,下划线文本都落在突出显示之外。而且,突出显示一直到上面单元格中文本的底部(这就是我尝试使用 SetLeading 值的原因。)
图片显示了我生成的 PDF 的第 2 页。
PDF with table
下面是实现此代码部分的示例 - "outString1" 和 "outString2" 是附加到单行的输出文本字符串。有一个布尔值用于确定一段文本是否需要加下划线,还有一个用于确定是否需要单元格突出显示 - 在某些情况下,单元格可能被突出显示但文本没有下划线。关于如何解决这个问题有什么建议吗?
Dim pdfTable As PdfPTable = New PdfPTable(1)
pdfTable.WidthPercentage = 100
'the next section is within a loop to create and load each cell
Dim P As New Phrase()
'Slisted is a Boolean value to determine need for underlining
If Slisted Then
P.Add(New Chunk(outString1, myULfont))
Else
P.Add(New Chunk(outString1, myfont))
End If
P.Add(New Chunk(outString2, myfont))
Dim cell As PdfPCell = New PdfPCell(P)
cell.Border = 0
cell.Padding = 0
'hilite is a Boolean value to determine whether
If hilite Then
cell.BackgroundColor = BaseColor.LIGHT_GRAY
End If
pdfTable.AddCell(cell)
'out of loop, load table into document
pdfDoc.Add(pdfTable)
默认情况下,下划线与文本有一定的偏移量。不幸的是,由于您已经取消了 table 上的填充,因此偏移量与单元格的布局冲突。一种选择是您应该按照人们的建议更改填充。但是,另一种选择是自己手动设置 Chunk
的下划线偏移量。下面是一个示例:
Dim T As New PdfPTable(1)
For I = 1 To 10
''//Your chunk
Dim Ch As New Chunk("Hello", DocFont)
''//Wrap the chunk in a phrase
Dim p As New Phrase(Ch)
''//Wrap the phrase in a cell
Dim cell As PdfPCell = New PdfPCell(p)
''//Optional borders and padding
cell.Border = 0
cell.Padding = 0
''//This is just an example to do every other cell
If I Mod 2 = 0 Then
cell.BackgroundColor = BaseColor.LIGHT_GRAY
''//Set the thickness and offset from the text
Ch.SetUnderline(0.1, 0)
End If
T.AddCell(cell)
Next
我已经能够在我的 VB .net 代码中使用 iTextSharp 创建一个 PDF,它看起来几乎和我想要的一样。但是,我正在使用具有一列和多行的 table 来显示使用块和短语组合在一起的长文本字符串。一些块包含带下划线的文本。当短语中有下划线文本时,需要将整个单元格突出显示为灰色,我使用 PdfPCell 的 BackgroundColor 属性
我遇到的问题是下划线落在单元格边界之外(突出显示之外)。我尝试了很多方法来解决这个问题,例如设置固定的单元格高度,然后将 cell.VerticalAlignment 设置为 Element.ALIGN_TOP;使用 SetLeading 和各种值,包括 (0, 0) 这只会使问题变得更糟;将 cell.Ascender 设置为 True;和改变填充值。我可能也尝试过其他方法,但出于某种原因,无论我尝试什么,下划线文本都落在突出显示之外。而且,突出显示一直到上面单元格中文本的底部(这就是我尝试使用 SetLeading 值的原因。)
图片显示了我生成的 PDF 的第 2 页。 PDF with table
下面是实现此代码部分的示例 - "outString1" 和 "outString2" 是附加到单行的输出文本字符串。有一个布尔值用于确定一段文本是否需要加下划线,还有一个用于确定是否需要单元格突出显示 - 在某些情况下,单元格可能被突出显示但文本没有下划线。关于如何解决这个问题有什么建议吗?
Dim pdfTable As PdfPTable = New PdfPTable(1)
pdfTable.WidthPercentage = 100
'the next section is within a loop to create and load each cell
Dim P As New Phrase()
'Slisted is a Boolean value to determine need for underlining
If Slisted Then
P.Add(New Chunk(outString1, myULfont))
Else
P.Add(New Chunk(outString1, myfont))
End If
P.Add(New Chunk(outString2, myfont))
Dim cell As PdfPCell = New PdfPCell(P)
cell.Border = 0
cell.Padding = 0
'hilite is a Boolean value to determine whether
If hilite Then
cell.BackgroundColor = BaseColor.LIGHT_GRAY
End If
pdfTable.AddCell(cell)
'out of loop, load table into document
pdfDoc.Add(pdfTable)
默认情况下,下划线与文本有一定的偏移量。不幸的是,由于您已经取消了 table 上的填充,因此偏移量与单元格的布局冲突。一种选择是您应该按照人们的建议更改填充。但是,另一种选择是自己手动设置 Chunk
的下划线偏移量。下面是一个示例:
Dim T As New PdfPTable(1)
For I = 1 To 10
''//Your chunk
Dim Ch As New Chunk("Hello", DocFont)
''//Wrap the chunk in a phrase
Dim p As New Phrase(Ch)
''//Wrap the phrase in a cell
Dim cell As PdfPCell = New PdfPCell(p)
''//Optional borders and padding
cell.Border = 0
cell.Padding = 0
''//This is just an example to do every other cell
If I Mod 2 = 0 Then
cell.BackgroundColor = BaseColor.LIGHT_GRAY
''//Set the thickness and offset from the text
Ch.SetUnderline(0.1, 0)
End If
T.AddCell(cell)
Next