AddWatermark.vb
  1. ''
  2. '' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
  3. '' © MESCIUS inc. All rights reserved.
  4. ''
  5. Imports System
  6. Imports System.IO
  7. Imports System.Drawing
  8. Imports System.Numerics
  9. Imports GrapeCity.Documents.Pdf
  10. Imports GrapeCity.Documents.Text
  11. Imports GCTEXT = GrapeCity.Documents.Text
  12. Imports GCDRAW = GrapeCity.Documents.Drawing
  13.  
  14. '' このサンプルは、既存のPDFの全ページにシンプルなテキストの透かしのような
  15. '' オーバーレイを追加する方法を示しています。
  16. Public Class AddWatermark
  17. Function CreatePDF(ByVal stream As Stream) As Integer
  18. Dim doc = New GcPdfDocument()
  19. Using fs = File.OpenRead(Path.Combine("Resources", "PDFs", "SlidePages.pdf"))
  20. doc.Load(fs)
  21. For Each page In doc.Pages
  22. Dim g = page.Graphics
  23.  
  24. '' 透かしの描画に使用されるテキストレイアウト。
  25. Dim tl = g.CreateTextLayout()
  26. tl.Append("DioDocs Demo")
  27. tl.DefaultFormat.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "calibrib.ttf"))
  28. tl.DefaultFormat.FontSize = g.Resolution
  29. '' 半透明の色。
  30. tl.DefaultFormat.ForeColor = Color.FromArgb(128, Color.Yellow)
  31. tl.DefaultFormat.GlyphAdvanceFactor = 1.5F
  32. tl.PerformLayout()
  33.  
  34. '' 回転角度(ラジアン) - ページの左下から右上の角まで。
  35. Dim angle = -Math.Asin(g.CanvasSize.Width / g.CanvasSize.Height)
  36. '' ページの中央。
  37. Dim center = New PointF(g.CanvasSize.Width / 2, g.CanvasSize.Height / 2)
  38. '' テキストサイズを基にオフセットを追加。
  39. Dim delta = New PointF(
  40. ((tl.ContentWidth * Math.Cos(angle) - tl.ContentHeight * Math.Sin(angle)) / 2),
  41. ((tl.ContentWidth * Math.Sin(angle) + tl.ContentHeight * Math.Cos(angle)) / 2))
  42.  
  43. '' 透かしテキストをページの中央に斜めに描画します。
  44. '' (Matrixの変換は最後から最初へ適用されます)
  45. g.Transform =
  46. Matrix3x2.CreateRotation(angle) *
  47. Matrix3x2.CreateTranslation(center.X - delta.X, center.Y - delta.Y)
  48. g.DrawTextLayout(tl, PointF.Empty)
  49. g.Transform = Matrix3x2.Identity
  50. Next
  51. doc.Save(stream)
  52. End Using
  53. Return doc.Pages.Count
  54. End Function
  55. End Class
  56.