StampImage.vb
'' 完毕:
Imports System.IO
Imports System.Drawing
Imports System.Numerics
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.Graphics
Imports GrapeCity.Documents.Drawing
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' 此示例演示了如何添加自定义外观流
'' 使用 FormXObject 进行注释。
'' 在示例中,加载现有的 PDF,然后我们循环
'' 文档的页面。在每个页面上,都会创建一个 StampAnnotation 和一个 FormXObject
'' 它被分配给注释的正常默认外观流。
'' 然后在 FormXObject 上绘制半透明 PNG 图像
'' 使用常规 GcGraphics 功能(Transform 和 DrawImage)的图形。
Public Class StampImage
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()

        '' 加载现有的 PDF,我们将在其中添加图章注释
        '' (有关加载文档的详细信息,请参见LoadPDF):
        Dim jsFile = Path.Combine("Resources", "PDFs", "The-Rich-History-of-JavaScript.pdf")
        Using fs = New FileStream(jsFile, FileMode.Open, FileAccess.Read)
            doc.Load(fs)
            Dim rect = New RectangleF(PointF.Empty, doc.Pages(0).Size)

            '' 创建一个 FormXObject 用作​​图章外观:
            Dim fxo = New FormXObject(doc, rect)
            '' 从资源中获取图像,并将其绘制在 FormXObject 的图形上
            '' (有关使用 GcGraphics.Transform 的详细信息,请参阅Transformations):
            Dim img = GCDRAW.Image.FromFile(Path.Combine("Resources", "ImagesBis", "draft-copy-450x72.png"))
            Dim center = New Vector2(fxo.Bounds.Width / 2, fxo.Bounds.Height / 2)
            fxo.Graphics.Transform =
                Matrix3x2.CreateRotation((-55 * Math.PI) / 180.0F, center) *
                Matrix3x2.CreateScale(6, center)
            fxo.Graphics.DrawImage(img, fxo.Bounds, Nothing, ImageAlign.CenterImage)

            '' 循环页面,为每页添加印记:
            For Each page In doc.Pages
                '' 在整个页面上创建 StampAnnotation:
                Dim stamp = New StampAnnotation() With
                    {
                        .Icon = StampAnnotationIcon.Draft.ToString(),
                        .Name = "草稿",
                        .page = page,
                        .rect = rect,
                        .UserName = "杰米·史密斯"
                    }
                '' 在所有页面上重复使用相同的 FormXObject:
                stamp.AppearanceStreams.Normal.Default = fxo
            Next
            ''
            doc.Save(stream)
        End Using
        '' 完毕:
        Return doc.Pages.Count
    End Function
End Class