Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

adding annotations to pdf using perl

Tags:

pdf

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.

like image 500
Daniel Katzan Avatar asked Jun 11 '26 07:06

Daniel Katzan


1 Answers

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.

like image 156
i alarmed alien Avatar answered Jun 13 '26 04:06

i alarmed alien



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!