我正在使用iTextSharp程序集版本5.5.10并且想要面对一个错误。当我出于某种未知原因定位我的SetSimpleColumns时,第11列直到14t列保持在同一行。 我首先想到它与边距有关,但是我的具有相同坐标的矩形位置正确。
结果如下:
代码如下:
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
答案 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)