PDF for UWP のオブジェクトモデルは、よく知られた .NET Graphics モデルに倣っているため、簡単にドキュメントを作成できます。ただし、Graphics クラスのすべてのメソッドを PDF for UWP で使用できるわけではありません。また、Graphics オブジェクトに描画する既存のコードがあり、大部分のメソッドが同じであっても、書き直しは避けたい場合があります。
このような場合は、描画コマンドを Metafile に送り、C1PdfDocument.DrawImage コマンドを使用して Metafile を PDF for UWP にレンダリングすることで、既存の .NET コードを再利用できます。この方法を使用して、画像または PDF ドキュメントとして作成したすべてのグラフィックを公開できます。
たとえば、各ページを Graphics オブジェクトに描画する PrintDocument パターンを使用してドキュメントを生成するアプリケーションがあるとします。この場合、同じメソッドを使用してメタファイルのコレクションをページごとに1つ作成し、次のコードを使用して、そのリストを PDF ドキュメントに変換します。
Visual Basic |
コードのコピー
|
---|---|
' ドキュメントをメタファイルのリストとしてページごとに1つ取得します。 Dim pages As ArrayList = GetMetafiles() ' ページをループ処理して PDF ドキュメントを作成します。 _c1pdf.Clear() Dim i As Integer for i = 0 i <= pages.Count ' i 番目のページを取得します。 Dim page As Metafile = CType(Metafile.FromFile(pages[i]), Metafile) If Not (page Is Nothing) Then ' ページサイズを計算します。 Dim sz As SizeF = page.PhysicalDimension sz.Width = Math.Round(sz.Width * 72.0F / 2540.0F, 2) sz.Height = Math.Round(sz.Height * 72.0F / 2540.0F, 2) ' ページを追加し、サイズを設定します。 If i > 0 Then _c1pdf.NewPage() End If _c1pdf.PageSize = sz ' ページを PDF ドキュメントに描画します。 _c1pdf.DrawImage(page, _c1pdf.PageRectangle()) End If Next |
C# |
コードのコピー
|
---|---|
// ドキュメントをメタファイルのリストとしてページごとに1つ取得します。 ArrayList pages = GetMetafiles(); // ページをループ処理して PDF ドキュメントを作成します。 pdf.Clear(); for (int i = 0; i < pages.Count; i++) { // i 番目のページを取得します。 Metafile page = (Metafile)Metafile.FromFile(pages[i]); if (page == null) { continue; } // ページサイズを計算します。 SizeF sz = page.PhysicalDimension; sz.Width = (float)Math.Round(sz.Width * 72f / 2540f, 2); sz.Height = (float)Math.Round(sz.Height * 72f / 2540f, 2); // ページを追加し、サイズを設定します。 if (i > 0) pdf.NewPage(); pdf.PageSize = sz; // ページを PDF ドキュメントに描画します。 pdf.DrawImage(page, pdf.PageRectangle()); } |
クイックスタートの「手順3/4:ドキュメントの保存」トピックで説明したように、Save メソッドを使用してドキュメントを保存します。
コードはリストから各メタファイルを取得し、そのサイズをポイントで計算(各ページは異なるサイズを持つことができます)してからページに描画します。メタファイルは、レポートエンジン、描画またはチャート作成プログラムなど、メタファイルイメージを作成できる任意のアプリケーションで生成できます。