C#の文字列に格納されたRTFのセットは、ユーザーが印刷設定を1回表示して、1つのドキュメントとして印刷したいので、これらを1つのドキュメントにマージして印刷する方法です。必要に応じてオフィスの相互運用機能を使用できますが、明らかにこれを回避する方が適切です。
編集:各ドキュメントの間にページ分割が必要になりますが、これには\pageを挿入するだけでよいと思います
最初のドキュメントから末尾の } を削除する必要があります。
2 番目のドキュメントから {\rtf1... および {fonttbl.. および {colortbl... セクションを削除する必要があります。あなたが持っているかもしれないヘッダー、マージンなどを見る必要があるかもしれません。
あなたが言うように、それらを \page で区切ります。
これは、フォントとカラー テーブルが同じであることを前提としています。
おそらく、ユーザーから印刷設定を取得し、それがオプションである場合は、各ドキュメントを個別にサイレントに印刷することをお勧めします。
文書 1:
{\rtf1\ansi\ansicpg1252\deff0\deflang5129
{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}
{\colortbl;\red0\green0\blue0;}
\margl1134\margr1134\margt1134\margb1134\sectd
\pard
Document One Content
\line
}
文書 2:
{\rtf1\ansi\ansicpg1252\deff0\deflang5129
{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}
{\colortbl;\red0\green0\blue0;}
\margl1134\margr1134\margt1134\margb1134\sectd
\pard
Document Two Content
\line
}
マージされたドキュメント:
{\rtf1\ansi\ansicpg1252\deff0\deflang5129
{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}
{\colortbl;\red0\green0\blue0;}
\margl1134\margr1134\margt1134\margb1134\sectd
\pard
Document One Content
\page
\pard
Document Two Content
\line
}
2 つのリッチ テキスト ボックスを使用できます。rtf ファイルを一方のリッチ テキスト ボックス (rtbTemp) に読み込んでから、テキストをカット アンド ペーストしてもう一方 (rtbMerged) に貼り付けます。例えば:
RichTextBox rtbTemp = new RichTextBox();
RichTextBox rtbMerged = new RichTextBox();
string Merge(string s1, string s2)
{
rtbTemp.Rtf = s1;
rtbTemp.SelectAll();
rtbTemp.Cut();
rtbMerged.Paste();
rtbMerged.AppendText(Environment.NewLine);
rtbMerged.AppendText(Environment.NewLine);
rtbTemp.Rtf = s2;
rtbTemp.SelectAll();
rtbTemp.Cut();
rtbMerged.Paste();
return rtbMerged.Rtf;
}
最初の rtf ファイルの最後から 3 文字だけを削除し、2 番目の rtf ファイルの最初の文字の 1 つを削除すると、うまくいきます!
RichTextBox r = new RichTextBox();
r.Rtf = rtf1.Rtf.Substring(0, rtf1.Rtf.Length - 3) + rtf2.Rtf.Substring(1,rtf2.Rtf.Length - 1)
私はこのコードを使用して rtf ファイルにマージし、ファイルのパスでメソッド Merge を使用しました。デテキストしかない場合は修正できますが、それより大きいドキュメントがある場合はメモリのエラーになります。私の英語でごめんなさい。
RTF形式の詳細に立ち入らずにこれを行う方法もあると思います。RTF をファイルとして保存し、MS Word のオートメーションを使用してドキュメントを開いて相互に追加します (その後、RTF として再度保存します)。
どうぞ (C# コードが含まれています)