InkAnnotPaths.vb
  1. ''
  2. '' This code is part of Document Solutions for PDF demos.
  3. '' Copyright (c) MESCIUS inc. All rights reserved.
  4. ''
  5. Imports System.IO
  6. Imports System.Drawing
  7. Imports GrapeCity.Documents.Pdf
  8. Imports GrapeCity.Documents.Pdf.Annotations
  9. Imports GrapeCity.Documents.Text
  10. Imports GrapeCity.Documents.Drawing
  11.  
  12. '' Shows how to add an ink annotation to a PDF document,
  13. '' and how to render its content using the InkAnnotation.Paths property.
  14. Public Class InkAnnotPaths
  15. Function CreatePDF(ByVal stream As Stream) As Integer
  16. Dim doc = New GcPdfDocument()
  17. Dim page = doc.NewPage()
  18. '' User name for the annotation's author:
  19. Dim user1 = "Jaime Smith"
  20.  
  21. Dim rc = Util.AddNote(
  22. "This sample creates an ink annotation and shows how to use the InkAnnotation.Paths property " +
  23. "to render the annotation's content. The content is specified by discrete points that should be " +
  24. "connected when a PDF viewer renders them. The points can be connected either by straight or " +
  25. "curved lines depending on the viewer implementation.",
  26. page)
  27.  
  28. Dim inkAnnot = New InkAnnotation() With
  29. {
  30. .UserName = user1,
  31. .Rect = New RectangleF(rc.Left, rc.Bottom + 20, 72 * 5, 72 * 2),
  32. .LineWidth = 2,
  33. .Color = Color.DarkBlue,
  34. .Contents = "This is an ink annotation drawn via InkAnnotation.Paths."
  35. }
  36. Dim x0 = 80, x = 80, y = rc.Bottom + 24, h = 18, dx = 2, dy = 4, dx2 = 4, w = 10, xoff = 15
  37.  
  38. '' Scribble 'ink annotation' text:
  39.  
  40. '' i
  41. Dim paths As List(Of PointF()) = New List(Of PointF())
  42. paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
  43. paths.Add({New PointF(x + w / 2 - dx, y - h / 3 + dy), New PointF(x + w / 2 + dx, y - h / 3)})
  44. '' n
  45. x += xoff
  46. paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
  47. New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
  48. '' k
  49. x += xoff
  50. paths.Add({New PointF(x, y - h / 3), New PointF(x, y + h)})
  51. paths.Add({New PointF(x + w, y), New PointF(x + dx, y + h / 2 - dy), New PointF(x, y + h / 2),
  52. New PointF(x + dx2, y + h / 2 + dy), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
  53.  
  54. '' a
  55. x += xoff * 2
  56. paths.Add({New PointF(x + w, y + dy), New PointF(x + w / 2, y), New PointF(x, y + h / 2), New PointF(x + w / 2, y + h),
  57. New PointF(x + w, y + dy), New PointF(x + w, y), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
  58. '' n
  59. x += xoff
  60. paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
  61. New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
  62. '' n
  63. x += xoff
  64. paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
  65. New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
  66. '' o
  67. x += xoff
  68. paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2 - dx, y), New PointF(x, y + h / 2), New PointF(x + w / 2, y + h),
  69. New PointF(x + w, y + h / 2), New PointF(x + w / 2 + dx, y), New PointF(x + w / 2, y)})
  70. '' t
  71. x += xoff
  72. paths.Add({New PointF(x + w / 2, y - h / 3), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
  73. paths.Add({New PointF(x, y), New PointF(x + w, y)})
  74. '' a
  75. x += xoff
  76. paths.Add({New PointF(x + w, y + dy), New PointF(x + w / 2, y), New PointF(x, y + h / 2), New PointF(x + w / 2, y + h),
  77. New PointF(x + w, y + dy), New PointF(x + w, y), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
  78. '' t
  79. x += xoff
  80. paths.Add({New PointF(x + w / 2, y - h / 3), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
  81. paths.Add({New PointF(x, y), New PointF(x + w, y)})
  82. '' i
  83. x += xoff
  84. paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
  85. paths.Add({New PointF(x + w / 2 - dx, y - h / 3 + dy), New PointF(x + w / 2 + dx, y - h / 3)})
  86. '' o
  87. x += xoff
  88. paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2 - dx, y), New PointF(x, y + h / 2),
  89. New PointF(x + w / 2, y + h), New PointF(x + w, y + h / 2), New PointF(x + w / 2 + dx, y), New PointF(x + w / 2, y)})
  90. '' n
  91. x += xoff
  92. paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
  93. New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F),
  94. New PointF(x + w * 3, y + h * 0.4F), New PointF(x + w + dx2, y + h + dy * 2), New PointF(x0, y + h + dy)})
  95. inkAnnot.Paths = paths
  96.  
  97. page.Annotations.Add(inkAnnot)
  98.  
  99. '' Done:
  100. doc.Save(stream)
  101. Return doc.Pages.Count
  102. End Function
  103. End Class
  104.