MergePDFs.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports GCDRAW = GrapeCity.Documents.Drawing

'' このサンプルは、複数の既存の PDF を1つのドキュメントに結合する方法を示します。
'' GcPdfDocument.MergeWithDocument() メソッドにてこの機能が提供されており、
'' 別の PDF のすべてまたは一部のページを現在のドキュメントに挿入することができます。
'' この例では、フォーマットの異なる複数の文書を結合して、1つの PDF ファイルを出力します。
Public Class MergePDFs
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Using fs0 = New FileStream(Path.Combine("Resources", "PDFs", "diodocs_catalog.pdf"), FileMode.Open, FileAccess.Read)
            Using fs1 = New FileStream(Path.Combine("Resources", "PDFs", "diodocs_a4_full.pdf"), FileMode.Open, FileAccess.Read)
                Using fs2 = New FileStream(Path.Combine("Resources", "PDFs", "diodocs_pricelist.pdf"), FileMode.Open, FileAccess.Read)
                    doc.Load(fs0)
                    '' 以降で追加されるナビゲーションリンクのページカウントを保存します。
                    Dim pgNo = doc.Pages.Count
                    Dim doc1 = New GcPdfDocument()
                    doc1.Load(fs1)
                    doc.MergeWithDocument(doc1, New MergeDocumentOptions())
                    Dim doc2 = New GcPdfDocument()
                    doc2.Load(fs2)
                    doc.MergeWithDocument(doc2, New MergeDocumentOptions())
                    '' ドキュメントの先頭にノートを挿入します。
                    Dim page = doc.Pages.Insert(0)
                    Dim rc = Util.AddNote(
                        "複数の PDF ファイルを読み込み、それらを結合するサンプルです。" + vbLf +
                        "結合した文書に表紙を追加し、結果を1つのファイルとして保存しています。" + vbLf +
                        "また、このメモをクリックすると、2番目の文書の最初のページにジャンプします。" + vbLf +
                        "GcPdfDocument.MergeWithDocument() メソッドを使用すると、現在の文書に別の文書の" + vbLf +
                        "全ページまたは一部のページを追加可能です。" + vbLf,
                        page)
                    Using image As GCDRAW.Image = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "PDFMerges.png"))
                        Dim g = page.Graphics
                        Dim imageRc = New RectangleF((page.Size.Width - 432) / 2, page.Size.Height / 3, 432, 308)
                        g.DrawImage(image, imageRc, Nothing, GCDRAW.ImageAlign.ScaleImage)

                        '' 2つ目のドキュメントの最初のページにメモを追加します。
                        page.Annotations.Add(New LinkAnnotation(rc, New DestinationFit(pgNo + 1)))
                        '' 終了(ソースが破棄される前にターゲット文書を保存する必要があります)。
                        doc.Save(stream)
                    End Using
                End Using
                Return doc.Pages.Count
            End Using
            Return doc.Pages.Count
        End Using
        Return doc.Pages.Count
    End Function
End Class