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