2016-02-08 93 views
2

我目前使用iTextSharp的ShowTextAligned方法成功地向PDF添加文本。該方法看起來像這樣(C#):iTextSharp ShowTextAligned Anchor Point

public void ShowTextAligned(
    int alignment, 
    string text, 
    float x, 
    float y, 
    float rotation 
) 

但是,目前還不清楚我們正在創建文本的錨點。我們提供xy,但這些對應於文本矩形的左上角,左下角還是別的東西?這也受到行間距的影響?

我看了這個website的文檔,但它不是很具體的解釋。請參閱PdfContentByte類/ PdfContentByte方法/ ShowTextAligned方法。

+0

見[這個問題](http://stackoverflow.com/q/30319228/231316)這解釋了PDF座標系。簡而言之,在最簡單的PDF中,x,y是相對於左下角的。 –

回答

6

顯然,錨點取決於對齊的類型。如果您的定位點位於文本的左側,則說明您是右對齊是沒有意義的。

此外,文本操作通常會相對於基線對齊。

這樣:

  • 左對齊文本錨點文本基線的最左邊的點。
  • 對於居中對齊的文本,定位點是文本基線的中點。
  • 對於右對齊的文本,定位點是文本基線的最右點。

更多視覺:

Visually

這已經使用所生成的:

[Test] 
public void ShowAnchorPoints() 
{ 
    Directory.CreateDirectory(@"C:\Temp\test-results\content\"); 
    string dest = @"C:\Temp\test-results\content\showAnchorPoints.pdf"; 

    using (Document document = new Document()) 
    { 
     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(dest, FileMode.Create, FileAccess.Write)); 
     document.Open(); 

     PdfContentByte canvas = writer.DirectContent; 

     canvas.MoveTo(300, 100); 
     canvas.LineTo(300, 700); 
     canvas.MoveTo(100, 300); 
     canvas.LineTo(500, 300); 
     canvas.MoveTo(100, 400); 
     canvas.LineTo(500, 400); 
     canvas.MoveTo(100, 500); 
     canvas.LineTo(500, 500); 
     canvas.Stroke(); 

     ColumnText.ShowTextAligned(canvas, Element.ALIGN_LEFT, new Phrase("Left aligned"), 300, 500, 0); 
     ColumnText.ShowTextAligned(canvas, Element.ALIGN_CENTER, new Phrase("Center aligned"), 300, 400, 0); 
     ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, new Phrase("Right aligned"), 300, 300, 0); 
    } 
}