Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Watermarks

Add text or image watermarks to PDF documents.

Text Watermarks

#![allow(unused)]
fn main() {
use printwell::watermark::{Watermark, WatermarkPosition, add_watermark};

let watermark = Watermark::text("CONFIDENTIAL")
    .position(WatermarkPosition::Center)
    .rotation(45.0)
    .opacity(0.3)
    .font_size(72.0)
    .color(128, 128, 128);

let result = add_watermark(&pdf_data, &watermark)?;
}

Image Watermarks

#![allow(unused)]
fn main() {
let logo = std::fs::read("logo.png")?;

let watermark = Watermark::image(&logo)
    .position(WatermarkPosition::BottomRight)
    .opacity(0.5)
    .scale(0.5);

let result = add_watermark(&pdf_data, &watermark)?;
}

Position Options

PositionDescription
CenterCenter of page
TopLeftTop-left corner
TopCenterTop center
TopRightTop-right corner
MiddleLeftMiddle left
MiddleRightMiddle right
BottomLeftBottom-left corner
BottomCenterBottom center
BottomRightBottom-right corner

Or use custom coordinates:

#![allow(unused)]
fn main() {
let watermark = Watermark::text("DRAFT")
    .custom_position(100.0, 200.0);
}

Layer Options

  • Background - Behind page content (default)
  • Foreground - On top of page content
#![allow(unused)]
fn main() {
let watermark = Watermark::text("SAMPLE")
    .layer(WatermarkLayer::Foreground);
}

Page Selection

Apply watermarks to specific pages:

#![allow(unused)]
fn main() {
// All pages (default)
let watermark = Watermark::text("DRAFT")
    .pages(WatermarkPageSelection::All);

// Odd pages only
let watermark = Watermark::text("DRAFT")
    .pages(WatermarkPageSelection::Odd);

// Even pages only
let watermark = Watermark::text("DRAFT")
    .pages(WatermarkPageSelection::Even);

// First page only
let watermark = Watermark::text("DRAFT")
    .pages(WatermarkPageSelection::First);

// Specific pages
let watermark = Watermark::text("DRAFT")
    .page_list(&[1, 3, 5, 7]);

// Page range
let watermark = Watermark::text("DRAFT")
    .page_range(2, 10);
}

Multiple Watermarks

Add multiple watermarks at once:

#![allow(unused)]
fn main() {
use printwell::watermark::add_watermarks;

let watermarks = vec![
    Watermark::text("DRAFT")
        .position(WatermarkPosition::Center)
        .opacity(0.2),
    Watermark::text("Company Name")
        .position(WatermarkPosition::TopCenter)
        .font_size(12.0)
        .opacity(0.5),
];

let result = add_watermarks(&pdf_data, &watermarks)?;
}

Styling Options

OptionDescriptionDefault
rotationRotation in degrees0.0
opacityOpacity (0.0-1.0)0.5
font_sizeFont size in points72.0
font_nameFont family“Helvetica”
colorRGB colorGray
scaleImage scale factor1.0