PDF-Make
view release on metacpan or search on metacpan
lib/PDF/Make/Redaction.pm view on Meta::CPAN
package PDF::Make::Redaction;
use strict;
use warnings;
our $VERSION = '0.06';
use PDF::Make ();
1;
__END__
=head1 NAME
PDF::Make::Redaction - Mark and apply content redactions
=head1 SYNOPSIS
use PDF::Make::Document;
use PDF::Make::Canvas;
use PDF::Make::Page qw(:fonts);
use PDF::Make::Redaction;
my $doc = PDF::Make::Document->new;
$doc->title('Sensitive Report');
$doc->author('Internal');
my $page = $doc->add_page(612, 792);
$page->add_std14_font('F1', HELVETICA);
my $c = PDF::Make::Canvas->new;
$c->BT->Tf('F1', 12)->Td(72, 700)->Tj('SSN: 123-45-6789')->ET;
$page->set_content($c->to_bytes);
# Mark areas for redaction
PDF::Make::Redaction->mark($page,
rect => [100, 695, 280, 712],
overlay_color => [0, 0, 0],
overlay_text => 'REDACTED',
);
# Or use individual coordinates
PDF::Make::Redaction->mark($page,
x0 => 100, y0 => 650, x1 => 280, y1 => 670,
);
# Check count
my $n = PDF::Make::Redaction->count($page); # 2
# Apply redactions (burns overlays into content)
PDF::Make::Redaction->apply_page($page); # single page
PDF::Make::Redaction->apply_doc($doc); # all pages
# Remove metadata (author, title, etc.)
PDF::Make::Redaction->sanitize($doc);
$doc->to_file('redacted.pdf');
=head1 DESCRIPTION
C<PDF::Make::Redaction> provides a two-step redaction workflow following PDF
specification conventions:
=over 4
=item 1. B<Mark> - Define rectangular areas to be redacted, with optional
overlay text and color.
=item 2. B<Apply> - Burn the redaction overlays into the content stream,
permanently removing the underlying content.
=back
A separate C<sanitize> step removes document-level metadata (title, author,
subject, etc.) from the Info dictionary.
=head1 CLASS METHODS
All methods are class methods called on C<PDF::Make::Redaction>.
=head2 mark($page, %args)
PDF::Make::Redaction->mark($page,
rect => [x0, y0, x1, y1], # or use x0/y0/x1/y1
overlay_color => [0, 0, 0], # RGB, default black
overlay_text => 'REDACTED', # optional text overlay
overlay_font_size => 10, # default 10pt
);
Mark a rectangular area on C<$page> for redaction.
=over 4
=item C<rect> - ArrayRef of [x0, y0, x1, y1] in PDF coordinates
=item C<x0, y0, x1, y1> - Alternative: specify corners individually
=item C<overlay_color> - RGB color array for the redaction box (default [0,0,0])
=item C<overlay_text> - Text to display over the redacted area
=item C<overlay_font_size> - Font size for overlay text (default 10)
=back
=head2 count($page)
my $n = PDF::Make::Redaction->count($page);
Returns the number of redaction marks on the given page.
=head2 apply_page($page)
PDF::Make::Redaction->apply_page($page);
Apply all redaction marks on a single page, burning overlays into the
content stream. Croaks on failure.
=head2 apply_doc($doc)
PDF::Make::Redaction->apply_doc($doc);
Apply all redaction marks across every page in the document. Croaks on
failure.
=head2 sanitize($doc)
PDF::Make::Redaction->sanitize($doc);
Remove all metadata from the document's Info dictionary (title, author,
subject, keywords, creator, producer). This is typically called after
applying redactions to ensure no sensitive metadata remains. Croaks on
failure.
=head1 SEE ALSO
L<PDF::Make::Document>, L<PDF::Make::Page>, L<PDF::Make::Builder>
=cut
( run in 0.422 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )