#!/usr/bin/perl use strict; use Fcntl qw(:seek); my @xeplink_obj ; sub _s ($) { scalar(" " x length($_[0])) } sub _x ($$$) { my $t = $_[0]; my $x = $_[1]; my $e = $_[2]; if( $t =~ /\brenderx\b/i ) { $x =~ s/./ /g; $x =~ s/.$/$e/s } return $x; } sub _xep ($) { my $s = $_[0]; $s =~ s|(\d+)\s+0\s+R|(grep { $1 == $_ } @xeplink_obj) ? _s($&) : $&|egx; return $s; } open(INFILE, "user-book-dcomp.pdf"); open(OUTFILE, ">user-book-dcomp-int.pdf"); READ: { local($/) = ""; while () { while (m/([0-9]*) 0 obj\n.*\n.*\n.*www\.renderx\.com/g) { push(@xeplink_obj,$1); } } } seek( INFILE, 0, SEEK_SET ); REPLACE: { local($/) = ""; while () { s|^q\n (?:^.*\n){2} q\n .*\n /I\d+\ Do\n (?:Q\n){2} (?:.*\n){4} BT\n ((?:^(?!ET\n).*\n)*?) ET\n Q\n q\n (?:.*\n)*? ^(Q)$ |_x($1,$&,$2)|gexm; #warn("REGEX:\n$1\n--\n"); print( OUTFILE ); } } close(INFILE); close(OUTFILE); open(INFILE, "user-book-dcomp-int.pdf"); open(OUTFILE, ">user-book-dcomp-rm.pdf"); while () { s|(^/Annots\s+\[)(.*?)\]|$1 . _xep($2) . ']'|ge; print( OUTFILE ); }