2016-09-30 3 views
0

내 PDF에 2 개의 텍스트를 그립니다. 첫 번째 텍스트는 왼쪽 상단 모퉁이에 정렬되어야합니다. 이 작동합니다.첫 번째 텍스트 아래에 두 번째 텍스트 그리기

내가 사용하고 있습니다 :

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 ** 값이 상승합니다. (변형을 적용하면 변경 될 수 있지만 좌표계가 변형되었음을 언급하지 않았습니다.) 따라서 텍스트 1을 (0,0)에 그리고 텍스트 2를 (0, 100)으로 그릴 때 후자는 그려지지 않습니다 * 아래 * 대신 * 위의 * 텍스트 1. 또한 좌표계 원점은 일반적으로 페이지의 왼쪽 하단에서 시작됩니다 (필수는 아니지만 매우 일반적입니다). 따라서 첫 번째 코드 블록이 실제로 왼쪽 상단 모서리에 텍스트를 추가하는 경우 몇 가지 중요한 세부 사항을 언급하는 것을 잊었습니다. – mkl

+0

@mkl 상승하는 y 값에 대한 정보는 훌륭합니다! 이것은 내 코드이며, 나는 아무것도 놓치지 않았습니다. 텍스트는 실제로 왼쪽 상단에 그려집니다. – tmighty

+0

[코드를 한 번 더 살펴보면] ... 아, ok ... canvas.ShowTextAligned'에는 세 개의 부동 매개 변수 '0, 830, 0'이 있습니다. 그들은 ** x **, ** y ** 및 ** rotation **입니다. 따라서 '830'은 너가 생각한 너비가 아니지만, 텍스트가 그려지는 곳은 ** y ** 좌표이고, 왼쪽 하단 구석에 원점이있는 A4 세로 830은 페이지. BTW,'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 전문가가 아닌 경우 해당 방법을 고려하지 않아야합니다. BeginText(), EndText() 대신에 ColumnText.ShowTextAligned()을 사용해야하며 그 사이에 추가 한 모든 줄을 사용해야합니다. 이러한 방법은 PDF 구문을 사용하는 사람들을 대상으로합니다.

관련 문제