【问题标题】:Justify text in SQL Reporting Services在 SQL Reporting Services 中对齐文本
【发布时间】:2012-06-21 07:41:04
【问题描述】:

有没有办法在 SQL Reporting Services 中完全对齐文本?

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

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

【问题讨论】:

  • 你是什么意思?您可以像在任何其他富文本编辑器中一样证明文本框/tablix 控件中的文本。我猜我错过了一些东西 - 但它是什么?编辑:注意,我使用的是 SQL Server Reporting Services 2008R2
  • 感谢您的回复。你能给我一个确认这个功能的链接吗?因为我发现的所有信息都表明它仍然是不受支持的功能,例如social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/…
  • 你的意思是完全对齐,而不是左对齐或右对齐?
  • 你追求什么版本?在 SSRS-2008 中这是不可能的。
  • 我在充分证明文本的合理性之后。我找不到任何支持,但希望有一些解决方法

标签: sql reporting-services report


【解决方案1】:

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

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

您应该关注corresponding MS feedback item,或许也应该对其进行投票。它曾经有 527 票,但在从 MS Connect 迁移到这个新的反馈站点期间被重置为 0。我是通过this social.msdn thread找到的bug报告,已经持续了一段时间。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这是一个可能的解决方法:Full Text Just

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

      【讨论】:

        【解决方案4】:

        在标准中,SSRS 不支持 justify。有解决办法:

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

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

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

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

        【讨论】:

          【解决方案5】:

          如果你使用<p> 试试:

          $("[style*='padding-bottom:10pt']").css("text-align", "justify");
          

          【讨论】:

            【解决方案6】:

            如果您打开 .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>     
            

            【讨论】:

              【解决方案7】:

              实际上,如果您将值作为 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 中

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

              【讨论】:

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