2016-09-30 107 views
0

我想在我的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

回答

1

MoveTo()方法用於繪製路徑(線條和圖形狀態中的形狀),而不是文本(處於文本狀態)。它將m運算符添加到內容流中。如果你是一個PDF專家,您應該使用SetTextMatrix()方法BT/ET文本塊:What does setTextMatrix of contentByte class in iText do?

注意如果;這很重要。如果你不是PDF專家,你不應該用這些方法來玩弄。您應該使用ColumnText.ShowTextAligned()而不是BeginText()EndText()以及您在中間添加的所有行。這些方法適用於講PDF語法的人。

相關問題