12

SQL Reporting Services でテキストを完全に正当化する方法はありますか?

調べてみたところ、この機能はまだ Reporting Services でサポートされていないようですが、回避策はありますか?

この質問は以前にも聞かれたことは知っていますが、その間に進展があったかもしれません。

4

7 に答える 7

7

これは、少なくともSSRS2008以下では不可能です。テキストを整列するための唯一のオプションは、左、中央、右です。

私が考えることができる唯一の回避策は、テキストボックスでHTMLタグを有効にすることでしたが、Justifyアライメントのスタイルは無視されます。したがって、正当化されたテキスト(〜shudder!〜)を含む画像を使用する以外に、適切な回避策AFAIKは実際にはありません。

対応するMSフィードバック項目を監視し、おそらくそれに投票する必要があります。以前は527票でしたが、MSConnectからこの新しいフィードバックサイトへの移動中に0にリセットされました。このsocial.msdnスレッドでバグレポートを見つけました。これはかなり長い間続いています。

于 2012-06-22T13:42:58.807 に答える
1

考えられる回避策は次のとおりです。全文のみ

RS ユーティリティと OLE オートメーションを使用してジョブを実行します。

于 2015-03-18T17:58:43.673 に答える
0

.rdl コード ファイル (xml) を開くと、次のように動作します。

段落タグがまだ存在しない場合は、必要です。

これは、小数点以下 2 桁のコンマ (US スタイル) を使用するように数値をフォーマットします。

次に、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として渡し、何かを使用してテキストを正当化された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 に答える