Class: Uniword::Builder::WatermarkBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/builder/watermark_builder.rb

Overview

Builds watermark elements for documents.

Watermarks in OOXML are implemented as VML shapes placed in the header. The shape uses a textpath for the watermark text with semi-transparent fill.

Examples:

Add a text watermark

doc.watermark('CONFIDENTIAL')

Custom watermark

doc.watermark('DRAFT', font: 'Arial', size: 80, color: 'FF0000',
              opacity: '0.3', angle: 45)

Remove watermark (set empty header)

doc.watermark(nil)

Class Method Summary collapse

Class Method Details

.build_paragraph(text, font: "Calibri", size: 60, color: nil, opacity: "0.3", angle: -45)) ⇒ Wordprocessingml::Paragraph

Build a watermark paragraph containing the VML shape

Parameters:

  • text (String)

    Watermark text

  • font (String) (defaults to: "Calibri")

    Font name

  • size (Integer) (defaults to: 60)

    Font size in points

  • color (String) (defaults to: nil)

    Fill color hex

  • opacity (String) (defaults to: "0.3")

    Opacity value

  • angle (Integer) (defaults to: -45))

    Rotation angle in degrees

Returns:



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/uniword/builder/watermark_builder.rb', line 64

def self.build_paragraph(text, font: "Calibri", size: 60, color: nil,
                         opacity: "0.3", angle: -45)
  para = Wordprocessingml::Paragraph.new
  run = Wordprocessingml::Run.new
  run.pictures << Wordprocessingml::Picture.new(
    shape: build_shape(text, font: font, size: size,
                             color: color, opacity: opacity, angle: angle),
  )
  para.runs << run
  para
end

.build_shape(text, font: "Calibri", size: 60, color: nil, opacity: "0.3", angle: -45)) ⇒ Vml::Shape

Build a watermark VML shape

Parameters:

  • text (String)

    Watermark text

  • font (String) (defaults to: "Calibri")

    Font name (default ‘Calibri’)

  • size (Integer) (defaults to: 60)

    Font size in points (default 60)

  • color (String) (defaults to: nil)

    Fill color hex (default ‘lightgray’ → ‘D0D0D0’)

  • opacity (String) (defaults to: "0.3")

    Opacity value ‘0.0’ to ‘1.0’ (default ‘0.3’)

  • angle (Integer) (defaults to: -45))

    Rotation angle in degrees (default -45)

Returns:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/uniword/builder/watermark_builder.rb', line 29

def self.build_shape(text, font: "Calibri", size: 60, color: nil,
                     opacity: "0.3", angle: -45)
  fill_color = color || "D0D0D0"

  shape = Vml::Shape.new(
    id: "PowerPlusWaterMarkObject1",
    type: "#_x0000_t136",
    style: watermark_style(angle),
    fillcolor: fill_color,
    strokecolor: "none",
  )

  shape.fill = Vml::Fill.new(
    type: "tile",
    opacity: opacity,
    color: fill_color,
  )

  shape.textpath = Vml::TextPath.new(
    string: text,
    style: "font-family:'#{font}';font-size:#{size}pt",
  )

  shape
end