0

現在、データセット内のユーザーごとに個別のレターを生成するアプリケーションを構築しています。レターの内容は vb.net アプリケーションで管理され、RTF 形式でデータベースに保存されます。レターが作成されると、すべてのコンテンツがデータベースから取得され、vb.net ロジックを使用してレターが形成されます。

コンパイルされると、パラメーターとして Crystal に送信されます。これはうまく機能し、フィールドテキストの解釈をRTFに設定すると、適切なRTF表示が可能になりました。クライアントは代わりに、Crystal 内のロジック (テキストをコンパイルする if ステートメント) を変更したいと考えています。

そこで、一連の列を含む空のデータセットを作成し、それらの列に RTF を入力しました (ID で並べ替えられているため、段落が削除されない限り値は変更されず、これに対するオプションはありません)。これにより、{table.1} + {table.2} などに移動して RTF 文字列を作成できます...

ここが問題です。数式で RTF 文字列を作成すると (+ または & を使用)、最初の RTF エントリのみが表示されます。数式を解釈なしに切り替えると、すべての内容が書き出されたエントリの RTF が表示されるので、そこにあることがわかります。また、数式フィールドで RTF を手動で組み合わせたところ、同じ問題が発生しました。


StringVar 出力;

output := output & "{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Times New Roman;}}\viewkind4\uc1\pard\lang1033\f0\fs23 これは最初のテストです }" ; output := output & "{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Times New Roman;}}\viewkind4\uc1\pard\lang1033\f0\fs23 これは 2 番目のテストです \par \パー}";


出力

現時点では、すべてのテキストを移動して Crystal 内の Formula フィールドを分離してから結合する以外に、これを回避する方法があるかどうかはわかりません。これは、テキストを変更したい場合、Crystal 内で行う必要があることを意味します。私はこのルートには行きたくないので、意見や提案を探しています。

4

1 に答える 1

0

Crystal は RTF をサポートしていますが、RTF エントリの最初の発生時に完全に形成される必要があります。私の質問では、2 つの別個の COMPLETE RTF エントリが表示されます。すべてのエントリに RTF ID タグがあるため、これは不可能です。上記のテキストをテキスト エディターにコピーして RTF として保存した場合も、同じ問題が発生します。最初の行しか取得できません。これは、式ではなくパラメーターとして機能する理由を説明していませんが、それぞれがどのように評価され、後で評価される可能性があります (パラメーターは将来的にサポートを失う可能性があります)。

RTF を Crystal に適切に渡すには、2 つのリッチ テキスト ボックス オブジェクトが必要です。1 つは一時ボックスで、もう 1 つはビルダー ボックスで、RTF コンテンツ全体ではなく、書式設定されたテキストのみを選択します。この例は、次の場所にあります。

http://moneybaron.org/2011/08/23/vb-net-merge-rtf-documents/

RTF 文字列から閉じ中かっこを削除したり、RTF テーブルを再構築したりするなどのいくつかのハックは別として、中かっこを削除するとサポートされていない構成が発生する可能性があり、再構築が非常に迅速に面倒になる可能性があります。

お役に立てれば!!

于 2013-11-21T16:02:52.223 に答える