【问题标题】:PDFsharp, meassure height of a string with a specific widthPDFsharp,测量具有特定宽度的字符串的高度
【发布时间】:2019-01-14 06:20:07
【问题描述】:

对 C# 相当陌生,就像 Bambi on ice 对 PDFsharp 一样。这是我第一次在这个论坛发帖,所以请耐心等待!

我已经使用 PrintDocument 创建了一些订单报告,现在我想创建 PDF。

使用包装类和扩展,我只需要编写一组可以使用 PDFsharp 或 PrintDocument 的“布局代码”。

但是,我不知道如何在某个宽度处测量字符串的高度,例如 Graphics 的 SizeF MeasureString(string str, Font aFont, int width)。因为它是基于图形的,所以我必须知道高度而不打印它。 我一直在寻找答案,但没有找到让我朝着正确方向前进的答案。

【问题讨论】:

    标签: c# pdf-generation pdfsharp


    【解决方案1】:

    PDFsharp 使用XGraphics 类进行绘图。而XGraphics 也有一个MeasureString 方法。

    并且XGraphics 也可以用于打印,所以也许您只需要使用PDFsharp 的XGraphics 类实现一个。

    使用 PDFsharp 的 XGraphics 类,您只能获取具有特定字体高度的特定文本的宽度和高度,因此要获取特定宽度的高度,这可能需要执行循环(可能使用间隔嵌套)来确定适当的字体高度。

    要确定多行文本的高度,您可以使用XTextFormatterEx 系列中的一个类。也许这就是您所需要的。
    见这里:
    https://forum.pdfsharp.net/viewtopic.php?f=8&t=3192

    【讨论】:

    • 但不是这样我才能获得一定宽度的高度。哦,我可以直接打印到打印机吗?以为它必须通过 pdf 文件...抱歉,如果有很多编辑,则使用 enter 换行....
    • 我承认我不知道“SizeF MeasureString(string str, Font aFont, int width)” 的作用,但我更新了我的答案。是单行文字还是多行文字?
    • 可以是单行也可以是多行,也可以是放不下的文本,必须拆分成多行。从 MeasureString(string str, Font aFont, int width) 返回的 SizeF 将 Height 设置为确定的高度,它的工作方式类似于 sharm。
    • 如果它可以是多行的,那么 XTextFormatterEx 应该是要走的路。您可以将 XTextFormatterEx 视为可以适应您的需求的示例。
    • 那我得看看 XTextFormatterEx。我认为 XGraphics.FromGraphics(...) 不会将其作为文本“传输”,否则会很好...谢谢 Bally!
    【解决方案2】:

    这就是我用一种简洁的扩展方法解决它的方法:

     public static XSize MeasureString(this XGraphics gfx, string txt, XFont font, double width)
        {
            int lastfitchar;
            double neededHeight;
            XTextFormatterEx tf = new XTextFormatterEx(gfx);
    
            tf.PrepareDrawString(
                txt,
                font,
                new XRect(0, 0, width, XUnit.FromMillimeter(300F)),
                out lastfitchar, out neededHeight);
            return new XSize(width, neededHeight);
        }
    

    也许它可以帮助某人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多