SetSimpleColumn在第10行之后没有对齐

时间:2017-03-08 21:08:16

标签: itext

我正在使用iTextSharp程序集版本5.5.10并且想要面对一个错误。当我出于某种未知原因定位我的SetSimpleColumns时,第11列直到14t列保持在同一行。 我首先想到它与边距有关,但是我的具有相同坐标的矩形位置正确。

结果如下:

position example

代码如下:

Dim iADsPerPage As Integer = 14
Dim iRow As Integer = 0
dBottom = 760 'Next Line (one line = 15)

For Each oRow As DataRow In dtADs.Rows
    iRow = iRow + 1
    dBottom = dBottom - 43.6 'Next Line (one line = 15)

    myText = New Phrase(oRow("BulletinReference").ToString, oFont)
    dLeftSide = 102.0
    dCellSize = 106.0
    ct.SetSimpleColumn(myText, dLeftSide, dBottom + dFontLine, dLeftSide + dCellSize, dCellSize, 0, Element.ALIGN_CENTER)
    ct.Go()

    myText = New Phrase(Left(oRow("BulletinReference").ToString, 40), oFont)
    dLeftSide = 210.0
    dCellSize = 302.0
    cb.Rectangle(dLeftSide, dBottom, dCellSize, dCellHeight)
    cb.Stroke()
    Response.Write(">" & " " & dLeftSide & " " & dBottom + dFontLine & " " & dLeftSide + dCellSize & " " & dCellSize & "<<br>")
    ct.SetSimpleColumn(myText, dLeftSide, dBottom + dFontLine, dLeftSide + dCellSize, dCellSize, 0, Element.ALIGN_LEFT)
    ct.Go()

    If iRow = 11 Then 'force position as test
        myText = New Phrase("hello world!!!!!!!!!!!!!!!!!", oFont)
        ct.SetSimpleColumn(myText, 210, 100, 210 + 302, 302, 0, Element.ALIGN_LEFT)
        ct.Go()
    End If
Next

1 个答案:

答案 0 :(得分:0)

你在SetSimpleColumn的第五个参数中使用了错误的值(在第三个参数中也使用了错误的值,但这并不是错误的):

ct.SetSimpleColumn(myText, dLeftSide, dBottom + dFontLine, dLeftSide + dCellSize, dCellSize, 0, Element.ALIGN_CENTER)

如您所见,您总是在那里使用dCellSize,可能假设该参数是该区域的高度,但该方法定义为:

/**
 * Simplified method for rectangular columns.
 * @param phrase a <CODE>Phrase</CODE>
 * @param llx the lower left x corner
 * @param lly the lower left y corner
 * @param urx the upper right x corner
 * @param ury the upper right y corner
 * @param leading the leading
 * @param alignment the column alignment
 */
virtual public void SetSimpleColumn(Phrase phrase, float llx, float lly, float urx, float ury, float leading, int alignment)

即。第五个参数应该是该区域的上 y 坐标(显然不是常数)。

有效地,您的“上 y ”表示第一行实际上表示底部 y 而您的“下部 y ”表示顶部 ÿ即可。通过添加创建所需结果的dFontLine进行“更正”。

只要您的“较低 y ”实际开始表示底部 y ,则顶部 y 保持不变,因此所有条目都来自那里在同一高度印刷。

这也解释了你对评论的观察:

  

我注意到的是,当我将最后一个坐标设置为0而不是302时,它似乎有效。

这样你的“上层 y ”仍然是页面的底部。因此,“上”和“下”仍保持切换,但始终如此。

我假设你想要这条线:

ct.SetSimpleColumn(myText, dLeftSide, dBottom, dLeftSide + dCellSize, dBottom + dCellHeight, 0, Element.ALIGN_CENTER)