PDF for .NET
メタファイル画像の描画

PDF for .NET では、非常に簡単にドキュメントを作成できます。その主な理由は、オブジェクトモデルがよく知られた .NET の Graphics モデルを模倣しているためです。ただし、Graphics クラスで使用できるすべてのメソッドが PDF for .NETでも使用できるわけではありません。さらに、Graphics オブジェクトを描画する既存のコードがあり、メソッドが非常に似ている場合でも書き直したくないときがあります。

こうした場合には、Metafile オブジェクトから派生した Graphics オブジェクトに描画して、作成した MetafileDrawImageメソッドを使用して PDF for .NETに描画することにより、既存の .NET コードを再利用できます。この方法では、画像または PDF ドキュメントとして作成する任意のグラフィックスを提供できます。

たとえばアプリケーションが、各ページを Graphics オブジェクトに描画する PrintDocument パターンを使用し、ドキュメントを生成する場合を想定します。その場合、同じメソッドを使用し、1ページに1つずつメタファイルのコレクションを作成し、以下のコードを使用してその一覧を PDF ドキュメントに変換できます。

Visual Basic コードの書き方

Visual Basic
コードのコピー
 ' ドキュメントをメタファイルの一覧として、1ページに1つずつ取得します。
Dim pages As ArrayList = GetMetafiles()
 ' 各ページをループし、PDF ドキュメントを作成します。
_c1PdfDocument1.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
' ファイルに保存します。 _c1pdf.Save("c:\temp\mydoc.pdf")

C# コードの書き方

C#
コードのコピー
// ドキュメントをメタファイルの一覧として、1ページに1つずつ取得します。
ArrayList pages = GetMetafiles();
 // 各ページをループし、PDF ドキュメントを作成します。_c1pdf.Clear();
_c1pdf.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) _c1pdf.NewPage();
_c1pdf.PageSize = sz;
// ページを PDF ドキュメントに描画します。 _c1PdfDocument1.DrawImage(page, c1PdfDocument1.PageRectangle); } // ファイルに保存します。 _c1pdf.Save(@"c:\temp\mydoc.pdf");

コードでは、一覧の各メタファイルを取得し、そのサイズをポイントで計算し(各ページは異なるサイズを持つことができます)、メタファイルをページに描画しています。メタファイルは、レポートエンジン、描画またはグラフ作成プログラム、またはメタファイル画像を作成できるアプリケーションによって生成できます。

なお、PDF for .NETでは、EMF+ メタファイルに対応しています。 According to Microsoft、EMF+ は EMF の拡張であり、GDI+ レコードを格納することができます。以前、すべてのメタファイルが EFM に変換されていましたが、EMF+ ファイルは変換されないので、変換によってコンテキストが失われることはありません。