【问题标题】:Measure String in MigraDoc TextFrame在 MigraDoc TextFrame 中测量字符串
【发布时间】:2014-11-12 09:40:03
【问题描述】:

我已经尝试在他们的论坛上提问,但尚未收到回复,希望有人可以在这里帮助我。

我在 asp.net 中设置了一个自定义报告屏幕,人们可以在其中拖动标签和字段,而 Migradoc 通过使用文本框和顶部/左侧/宽度/高度属性将它们放置在它们被拖动的相同位置来相应地生成它/调整为。这一切都很好,但是我遇到的一个问题是,如果文本比它离开页面的文本框长,我需要页面相应地继续移动,同时保留其他对象。

我可以使用下面的代码来测量一个字符串:

Style style = document.Styles["Normal"];
TextMeasurement tm = new TextMeasurement(style.Font.Clone());
float fh = tm.MeasureString(value, UnitType.Millimeter).Height;
float fw = tm.MeasureString(value, UnitType.Millimeter).Width;

但它仅用于比较框架的宽度而不是高度,因为一旦放入较小的区域,它可能会有所不同。有谁知道我如何根据绑定的宽度/高度值(即在文本框架内)测量此字符串。

【问题讨论】:

    标签: c# asp.net migradoc


    【解决方案1】:

    查看XTextFormatter 类中的CreateBlocks() 方法以及它如何在循环中调用MeasureString 以将文本分成多行。

    恐怕你必须自己实现这样的循环。

    或者可以使用DocumentRenderer 类的PrepareDocument() 方法让 MigraDoc 完成工作,并在完成后查询维度。

    顺便说一句:之前论坛上也有人问过类似的问题:
    http://forum.pdfsharp.net/viewtopic.php?p=3590#p3590
    答案包括一些源代码。

    【讨论】:

      【解决方案2】:

      执行此操作的一种简单方法(使用 I-liked-the-old-stack-overflow 的链接)是将 PdfWordWrapper class 添加到您的项目中,然后按如下方式计算文本的尺寸:

      var wrapper = new PdfWordWrapper(g, contentWidth); //g is your XGraphics object
      
      wrapper.Add("My text here", someFont, XBrushes.Black);
      wrapper.Process();
      var dimensions = wrapper.Size; //you can access .Height or .Width
      //If you want to reuse the wrapper just call .Clear() and then .Add() again with some new text
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        相关资源
        最近更新 更多