Daniel Katzan
Daniel Katzan

Reputation: 564

adding annotations to pdf using perl

I'm using the perl module PDF::API2::Annotation to add annotations to my pdf files.

There is support to decide where the annot will be created using a rect. Something like this:

$annot->text( $text, -rect => [ 10, 10, 10, 10 ] );

which works fine, but I'm having problem to be accurate on where to put my annotations.

I know the lower left corner of the pdf is (0,0). Let's say i want to put an annotation exactly in the middle of the page, any idea how can i achieve that?

according to this https://www.leadtools.com/help/leadtools/v18/dh/to/leadtools.topics.pdf~pdf.topics.pdfcoordinatesystem.html a pdf is divided to points, and each point is 1/72 inch. and a pdf size is so the middle should be (306,396)

But thats not even close to the middle.

Upvotes: 3

Views: 632

Answers (1)

i alarmed alien
i alarmed alien

Reputation: 9520

You can get the size of the page media box and then calculate the middle from that:

# get the mediabox
my ($llx, $lly, $urx, $ury) = $page->get_mediabox;
# print out the page coordinates
say "page mediabox: " . join ", ", $llx, $lly, $urx, $ury;
# output: 0, 0, 612, 792 for the strangely-shaped page I created

# calculate the midpoints
my $midx = $urx/2;
my $midy = $ury/2;

my $annot = $page->annotation;
# create an annotation 20 pts wide and high around the midpoint of the mediabox 
$annot->text($text, -rect=>[$midx-10,$midy-10,$midx+10,$midy+10]);

As well as the media box, you can also get the page crop box, trim box, bleed box, and art box:

for my $box ('mediabox', 'cropbox', 'trimbox', 'artbox', 'bleedbox') {
    my $get = "get_$box";
    say "$box dimensions: " . join ", ", $page->$get;
}

These are usually all the same unless the document has been set up for professional printing with a bleed area, etc.

Upvotes: 1

Related Questions