MergePDFs.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Annotations;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos
{
// このサンプルは、複数の既存の PDF を1つのドキュメントに結合する方法を示します。
// GcPdfDocument.MergeWithDocument() メソッドにてこの機能が提供されており、
// 別の PDF のすべてまたは一部のページを現在のドキュメントに挿入することができます。
// この例では、フォーマットの異なる複数の文書を結合して、1つの PDF ファイルを出力します。
public class MergePDFs
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
using (var fs0 = new FileStream(Path.Combine("Resources", "PDFs", "diodocs_catalog.pdf"), FileMode.Open, FileAccess.Read))
using (var fs1 = new FileStream(Path.Combine("Resources", "PDFs", "diodocs_a4_full.pdf"), FileMode.Open, FileAccess.Read))
using (var fs2 = new FileStream(Path.Combine("Resources", "PDFs", "diodocs_pricelist.pdf"), FileMode.Open, FileAccess.Read))
using (var image = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "PDFMerges.png")))
{
doc.Load(fs0);
// 以降で追加されるナビゲーションリンクのページカウントを保存します。
var pgNo = doc.Pages.Count;
var doc1 = new GcPdfDocument();
doc1.Load(fs1);
doc.MergeWithDocument(doc1, new MergeDocumentOptions());
var doc2 = new GcPdfDocument();
doc2.Load(fs2);
doc.MergeWithDocument(doc2, new MergeDocumentOptions());
// ドキュメントの先頭にノートを挿入します。
var page = doc.Pages.Insert(0);
var rc = Common.Util.AddNote(
"複数の PDF ファイルを読み込み、それらを結合するサンプルです。\n" +
"結合した文書に表紙を追加し、結果を1つのファイルとして保存しています。\n" +
"また、このメモをクリックすると、2番目の文書の最初のページにジャンプします。\n" +
"GcPdfDocument.MergeWithDocument() メソッドを使用すると、現在の文書に別の文書の\n" +
"全ページまたは一部のページを追加可能です。\n",
page);
var g = page.Graphics;
var imageRc = new RectangleF((page.Size.Width - 432) / 2, page.Size.Height / 3, 432, 308);
g.DrawImage(image, imageRc, null, GCDRAW.ImageAlign.ScaleImage);
// 2つ目のドキュメントの最初のページにメモを追加します。
page.Annotations.Add(new LinkAnnotation(rc, new DestinationFit(pgNo + 1)));
// 終了(ソースが破棄される前にターゲット文書を保存する必要があります)。
doc.Save(stream);
}
return doc.Pages.Count;
}
}
}