2016-05-25 107 views
-1

我無法讓文本居中在頁面上。我究竟做錯了什麼?我嘗試了好幾種方式來獲得與該頁面,但沒有似乎使中心的網頁上的文字.....iTextSharp將文本居中放在頁面

  BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
      PdfReader reader = new PdfReader("C:\\temp\\Certificate12.pdf"); 
      var pageSize = reader.GetPageSize(1); 

      iTextSharp.text.Rectangle rec2 = new iTextSharp.text.Rectangle(PageSize.LETTER); 

      PdfStamper stamper = new PdfStamper(reader, stream1); 

      PdfContentByte canvas = stamper.GetUnderContent(1); 

      canvas.BeginText(); 
      canvas.SetFontAndSize(bf, 24); 

      string nameText = "First Name Last Name"; 
      int textWidth = (int)nameText.Length; 

      int canvasWidth = (int)canvas.PdfDocument.PageSize.Width; 
      float xStart = (canvasWidth/2) - (textWidth/2); 

      canvas.ShowTextAligned(PdfContentByte.ALIGN_CENTER, nameText, xStart, pageSize.GetTop(Utilities.MillimetersToPoints(145)), 0); 

回答

0

首先,如果你使用ShowTextAlignedALIGN_CENTER,iTextSharp的將居中文本對於你來說,所以你根本不必處理文本寬度。你只需要告訴它將文本集中在哪個中心點上。

因此,你可以居中你的網頁上的文字是這樣的:

BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 

using (PdfReader reader = new PdfReader(source)) 
using (PdfStamper stamper = new PdfStamper(reader, new FileStream(dest, FileMode.Create, FileAccess.Write))) 
{ 
    Rectangle pageSize = reader.GetPageSize(1); 
    PdfContentByte canvas = stamper.GetUnderContent(1); 

    string nameText = "First Name Last Name"; 

    canvas.BeginText(); 
    canvas.SetFontAndSize(bf, 24); 
    canvas.ShowTextAligned(PdfContentByte.ALIGN_CENTER, nameText, (pageSize.Left + pageSize.Right)/2, pageSize.GetTop(Utilities.MillimetersToPoints(145)), 0); 
    canvas.EndText(); 
} 
+0

我做你所做的事,但它仍然是不居中。我不知道如何在這裏放置一個圖像來展示你。 –

+0

這很奇怪。我收到的輸出是居中。我假設你正在使用當前的iTextSharp版本。因此,唯一明顯的區別是您使用的PDF。請分享它來重現您的問題。 – mkl