在第一个文本下面绘制第二个文本

问题描述:

我想在我的PDF上绘制两个文本。 第一个文本应该与左上角对齐。 这工作正常。在第一个文本下面绘制第二个文本

我使用:

canvas = stamper.GetOverContent(i) 
watermarkFont = iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.HELVETICA, iTextSharp.text.pdf.BaseFont.CP1252, iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED) 
watermarkFontColor = iTextSharp.text.BaseColor.RED 

canvas.MoveTo(0, 0) 'I think the canvas is the space that we draw onto. My documents always start at position X=0 and Y=0, so move to 0,0 should be fine 
canvas.BeginText() 
canvas.SetFontAndSize(watermarkFont, 12) 
canvas.SetColorFill(watermarkFontColor) 
canvas.ShowTextAligned(Element.ALIGN_TOP, uText, 0, 830, 0) 'is 830 the width of the available space? 
canvas.EndText() 

现在我想提请其他文本的第一个文本下方大约100像素。

我使用:

canvas.MoveTo(0, 100) 'let's draw the second text at X=100, Y=100 
canvas.BeginText() 
canvas.SetFontAndSize(watermarkFont, 12) 
canvas.SetColorFill(watermarkFontColor) 
canvas.ShowTextAligned(Element.ALIGN_CENTER, uBewirtung, 0, 830, 0) 
canvas.EndText() 

第二个文本但是不显示在所有。 我怀疑我是在文档外绘画,但我没有看到我的错误。

+1

PDF默认坐标与数学中的平常一样,即当向上*时** y **值增加。 (应用转换可以改变,但你没有提到你已经转换了坐标系。) 因此,当在(0,0)处绘制文本1并且在(0,100)处绘制文本2时,后者不被绘制*下面*而是*上面*文本1.此外,坐标系原点通常从页面的左下角开始(这不是强制性的,但非常常见)。因此,如果您的第一个代码块确实在左上角添加了文本,您忘记提及一些关键细节。 – mkl

+0

@mkl有关上升y值的信息非常棒!这是我的代码,我不会错过任何东西。文本确实在左上角绘制。 – tmighty

+0

[再次查看你的代码] ...啊,好的...在'canvas.ShowTextAligned'中,你有三个浮点参数,'0,830,0';他们是** x **,** y **和**旋转**。因此,你的'830'不是你想知道的宽度,但它是绘制文本的** y **坐标,纵向A4上的830与左下角的原点相当接近顶点页。顺便说一句,'Element.ALIGN_TOP'在那里没有意义,对齐可以是'ALIGN_CENTER','ALIGN_RIGHT'或'ALIGN_LEFT'。 – mkl

MoveTo()方法用于绘制路径(线条和图形状态中的形状),而不是文本(处于文本状态)。它将m运算符添加到内容流中。如果你是一个PDF专家,您应该使用SetTextMatrix()方法BT/ET文本块:What does setTextMatrix of contentByte class in iText do?

注意如果;这很重要。如果你不是PDF专家,你不应该用这些方法来玩弄。您应该使用ColumnText.ShowTextAligned()而不是BeginText()EndText()以及您在中间添加的所有行。这些方法适用于讲PDF语法的人。