当前位置: 首页 > 知识库问答 >
问题:

itextsharp单元格中带下划线的文本落在单元格外

马绪
2023-03-14

我已经能够在VB中使用iTextSharp创建PDF。net代码,看起来几乎完全符合我的要求。然而,我使用一个包含一列和多行的表来显示通过使用块和短语组合在一起的长文本字符串。有些区块包含带下划线的文本。当一个短语中有带下划线的文本时,整个单元格需要以灰色突出显示,我使用PdfPCell的BackgroundColor属性来实现这一点。

我遇到的问题是,下划线落在单元格边界之外(突出显示之外)。我尝试了很多方法来解决这个问题,比如设置一个固定的单元格高度,然后设置单元格。与元素垂直对齐。对齐顶部;使用具有各种值的SetLeading,包括(0,0),这只会使问题变得更糟;设置单元格。上升到真实;以及更改填充值。我可能也尝试过其他方法,但出于某种原因,无论我尝试什么,下划线文本的线条都不在突出显示的范围内。而且,高亮显示会一直显示到上面单元格中文本的底部(这就是我尝试使用SetLeading值的原因)

该图像显示了我生成的PDF的第2页。带表格的PDF

下面是实现此功能的代码部分的示例——“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)

共有1个答案

杨腾
2023-03-14

默认情况下,下划线与文本之间有一定的偏移。不幸的是,由于您已经删除了表格上的填充,偏移量与单元格的布局相冲突。一个选择是,你应该按照人们的建议改变填充物。然而,另一个选项是手动设置块的下划线偏移量。下面是一个例子:

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

 类似资料:
  • 我一直在玩PdfBox和PDFTextStripperByArea方法。 如果文本是粗体或斜体字,我能够提取信息,但我无法获得下划线信息。 据我所知,在PDF中,下划线是通过画线来完成的。所以理论上,我应该能够在文本周围的某个地方获得一些关于线条的信息。给出这些信息,我就可以找出文本是加了下划线还是在表格中。 以下是我目前的代码: 我试着绕过PDFStreamEngine类中的processEnc

  • 问题内容: 我想在表格单元格中使用CSS,这样,如果文本太长而无法放在一行上,它将用省略号进行剪切,而不是换成多行。这可能吗? 我尝试了这个: 但是,似乎使文本(及其单元格)不断向右扩展,从而使表格的总宽度超出了其容器的宽度。但是,如果没有它,文本在碰到单元格的边缘时会继续换行。 问题答案: 要在表格单元溢出时用省略号剪切文本,您需要在每个类上设置CSS属性,以使溢出起作用。不需要额外的布局div

  • 我们刚刚开始实施NatTable,我们非常高兴看到性能的提高。然而,我们在实现特定功能时遇到了困难。 我们想要的是在单元格中有可点击的文本,然后它将引用我们选择并进入视图的表中的一行。基本上,类似于: 通过单击。

  • 插入文字 插入链接 插入公式 插入日期 插入本地图片 自动过滤 冻结单元格 合并单元格 行单元格样式 列单元格样式

  • 我正在创建一个新的PDF,其中将包含其他文档的汇编。 这些其他文档可以是word/excel/图像/PDF。 我希望将所有这些内容添加到表中的单元格中,该单元格被添加到文档中-这给了我自动添加页面的好处,将元素定位在单元格中而不是页面中,并允许我更轻松地将内容保持在与我提供的相同的顺序(如img,doc,pdf,img,pdf等) 向表中添加图像非常简单。 我正在将word/excel文档转换为P

  • 我无法将此行的样式设置为: 它给我的错误是“无法在基元类型void上调用setCellValue(String)”。这种情况下的错误是什么?我如何在单行代码中实现所有3个目标?