FindTransformed.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' Copyright (c) GrapeCity inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports System.Text
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Common
Imports GrapeCity.Documents.Drawing

'' このサンプルは、Transforms サンプルで作成された PDF ファイルを読み込み、読み込まれた
'' ドキュメントの文字列がすべて見つかった場合にそれらをハイライト表示します。
'' このサンプルにおける2つのポイント:
''   - 元の文書のテキストは図形的に変換されますが、FindText メソッドによって
''     提供される四辺形では、その場合でも簡単に検索結果を強調表示できます。
''   - サンプルでは、ページのインデックス0に新しいコンテンツストリームを挿入します。
''     これにより、ハイライトが元のコンテンツの下で確実に描画されます。
''     (既存のファイルにウォーターマークなどを追加する場合も同じ手法を使用できます)
Public Class FindTransformed
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        '' 読み込んだ PDF を操作している間は、元のファイルストリームを開いたままにしておく必要があります。詳しくは、LoadPDF を参照してください。
        Using fs = New FileStream(Path.Combine("Resources", "PDFs", "Transforms.pdf"), FileMode.Open, FileAccess.Read)
            doc.Load(fs)
            '' すべての「座標」を検索します。
            Dim finds = doc.FindText(
                New FindTextParams("座標", False, True),
                OutputRange.All)

            '' すべての検索結果をハイライト表示します: まず、テキストが見つかったすべてのページを見つけます。
            Dim pgIndices = finds.Select(Function(f_) f_.PageIndex).Distinct()
            '' ページをループし、各ページでインデックス0に新しいコンテンツストリームを
            '' 挿入すると、ハイライトは元のコンテンツの直下に移動します。
            For Each pgIdx In pgIndices
                Dim page = doc.Pages(pgIdx)
                Dim pcs = page.ContentStreams.Insert(0)
                Dim g = pcs.GetGraphics(page)
                For Each find In finds.Where(Function(f_) f_.PageIndex = pgIdx)
                    '' Note the solid color used to fill the polygon:
                    g.FillPolygon(find.Bounds, Color.CadetBlue)
                    g.DrawPolygon(find.Bounds, Color.Blue)
                Next
            Next
            ''
            '' PDF ドキュメントを保存します。
            doc.Save(stream)
        End Using
        Return doc.Pages.Count
    End Function
End Class