use strict;
use warnings;
use Cwd;
my $filename;
my $filepath;
if($ARGV[0]=~m/((.*)[\\\/])?(.*?)\.ps$/i)
{
$filename=$3;
if(defined($1))
{
$filepath=$1;
}
else
{
$filepath=cwd();
$filepath=~s!/!\\!gi;
$filepath.="\\";
}
}
else
{
Win32::MsgBox("Incorrect argument, Please check", 0, "");
exit;
}
open(F1, "$ARGV[0]") or Win32::MsgBox("Input File cannot be opened", 1
+6, "Error Message");
undef $/;
my $line = <F1>;
close F1;
my @imgrem;
my $imgno = 0;
while($line =~ s/\n\%\%BeginObject\: image(.*?)\n\%\%EndObject/<img$im
+gno>/msi)
{
my $tmp = $&;
push(@imgrem, $tmp);
$imgno++;
}
$line =~ s/\(\\266\)D r\n/\(\)D r\n/msgi;
while($line =~ m/\[\/Action \<\< \/Subtype \/URI \/URI \((.+?)\) \>\>
+\/Rect \[(\d+) (\d+) (\d+) (\d+)\] \/Border \[0 0 0\] \/LNK pdfmark\n
+/gi)
{
my $temp = "$&";
my $contents = $1;
my $originalcontents = $contents;
my $x1 = $2;
my $y1 = $3;
my $x2 = $4;
my $y2 = $5;
$y1 = $y1 - 100;
if($contents !~ /^(http|www|mailto)/i)
{
$contents =~ s/–/\-/gi;
$contents =~ s/=/\=/gi;
$contents =~ s/%/\\%/gi;
$contents =~ s/*/\*/gi;
$contents =~ s/&(l|r)squo;/\'/gi;
$line =~ s/\[\/Action \<\< \/Subtype \/URI \/URI \((.+
+?)\) \>\> \/Rect \[(\d+) (\d+) (\d+) (\d+)\] \/Border \[0 0 0\] \/LNK
+ pdfmark\n/\[\/Action \<\< \/Subtype \/Caret \/Contents \($contents\)
+ \/Rect \[$x1 $y1 $x2 $y2\] \/Title \(Original Text\) \/Subj \(Insert
+ed Text\) \/Border \[0 0 0\] \/Color \[0 0 1\] \/ANN pdfmark\n/i;
}
}
#while($line =~ s/<img([0-9]+)>/$imgrem[$1]/si){};
open(F2, ">$filepath$filename-out.ps");
print F2 $line;
close F2;
print "\n\nEnd time ", time() - $^T;
The above coding run successfully in the files upto some sizes. for eg. it runs on 100mb file
Thanks
srikrishnan R. |