我正在使用PDFsharp (http://www.pdfsharp.net/)来绘制一个字符串。我希望文本被放置在位置( 0,0),但是当它渲染到PDF时,X位置是0,但是文本的顶部是向下偏移的。我认为这是由于字体的行高,因为当我突出显示文本时,我可以看到突出显示超出了顶部和底部。如何让PDFsharp在没有填充的情况下定位文本,使文本的顶部恰好位于标签的边缘?

这是我用来绘制文本的代码片段:
XFont font = new XFont(text.Font,
XUnit.FromMillimeter(text.Height), XFontStyle.Regular);
gfx.DrawString(text.Content, font, textLayer,
new XPoint(XUnit.FromMillimeter(0), XUnit.FromMillimeter(0)),
XStringFormats.TopLeft);发布于 2015-09-15 14:06:37
填充是字体的一部分。有些字符有变音符号-有些甚至有两个,一个堆叠在另一个之上。
你可以画"u","A",“base”或"Ǻ“--它们将共享相同的基线。
我不知道您是否可以从字体中查询升降器的高度,以使"T“的顶栏位于0行。
在最坏的情况下,您可以在生成的PDF文件中测量“填充”,并将其用作偏移量,以在负值位置绘制字符串。
但是,如果文本发生变化,您可能会丢失重要的变音符号。
发布于 2015-09-16 12:55:30
这就是我最终要做的。将字符串转换为XGraphicsPath。然后使用GdiPath获取文本每边的最小/最大点。在我得到它们之后,我能够计算出最高字母的顶部在哪里,并减去与原始位置(具有填充)的差值。然后,我可以绘制实际的文本偏移该值。
XGraphicsPath path = new XGraphicsPath();
XFont font = new XFont(text.Font, XUnit.FromMillimeter(text.Height), XFontStyle.Regular);
//path.AddString with my string details
PointF[] points = path.Internals.GdiPath.PathPoints;
foreach (PointF point in points)
{
//Get leftmost point x value
if (minX == null || point.X < minX)
{
minX = point.X;
}
//Get top most point y value
if (minY == null || point.Y < minY)
{
minY = point.Y;
}
//Get top most point y value
if (maxX == null || point.X > maxX)
{
maxX = point.X;
}
//Get bottom most point y value
if (maxY == null || point.Y > maxY)
{
maxY = point.Y;
}
}https://stackoverflow.com/questions/32576988
复制相似问题