DioDocs for PDF
フォーム XObject
機能 > フォーム XObject

フォームXObjectは、PDFドキュメント内のテキスト、グラフィック、ページ、画像などのオブジェクトを記述する方法です。これらのXObjectは、PDF文書に1回格納されるが、複数ページまたは同じページの複数個所で繰り返して参照され、そのたびに同じ結果を生成するオブジェクトです。したがって、フォームXObjectの一般的なユースケースの1つは、既存のPDFドキュメントのコンテンツを別のPDFにインポートすることです。フォームXObjectの詳細については、PDF 仕様 1.7(8.10項)を参照してください。

フォームXObjectを使用して、あるPDFドキュメントのコンテンツを別のPDFドキュメントにインポートするには

  1. GcPdfDocument クラスのインスタンスを2つ初期化し、既存のインポート元のPDFファイル、およびインポートされたコンテンツをレンダリングするための対象PDFファイルをロードします。
  2. ロードしたPDFドキュメントのページを使用して FormXObject クラスのリストを作成します。
  3. FormXObjectのリストをループして対象のPDFドキュメントにページを追加し、GcPdfGraphicsクラスの DrawForm メソッドを使用して、該当する FormXObject を各ページにて描画します。
C#
コードのコピー
static void Main(string[] args)
{
    //一時PDFドキュメントを作成して既存のドキュメントをロードします
    GcPdfDocument tempDoc = new GcPdfDocument();
    FileStream fs = new FileStream(("SlidePages.pdf"), FileMode.Open, FileAccess.Read);
    tempDoc.Load(fs);

    // 新しいPDFドキュメントを作成します
    GcPdfDocument mainDoc = new GcPdfDocument();
    Page p;
    GcPdfGraphics g;

    TextFormat tf = new TextFormat()
    {
        Font = StandardFonts.HelveticaBold,
        FontSize = 16,
        ForeColor = Color.FromArgb(128, Color.Red),
    };

    //ロードしたPDFドキュメントのページを使用してFormXObjectのリストを作成します
    var fxos = new List<FormXObject>();
    tempDoc.Pages.ToList().ForEach(p_ => fxos.Add(new FormXObject(mainDoc, p_)));
    for (int i = 0; i < fxos.Count; ++i)
    {
        p = mainDoc.NewPage();
        g = p.Graphics;

        var rcfx = new RectangleF(10, 50, 500, 600);
        //FormXObjectを使用して対象のPDFドキュメントに描画します
        g.DrawForm(fxos[i], rcfx, null, ImageAlign.ScaleImage);
        g.DrawRectangle(rcfx, Color.Red);
        g.DrawString($"Page {i + 1}", tf, rcfx, TextAlignment.Center, ParagraphAlignment.Center, false);
    }
    mainDoc.Save("FormXResult.pdf");

    Console.WriteLine("終了するには任意のキーを押してください。");
    Console.ReadKey();
}

DioDocs for PDFを使用したフォームXObject機能の実装の詳細 については、DioDocs for PDF サンプルブラウザ を参照してください。