12

在 SQL Reporting Services 中是否有完全对齐文本的方法?

我一直在四处寻找,似乎 Reporting Services 仍然不支持该功能,但是有什么解决方法吗?

我知道以前有人问过这个问题,但与此同时可能已经取得了进展。

4

7 回答 7

7

这是不可能的,至少在 SSRS 2008 及以下版本中是不可能的。对齐文本的唯一选项是左、中和右。

我能想到的唯一解决方法是在文本框中启用 HTML 标签,但是 Justify 对齐的样式被忽略了。所以真的没有任何合适的解决方法AFAIK,没有使用带有合理文本的图片(〜颤抖!〜)。

您应该密切关注相应的 MS 反馈项目,并可能对其进行投票。它曾经有 527 票,但在从 MS Connect 迁移到这个新的反馈站点期间被重置为 0。我通过这个 social.msdn 线程找到了错误报告,该线程已经持续了很长时间。

于 2012-06-22T13:42:58.807 回答
1

'SSRS 中带有对齐文本的图片':您可以创建一个 AdvRichTextBox 控件(参见代码http://geekswithblogs.net/pvidler/archive/2003/10/14/182.aspx)并按照以下步骤在 ssrs 中使用它:http ://binaryworld.net/Main/CodeDetail.aspx?CodeId=4049

于 2013-07-17T15:42:10.210 回答
1

这是一个可能的解决方法:全文只是

它利用 RS 实用程序和 OLE 自动化来完成这项工作。

于 2015-03-18T17:58:43.673 回答
0

在 Standard 中,SSRS 不支持 justify。有可能解决:

  1. 使用第三方控件执行此操作:(我无法让其中一个工作。)
  2. 通过 COM 调用组件,如 Word。(这是一个安全问题,但可能。)
  3. 用 HTML 格式化该框并在单词之间放置小空格。这可以在存储过程中完成。

解决方案3很长,无法详细描述。这就是为什么我将我的解决方案免费下载到我的网页上的原因。

我的解决方案的优点是无需安装。

这是我的解决方案的链接:http ://www.rupert-spaeth.de/justify/

于 2016-11-28T20:16:12.897 回答
0

如果您使用<p>尝试:

$("[style*='padding-bottom:10pt']").css("text-align", "justify");
于 2017-05-20T22:46:18.823 回答
0

如果您打开 .rdl 代码文件(即 xml),以下将起作用。

你需要一个段落标签,如果它不存在的话。

这会将数字格式化为使用逗号(美国风格),小数点后有两个点。

然后通过 Right 标签右对齐 {我一直在寻找 justify 标签,但它是 TextAlign}

         <Paragraph>
            <TextRuns>
              <TextRun>
                <Value>=Format( Sum(Fields!ourField.Value, "DataSet2") , "N2") </Value>
                <Style>
                  <FontFamily />
                  <Color>White</Color>
                </Style>
              </TextRun>
            </TextRuns>
            <Style>
              <TextAlign>Right</TextAlign>
            </Style>
          </Paragraph>     
于 2018-11-07T21:40:21.167 回答
0

实际上,如果您将值作为 HTML 传递并使用某些东西将文本格式化为 justify'ed html 文本,则实际上可以在 SSRS 报告中对齐文本,在我的情况下,我使用 .NET C# 将传递的字符串格式化为对齐的 html 文本。

但在此之前,我们需要配置我们的 SSRS 报告以接受 HTML,为此我们需要添加一个文本框并创建一个占位符。

要添加占位符,请单击文本框,直到它允许您向其中写入文本,然后右键单击并选择“创建占位符...”

创建占位符

创建占位符后,系统会提示您输入占位符的属性,您只需指定值和标记类型

占位符属性

确保将标记类型选择为 HTML,并为值指定将具有对齐的 html 文本的变量,在我们的例子中,我们将其称为transformedHtml。

现在我们需要创建一个函数,将我们的字符串转换为对齐的 HTML 文本

    /// <summary>
    /// 
    /// </summary>
    /// <param name="text">The text that we want to justify</param>
    /// <param name="width">Justified text width in pixels</param>
    /// <param name="useHtmlTagsForNewLines">if true returns the output as justified html if false returns the ouput as justified string</param>
    /// <returns>Justified string</returns>
    public string GetText(string text, int width, bool useHtmlTagsForNewLines = false)
    {
        var palabras = text.Split(' ');
        var sb1 = new StringBuilder();
        var sb2 = new StringBuilder();
        var length = palabras.Length;
        var resultado = new List<string>();

        var graphics = Graphics.FromImage(new Bitmap(1, 1));
        var font = new Font("Times New Roman", 11);

        for (var i = 0; i < length; i++)
        {
            sb1.AppendFormat("{0} ", palabras[i]);
            if (graphics.MeasureString(sb1.ToString(), font).Width > width)
            {
                resultado.Add(sb2.ToString());
                sb1 = new StringBuilder();
                sb2 = new StringBuilder();
                i--;
            }
            else
            {
                sb2.AppendFormat("{0} ", palabras[i]);
            }
        }
        resultado.Add(sb2.ToString());

        var resultado2 = new List<string>();
        string temp;

        int index1, index2, salto;
        string target;
        var limite = resultado.Count;
        foreach (var item in resultado)
        {
            target = " ";
            temp = item.Trim();
            index1 = 0; index2 = 0; salto = 2;

            if (limite <= 1)
            {
                resultado2.Add(temp);
                break;
            }
            while (graphics.MeasureString(temp, font).Width <= width)
            {
                if (temp.IndexOf(target, index2) < 0)
                {
                    index1 = 0; index2 = 0;
                    target = target + " ";
                    salto++;
                }
                index1 = temp.IndexOf(target, index2);
                temp = temp.Insert(temp.IndexOf(target, index2), " ");
                index2 = index1 + salto;

            }
            limite--;
            resultado2.Add(temp);
        }
        var res = string.Join(useHtmlTagsForNewLines ? "<br> " + Environment.NewLine : "\n", resultado2);

        if (useHtmlTagsForNewLines)
            res = $"<div>{res.Replace(" ", "&nbsp;").Replace("<br>&nbsp;", "<br>")}</div>";

        return res;
    }

通过使用此函数,我们可以将任何字符串转换为两端对齐的文本,并且我们可以选择输出是 HTMl 还是简单字符串

然后我们可以像这样调用这个方法

        string text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";
        string transformedHtml = GetText(text, 350, true);

我们得到如下输出:

在 C# 中

点网视图

在 SSRS

SSRS 视图

现在这个例子主要展示了如果你将值从 C# 代码传递到 ssrs 报告,如何获得对齐的文本,但是如果你在存储过程中创建相同的函数,以相同的方式格式化任何文本,你可以实现这一点。希望这可以帮助某人。

于 2020-05-20T11:34:26.613 回答