当你这样做时:
baseCanvas.ShowTextAligned("Some text", x, y, TextAlignment.CENTER, 0);
那么你希望坐标(x, y)与文本的中间"some text"重合。
在您的代码 sn-p 中,您将一些文本以坐标 (555, 839) 为中心,将一些文本以坐标 (40, 809) 为中心,这解释了差异。
既然您使用的是 iText 7,为什么不利用现在可以轻松地将 Paragraph 对象定位在绝对位置这一事实呢? iText 7 jump-start tutorial for .NET 已经介绍了一些基本的构建块,但 Building blocks tutorial 更深入。
看一下chapter 2 的第一个例子,并把它改成这样:
PdfPage page = pdf.AddNewPage();
PdfCanvas pdfCanvas = new PdfCanvas(page);
Rectangle rectangle = new Rectangle(36, 650, 100, 100);
Canvas canvas = new Canvas(pdfCanvas, pdf, rectangle);
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont bold = PdfFontFactory.createFont(FontConstants.TIMES_BOLD);
Text title =
new Text("The Strange Case of Dr. Jekyll and Mr. Hyde").SetFont(bold);
Text author = new Text("Robert Louis Stevenson").SetFont(font);
Paragraph p = new Paragraph().Add(title).Add(" by ").Add(author);
p.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);
canvas.Add(p);
canvas.Close();
这应该在矩形(36, 650, 100, 100) 内添加文本并将所有内容居中。