PDF-Make
view release on metacpan or search on metacpan
t/73-watermarks.t view on Meta::CPAN
digits => 6,
suffix => '-2026',
);
ok($bates, 'Bates stamp created');
is($bates->type, 'bates', 'Type is bates');
is($bates->prefix, 'DOC', 'Prefix');
is($bates->start, 1, 'Start number');
is($bates->digits, 6, 'Digits');
is($bates->suffix, '-2026', 'Suffix');
}
# Test 10: Format string expansion
{
my $stamp = PDF::Make::Stamp->text('Page %p of %P - %d');
my $text = $stamp->expand(3, 10);
like($text, qr/Page 3 of 10/, 'Page numbers expanded');
like($text, qr/\d{4}-\d{2}-\d{2}/, 'Date expanded');
}
# Test 11: Bates number expansion
{
my $bates = PDF::Make::Stamp->bates(
prefix => 'ACME',
start => 42,
digits => 8,
suffix => '-X',
);
is($bates->next_bates, 'ACME00000042-X', 'First Bates number');
is($bates->next_bates, 'ACME00000043-X', 'Second Bates number');
is($bates->next_bates, 'ACME00000044-X', 'Third Bates number');
$bates->reset;
is($bates->next_bates, 'ACME00000042-X', 'Reset works');
}
# Test 12: Position parsing
{
my $wm1 = PDF::Make::Watermark->text('TEST', position => 'center');
is($wm1->position, 0, 'center = 0');
my $wm2 = PDF::Make::Watermark->text('TEST', position => 'diagonal');
is($wm2->position, 1, 'diagonal = 1');
my $wm3 = PDF::Make::Watermark->text('TEST', position => 'top_right');
is($wm3->position, 6, 'top_right = 6');
my $wm4 = PDF::Make::Watermark->text('TEST', position => 'bottom_left');
is($wm4->position, 7, 'bottom_left = 7');
}
# Test 13: Invalid position
{
eval { PDF::Make::Watermark->text('TEST', position => 'invalid') };
like($@, qr/Unknown position/, 'Invalid position rejected');
}
# Test 14: Overlay option
{
my $wm1 = PDF::Make::Watermark->text('TEST');
is($wm1->overlay, 0, 'Default is underlay');
my $wm2 = PDF::Make::Watermark->text('TEST', overlay => 1);
is($wm2->overlay, 1, 'Can set overlay');
}
# Test 15: Tile spacing
{
my $wm = PDF::Make::Watermark->text('TEST',
position => 'tile',
tile_spacing_x => 200,
tile_spacing_y => 250,
);
is($wm->tile_spacing_x, 200, 'Custom tile spacing X');
is($wm->tile_spacing_y, 250, 'Custom tile spacing Y');
}
# Test 16: Stamp with custom options
{
my $stamp = PDF::Make::Stamp->text('Footer text',
position => 'bottom_right',
margin_x => 72,
margin_y => 18,
font => 'Courier',
size => 8,
color => [0.5, 0.5, 0.5],
);
is($stamp->position, 9, 'bottom_right position');
is($stamp->margin_x, 72, 'Custom margin_x');
is($stamp->margin_y, 18, 'Custom margin_y');
is($stamp->font, 'Courier', 'Custom font');
is($stamp->size, 8, 'Custom size');
is_deeply($stamp->color, [0.5, 0.5, 0.5], 'Custom color');
}
# Test 17: Format specifiers
{
my $stamp = PDF::Make::Stamp->text('%%p=%p %%P=%P %%d=%d %%t=%t');
my $text = $stamp->expand(5, 20);
like($text, qr/%p=5/, 'Escaped %p and page number');
like($text, qr/%P=20/, 'Escaped %P and total pages');
like($text, qr/%d=\d{4}/, 'Escaped %d and date');
like($text, qr/%t=\d{2}:\d{2}/, 'Escaped %t and time');
}
# Test 18: Document methods exist
can_ok('PDF::Make::Document', qw(add_watermark apply_stamp));
# Test 19: Watermark requires text
{
eval { PDF::Make::Watermark->text('') };
like($@, qr/Text required/, 'Empty text rejected');
eval { PDF::Make::Watermark->text(undef) };
like($@, qr/Text required/, 'Undef text rejected');
}
# Test 20: Add watermark to document (integration test)
{
my $doc = PDF::Make::Document->new;
$doc->add_page;
$doc->add_page;
my $wm = PDF::Make::Watermark->text('DRAFT');
( run in 0.638 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )