Preview for .NET 4.0J(C1PrintDocument)では、以下の機能が強化されました。
CanSplit プロパティのデフォルト値が false から true に変更されました。したがって、デフォルトでは、テーブル行または列のグループがページ間で分割されます。この変更の理由は、すべてがデフォルト設定で1つの行グループがデータ連結されている(データ連結テーブルを作成する適切な方法)場合、生成されるテーブルが現在のページに収まらないと、切り捨てられてしまったためです。現在は、期待されるとおりに動作するようになりました。
C1Preview は、C1Report 定義のインポートおよび生成をサポートするようになりました。この機能は C1Report アセンブリに依存しません。
C1Report をC1PrintDocumentにインポートするには、C1PrintDocument に追加された新しい ImportC1Report メソッドを使用します。たとえば、次のコードを使用して、C1Report に付属する ReportBrowser サンプルの「Alphabetical List of Products」(製品のアルファベット順リスト)をインポートしてプレビューできます。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
C1PrintDocument doc = new C1PrintDocument(); doc.ImportC1Report("NWind.xml", "Alphabetical List of Products"); C1PrintPreviewDialog pdlg = new C1PrintPreviewDialog(); pdlg.Document = doc; pdlg.ShowDialog(); |
C1Preview には、C1Report 定義のインポートをサポートするための新しいクラスが追加されました。RenderField、RenderSection、および RenderReport クラスです。これらのクラスは、C1Report のインポートをサポートするために追加されましたが、必要に応じて「通常の」レンダリングオブジェクトとして使用できます。
C1Report 定義の詳細については、「C1Report 定義」を参照してください。
PageLayout オブジェクトの PageHeader、PageFooter、WaterMark、および Overlay オブジェクトは、データ連結子オブジェクトを保持することができます。ただし、これらのすべてのオブジェクトのデータソースがC1PrintDocument内に含まれている場合に限ります。つまり、データソースが DataSchema の DataSet である必要があります。そうでない場合は、ドキュメントをシリアライズ解除する際に、データソースを手作業で再作成する必要があります。
レンダリングオブジェクトのサイズを指定する際に、Max および Min 関数を使用できます。たとえば、次のコードは、テキストオブジェクトの幅が少なくとも 5cm になります。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Dim rt As New RenderText("Hello, World!") rt.Style.BackColor = Color.Green rt.Width = "Max(auto, 5cm)" |
C# コードの書き方
C# |
コードのコピー
|
---|---|
RenderText rt = new RenderText("Hello, World!"); rt.Style.BackColor = Color.Green; rt.Width = "Max(auto, 5cm)"; |
次のコードは、「rt2」または「rt3」の下端のいずれか低い方に「rt」の上端を揃えます。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
rt.Top = "Max(rt2.Bottom, rt3.Bottom)" |
C# コードの書き方
C# |
コードのコピー
|
---|---|
rt.Top = "Max(rt2.Bottom, rt3.Bottom)"; |
つまり、次の式は有効ですが
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
rt.Width = "auto + 10mm" |
C# コードの書き方
C# |
コードのコピー
|
---|---|
rt.Width = "auto + 10mm"; |
(オブジェクトの幅を自動の幅より 10mm 大きくします)、次の式は無効です。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
rt.X = "auto + 10mm" |
C# コードの書き方
C# |
コードのコピー
|
---|---|
rt.X = "auto + 10mm"; |
FileFormatEnum 列挙体には、次の2つの新しい要素が追加されました。
また、InfoPath スタイルはすべてのコントロールでサポートされるようになりました。以前は、RenderInputText クラスでのみサポートされていました。
C1PrintDocument に、新しい複合プロパティ CompatibilityOptions が追加されました。
現在、このクラス/プロパティには、次の1つのサブプロパティが含まれます。
C1PrintDocument クラスに、次の新しいパブリック静的プロパティが追加されました。
C1PrintDocument のロードに時間がかかる場合は、システムにインストールされている(ネットワーク)デフォルトのプリンタが遅いことが原因である可能性があります。この場合は、MeasurementDevice を使用してC1PrintDocumentを作成する前に、このプロパティを false に設定してください。たとえば、次のように記述します。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
C1PrintDocument.UsePrinterForDefaultPageSettings = False C1PrintDocument.MeasurementDevice = MeasurementDeviceEnum.Screen Dim doc As New C1PrintDocument() |
C# コードの書き方
C# |
コードのコピー
|
---|---|
C1PrintDocument.UsePrinterForDefaultPageSettings = false; C1PrintDocument.MeasurementDevice = MeasurementDeviceEnum.Screen; C1PrintDocument doc = new C1PrintDocument(); |
または、システムに高速のローカルプリンタと低速のデフォルトネットワークプリンタが存在している場合は、MeasurementPrinterName をローカルプリンタの名前に設定できます。これにより、C1PrintDocument は、測定およびデフォルトのページ設定の取得の両方でそのプリンタを使用します。たとえば、次のように記述します。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
C1PrintDocument.UsePrinterForDefaultPageSettings = True C1PrintDocument.MeasurementDevice = MeasurementDeviceEnum.Printer C1PrintDocument.MeasurementPrinterName = "My local printer name" Dim doc As New C1PrintDocument() |
C# コードの書き方
C# |
コードのコピー
|
---|---|
C1PrintDocument.UsePrinterForDefaultPageSettings = true; C1PrintDocument.MeasurementDevice = MeasurementDeviceEnum.Printer; C1PrintDocument.MeasurementPrinterName = "My local printer name"; C1PrintDocument doc = new C1PrintDocument(); |
スタイルでは、子スタイルで個々のフォントプロパティを指定/再定義できます。Style クラスには、次のパブリックアンビエントフォント関連プロパティが追加されました。
スタイルでは、子スタイルで個々のフォントプロパティを指定/再定義できます。Style クラスには、次のパブリックアンビエントフォント関連プロパティが追加されました。次のコードは、新しいプロパティの使用例を示します。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Dim rt As RenderTable = New RenderTable rt.Style.Font = New Font("Arial", 12) rt.Cells(3, 4).Style.FontBold = True |
C# コードの書き方
C# |
コードのコピー
|
---|---|
RenderTable rt = new RenderTable(); rt.Style.Font = new Font("Arial", 12); rt.Cells[3, 4].Style.FontBold = true; |
これで、セル(3, 4)のフォントが太字になり、その他のすべてのフォントプロパティは親オブジェクトから継承されます。
テーブルおよびセルに追加された次の新しいパブリックプロパティは、セルがページ間で分割される場合にグリッド線を繰り返し表示するかどうかを制御します。
追加された新しいパブリック列挙体:
RenderC1Printable クラスには、次の新しいメソッドが追加されました。
RenderC1Printable を介してC1PrintDocument に他の C1 コンポーネントを挿入する場合は、C1 コンポーネント(C1TrueDBGrid または C1FlexGrid など)を表す内部レンダリングオブジェクトにアクセスする必要がある場合があります。内部レンダリングオブジェクトは、それを格納するドキュメントが生成されるまで作成されなかったため、アクセスは困難でした。それが、この新しいメソッドによって容易になります。次のコードは、この新しいメソッドを使用して、C1TrueDBGrid を表す RenderTable を生成し、テーブルの幅を 50% に設定し、そのテーブルをドキュメントに直接挿入する方法を示します(RenderC1Printable を「ラッパー」として使用しません)。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Dim grid As C1TrueDBGrid = New C1TrueDBGrid ' ... グリッドプロパティを設定します Dim c1pr As RenderC1Printable = New RenderC1Printable c1pr.Object = grid c1pr.GenerateInnerRenderObjects '' 次の行は、グリッドが単一レンダリングオブジェクト ' (RenderTable)で表されるとしています。 c1pr.Children(0).Width = "50%" Dim doc AsC1PrintDocument= NewC1PrintDocument doc.Body.Children.Add(c1pr.Children(0)) |
C# コードの書き方
C# |
コードのコピー
|
---|---|
C1TrueDBGrid grid = new C1TrueDBGrid(); '// ... グリッドプロパティを設定します RenderC1Printable c1pr = new RenderC1Printable(); c1pr.Object = grid; c1pr.GenerateInnerRenderObjects(); '// 次の行は、グリッドが単一レンダリングオブジェクト // (RenderTable)で表されるとしています。 c1pr.Children[0].Width = "50%"; C1PrintDocument doc = new C1PrintDocument(); doc.Body.Children.Add(c1pr.Children[0]); |
オブジェクトが1ページに収まらない場合にのみオブジェクトをページ間で分割するための新しいオプションが追加されました。この操作を容易にするため、次の変更が行われました。
テーブルの自動サイズ変更をサポートするために、次の変更が行われました。
以前のバージョンでは、ページの最後の列をページの端まで引き伸ばすように指定できました。このバージョンでは、行に対しても指定できます。この操作を容易にするため、次の変更が行われました。
スクリプトオプションをサポートするための ScriptingOptions クラスが追加されました。ScriptingOptions クラスは、C1PrintDocument のスクリプトオプションを定義します。このクラスには、次のパブリックプロパティが含まれます。
C1PrintDocument クラスには次の新しいプロパティも追加されました。
回転されたテキスト(TextAngle が 0 でない)のレンダリングが強化されました。
使用例は、RotatedText サンプルを参照してください。
解決後に行の高さまたは列の幅が 0 になる場合、行または列はまったく表示されなくなります。これは、行または列の Visible プロパティが False に設定されていることと同じです。以前のバージョンとは異なり、行または列のグリッド線も表示されなくなります。
使用例は、ZeroWidthRowsCols サンプルを参照してください。
ドキュメント要素のサイズおよび位置に競合する値を指定できるようになりました。次のコードに典型的な例を示します。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Dim rt As RenderTable = New RenderTable rt.Width = "100mm" rt.Cols(0).Width = "20mm" rt.Cols(0).Width = "20mm" |
C# コードの書き方
C# |
コードのコピー
|
---|---|
RenderTable rt = new RenderTable(); rt.Width = "100mm"; rt.Cols[0].Width = "20mm"; rt.Cols[0].Width = "20mm"; |
このコードでは、テーブルに2つだけ列があり、明示的に指定されたテーブルの幅よりサマリの幅が小さくなっています。この場合、以前のバージョンではドキュメントが生成されず、ThrowExceptionOnError プロパティの値に基づき、例外が生成されるか、Generate/StartDoc メソッドが False を返しました。デフォルトでは、ThrowExceptionOnError に設定されいたため、ほとんどの場合、このようなコードでは例外が生成されるだけで、ユーザーにとってストレスの種でした。また、複雑な状況では、問題を診断して原因を見つけることが困難でした。
2006 v3 バージョンでは、この問題が修正されています。現在は、どのような場合でも、競合するパラメータがコンテキストに基づいて調整され、ドキュメントが生成されます。上のコード例では、テーブルの幅に合わせて各列の幅が同じ割合で拡大されます。また、ThrowExceptionOnError プロパティのデフォルト値は False に変更されました。
2006 v3 リリースより、C1PrintDocument ではドキュメント要素内でスクリプトおよび式を使用できるようになりました。現在のところ、式は VB.NET で記述され、RenderText、ParagraphText(RenderParagraph、RenderTocItem)、および DataBinding レンダリングオブジェクトで使用できます。
レンダリングオブジェクトでスクリプトを使用する方法については、「式、スクリプト、タグ」を参照してください。
以前のバージョンでは、C1PrintDocument の生成プロセスにより、次のような変換が行われていました。
最初、C1PrintDocument(まだ生成されていない)は、RenderObject ベースのオブジェクトのツリーとして、次の構造で表されます。
ドキュメント生成時には、ドキュメントのページ区切りが実行され、この間に各 RenderObject は1つ以上の RenderFragment を生成します。RenderFragment は、特定のページに配置される元の RenderObjcet の一部を記述します。その結果、次の図のような構造になります。
C1PrintDocument にデータ連結を追加すると、C1DataBinding 型の RenderObject クラスに新しい複合プロパティが追加されます。これにより、レンダリングオブジェクトで表示されるデータのデータソースを指定できます。また、データ連結では、データソース内のすべてのレコードに対してレンダリングオブジェクトを繰り返すように指定できます。この場合、レンダリングオブジェクトは、水平区切りレポートジェネレータの「領域」と同じになります。この方法/構造は、Microsoft の RDL 定義と同じです。
このように、データ連結が追加されたことで(2006 v3 バージョン)、ドキュメントの生成には次の2つの段階が含まれます。
ドキュメントには、データベーススキーマ(C1DataSchema クラスによって表され、データベース接続情報、SQL クエリーなどを含む)を含めることができます。ドキュメント内の C1DataBinding オブジェクトは、そのスキーマのプロパティを参照できます。ドキュメント内のすべてのデータ連結オブジェクトがドキュメント自体の C1DataSchema のプロパティだけを参照する場合、そのドキュメントは「データのリフロー可能」になります。つまり、ドキュメントを作成したプログラムとは関係なく、データを完全に更新してドキュメントを再生成することができます。
また、C1DataBinding は既存のデータソース(DataTable など)を参照できます。これは、フォーム上またはそのC1PrintDocumentを作成したプログラムの任意の場所で作成されたものです。この場合は、そのプログラムのコンテキスト内でのみデータを更新してドキュメントを再生成できます。そのドキュメントを保存した後で(.C1D ファイルとして)読み込むと、そのデータとの接続はすべて失われます。
詳細については、「データ連結」を参照してください。
C1Preview はローカライズをサポートするようになりました。これにより、エンドユーザーに表示されるすべての文字列を開発者がローカライズ(翻訳)できます。C1Preview のローカライズは、Localizable プロパティを使用した .NET Windows フォームで採用されている標準のローカライズと同じ方法に基づきます。Windows フォームと同様に、各 C1Preview アセンブリ(C1.C1Preview.2.dll または C1.Win.C1Preview.2.dll)に対して、カルチャごとに個別ファイルを使用してリソースファイル(.resx 拡張子)セットを作成できます。アプリケーションの実行時に、これらのリソース(言語)を切り替えることができます。ローカライズされたリソースは、個々の C1Preview コンポーネントではなく、プレビューアセンブリ全体(C1.C1Preview.2.dll または C1.Win.C1Preview.2.dll)にアタッチされることに注意してください。また、C1Preview .dll のコンポーネントを使用するアプリケーションのすべての部分で、同じローカライズリソースを使用する必要があります。
resx ファイルを作成する際は、次の規則に従うことをお勧めします。
リソースファイルは、新しい設計時エディタを使用して簡単に作成できます。このエディタには、プレビューコンポーネントの[ローカライズ]コンテキストメニュー/アクション項目からアクセスできます。詳細については、「ローカライズ」を参照してください。
実行時に現在のカルチャを切り替える場合は、次のコードを使用すると、ドイツ語のロケールに切り替えることができます。
Visual Basic コードの書き方
Visual Basic |
コードのコピー
|
---|---|
Thread.CurrentThread.CurrentUICulture = New CultureInfo("de") |
C# コードの書き方
C# |
コードのコピー
|
---|---|
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de"); |