当前位置: 首页 > 编程语言 > C#

PDFSharp:自动换行测量长文本高度分享

时间:2023-04-10 22:20:46 C#

PDFSharp:自动换行测量长文本高度,XBrushes.Black,newXRect(x,y,textAreaWidth,1000),XStringFormats.TopLeft);如果文本比textAreaWidth长,这将换行。如何获得刚刚绘制的文字的高度?我尝试使用gfx.MeasureString(),但没有支持指定最大宽度的重载。gfx.MeasureString()返回没有文本换行的文本大小。感谢您的任何提示。XTextFormatter类(源代码包含在PDFsharp中)旨在帮助您入门。如果它不符合您的需求,请对其进行修改。由于XTextFormatter在内部维护Y位置,因此返回刚刚绘制的文本的高度将是一个相当简单的更改。不要修改XTextFormatter,而是考虑使用MigraDocFoundation(也包括在内)。PdfSharp的这个扩展对我不起作用。不知道为什么,但我保持了比预期更高的高度(几乎是所需高度的两倍)。所以我决定在XGraphics对象中编写一个扩展方法,我可以在其中指定maxWidth并在内部计算软换行符。该代码使用默认的XGraphics.MeasureString(string,XFont)来内联文本宽度和聚合以及文本中的单词以计算换行符。计算软件换行符的代码如下所示://////计算软换行符的数量///privatestaticintGetSplittedLineCount(thisXGraphicsgfx,stringcontent,XFontfont,doublemaxWidth){//handyfunctionfor创建字符串列表Func>listFor=val=>newList{val};//string.IsNullOrEmpty太长:pFuncnOe=str=>string.IsNullOrEmpty(str);//为空字符串返回一个空格(sIe=SpaceifEmpty)FuncsIe=str=>nOe(str)?“”:海峡;//检查我们是否可以在maxWidthFunc中适应文本canFitText=(t1,t2)=>gfx.MeasureString($"{(nOe(t1)?"":$"{t1}")}{sIe(t2)}",font).Width,string,IList>appendtoLast=(list,val)=>list.Take(list.Count-1).Concat(listFor($"{(nOe(list.Last())?"":$"{list.Last()}")}{sIe(val)}")).ToList();varsplitted=content.Split('');varlines=splitted.Aggregate(listFor(""),(lfeed,next)=>canFitText(lfeed.Last(),next)?appendtoLast(lfeed,next):lfeed.Concat(listFor(next)).ToList(),列表=>列表.Count());返回线;}查看完整代码的要点:https://gist.github.com/erichillah/d198f4a1c9e8f7df0739b955b245512a我发现PdfSharp的这个扩展是这个问题的答案:PDFsharp:改进XTextFormatter类:测量文本的高度你可以在这里clone或fork相关代码:https://github.com/yolpsoftware/PdfSharp/tree/measure-text-height以上是C#学习教程:PDFSharp:UsingAutomaticLinebreaksmeasuretheheightoflongtext所有的分享的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权请点击维权联系管理员删除转载请注明出处: