GetImages.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports System.Text
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
'' このサンプルは PDF を読み込み(Wetlands サンプルで生成された
'' ドキュメントを使用します)、そこからすべてのイメージを抽出します。
'' 次に、これらの画像を新しい PDF へ1ページにひとつずつ出力します。
Public Class GetImages
Function CreatePDF(ByVal stream As Stream) As Integer
Dim tf = New TextFormat() With {.Font = StandardFonts.Times, .FontSize = 12}
Using fs = New FileStream(Path.Combine("Resources", "PDFs", "Wetlands.pdf"), FileMode.Open, FileAccess.Read)
Dim docSrc = New GcPdfDocument()
'' 既存の PDF にいくつかの画像を読み込みます。
docSrc.Load(fs)
'' この呼び出しは、読み込まれた PDF からイメージに関する情報を抽出します。
'' 大きなファイルの場合、完了するまでに時間がかかることに注意してください。
Dim imageInfos = docSrc.GetImages()
Dim doc = New GcPdfDocument()
Dim textPt = New PointF(72, 72)
Dim imageRc = New RectangleF(72, 72 * 2, doc.PageSize.Width - 72 * 2, doc.PageSize.Height - 72 * 3)
For Each imageInfo In imageInfos
'' 同じイメージが複数の場所に表示され、imageInfo にはページの
'' インデックスとページ上の位置が含まれます。
'' わかりやすくするために、ここではページ番号のみを表示しています
Dim sb = New StringBuilder()
imageInfo.Locations.ForEach(Function(il_) sb.Append((il_.Page.Index + 1).ToString() + ", "))
Dim g = doc.NewPage().Graphics
g.DrawString($"この画像は、元 PDF ファイルの {sb.ToString().TrimEnd(" "c, ","c)} ページに表示されています。", tf, New PointF(72, 72))
g.DrawImage(imageInfo.Image, imageRc, Nothing, ImageAlign.ScaleImage)
Next
'' PDF ドキュメントを保存します。
doc.Save(stream)
Return doc.Pages.Count
End Using
End Function
End Class