MergePDFs.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' Copyright (c) GrapeCity inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports 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 Image = 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, 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