package PDF::Reuse::Util;
use PDF::Reuse;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(hyperLink blackText);
use strict;
our %font_widths = (
'Courier' => 600,
'Courier-Bold' => 600,
'Courier-BoldOblique' => 600,
'Courier-Oblique' => 600,
'Times-Roman' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
250, 333, 408, 500, 500, 833, 778, 180,
333, 333, 500, 564, 250, 333, 250, 278,
500, 500, 500, 500, 500, 500, 500, 500,
500, 500, 278, 278, 564, 564, 564, 444,
921, 722, 667, 667, 722, 611, 556, 722,
722, 333, 389, 722, 611, 889, 722, 722,
556, 722, 667, 556, 611, 722, 722, 944,
722, 722, 611, 333, 278, 333, 469, 500,
333, 444, 500, 444, 500, 444, 333, 500,
500, 278, 278, 500, 278, 778, 500, 500,
500, 500, 333, 389, 278, 500, 500, 722,
500, 500, 444, 480, 200, 480, 541, 350,
500, 350, 333, 500, 443, 1000, 500, 500,
333, 1000, 555, 333, 889, 350, 611, 350,
350, 333, 333, 443, 443, 350, 500, 1000,
333, 980, 388, 333, 722, 350, 444, 721,
250, 333, 500, 500, 500, 500, 200, 500,
333, 760, 276, 500, 564, 333, 760, 333,
400, 564, 300, 300, 333, 510, 453, 250,
333, 300, 310, 500, 750, 750, 750, 444,
722, 722, 722, 722, 722, 722, 889, 667,
611, 611, 611, 611, 333, 333, 333, 333,
722, 722, 722, 722, 722, 722, 722, 564,
722, 722, 722, 722, 722, 722, 556, 500,
444, 444, 444, 444, 444, 444, 667, 444,
444, 444, 444, 444, 278, 278, 278, 278,
500, 500, 500, 500, 500, 500, 500, 564,
500, 500, 500, 500, 500, 500, 500, 500],
'Times-Bold' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
250, 333, 555, 500, 500, 1000, 833, 278,
333, 333, 500, 570, 250, 333, 250, 278,
500, 500, 500, 500, 500, 500, 500, 500,
500, 500, 333, 333, 570, 570, 570, 500,
930, 722, 667, 722, 722, 667, 611, 778,
778, 389, 500, 778, 667, 944, 722, 778,
611, 778, 722, 556, 667, 722, 722, 1000,
722, 722, 667, 333, 278, 333, 581, 500,
333, 500, 556, 444, 556, 444, 333, 500,
556, 278, 333, 556, 278, 833, 556, 500,
556, 556, 444, 389, 333, 556, 500, 722,
500, 500, 444, 394, 220, 394, 520, 350,
500, 350, 333, 500, 500, 1000, 500, 500,
333, 1000, 556, 333, 1000, 350, 667, 350,
350, 333, 333, 500, 500, 350, 500, 1000,
333, 1000, 389, 333, 723, 350, 444, 722,
250, 333, 500, 500, 500, 500, 220, 500,
333, 747, 300, 500, 570, 333, 747, 333,
400, 570, 300, 300, 333, 601, 540, 250,
333, 300, 330, 500, 750, 750, 750, 500,
722, 722, 722, 722, 722, 722, 1000, 722,
667, 667, 667, 667, 389, 389, 389, 389,
722, 722, 778, 778, 778, 778, 778, 570,
778, 722, 722, 722, 722, 722, 611, 556,
500, 500, 500, 500, 500, 500, 722, 444,
444, 444, 444, 444, 278, 278, 278, 278,
500, 556, 500, 500, 500, 500, 500, 570,
500, 556, 556, 556, 556, 500, 556, 500],
'Times-Italic' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
250, 333, 420, 500, 500, 833, 778, 214, #39
333, 333, 500, 675, 250, 333, 250, 278, #47
500, 500, 500, 500, 500, 500, 500, 500, #55
500, 500, 333, 333, 675, 675, 675, 500, #63
920, 611, 611, 667, 722, 611, 611, 722, #71
722, 333, 444, 667, 556, 833, 667, 722, #79
611, 722, 611, 500, 556, 722, 611, 833, #87
611, 556, 556, 389, 278, 389, 422, 500, #95
333, 500, 500, 444, 500, 444, 278, 500, #103
500, 278, 278, 444, 278, 722, 500, 500, #111
500, 500, 389, 389, 278, 500, 444, 667, #119
444, 444, 389, 400, 275, 400, 541, 350, # 127
500, 350, 333, 500, 556, 889, 500, 500, # 135
333, 1000, 500, 333, 944, 350, 556, 350, # 143
350, 333, 333, 556, 556, 350, 500, 890, # 151
333, 980, 389, 333, 668, 350, 390, 557, # 159
250, 389, 500, 500, 500, 500, 275, 500, # 167
333, 760, 276, 500, 675, 333, 760, 333, # 175
400, 675, 300, 300, 333, 514, 523, 250, # 183
333, 300, 310, 500, 750, 750, 750, 500, # 191
611, 611, 611, 611, 611, 611, 889, 667,
611, 611, 611, 611, 333, 333, 333, 333,
722, 667, 722, 722, 722, 722, 722, 675,
722, 722, 722, 722, 722, 556, 611, 500,
500, 500, 500, 500, 500, 500, 667, 444,
444, 444, 444, 444, 278, 278, 278, 278,
500, 500, 500, 500, 500, 500, 500, 675,
500, 500, 500, 500, 500, 444, 500, 444],
'Times-BoldItalic' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
250, 389, 555, 500, 500, 833, 778, 278,
333, 333, 500, 570, 250, 333, 250, 278,
500, 500, 500, 500, 500, 500, 500, 500,
500, 500, 333, 333, 570, 570, 570, 500,
832, 667, 667, 667, 722, 667, 667, 722,
778, 389, 500, 667, 611, 889, 722, 722,
611, 722, 667, 556, 611, 722, 667, 889,
667, 611, 611, 333, 278, 333, 570, 500,
333, 500, 500, 444, 500, 444, 333, 500,
556, 278, 278, 500, 278, 778, 556, 500,
500, 500, 389, 389, 278, 556, 444, 667,
500, 444, 389, 348, 220, 348, 570, 350, # 127
500, 350, 333, 500, 502, 1000, 500, 500, # 135
333, 1000, 555, 333, 944, 350, 610, 350, # 143
350, 333, 333, 500, 500, 350, 500, 1000, # 151
333, 1000, 389, 333, 721, 350, 390, 610, # 159
250, 389, 500, 500, 500, 500, 220, 500, #167
333, 747, 266, 500, 606, 333, 747, 333, #175
400, 570, 300, 300, 333, 532, 500, 250, #183
333, 300, 300, 500, 750, 750, 750, 500,
667, 667, 667, 667, 667, 667, 944, 667,
667, 667, 667, 667, 389, 389, 389, 389,
722, 722, 722, 722, 722, 722, 722, 570,
722, 722, 722, 722, 722, 611, 611, 500,
500, 500, 500, 500, 500, 500, 722, 444,
444, 444, 444, 444, 278, 278, 278, 278,
500, 556, 500, 500, 500, 500, 500, 570,
500, 556, 556, 556, 556, 444, 500, 444],
'Helvetica' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
278, 278, 355, 556, 556, 889, 667, 192,
333, 333, 389, 584, 278, 333, 278, 278,
556, 556, 556, 556, 556, 556, 556, 556,
556, 556, 278, 278, 584, 584, 584, 556,
1015, 667, 667, 722, 722, 667, 611, 778,
722, 278, 500, 667, 556, 833, 722, 778,
667, 778, 722, 667, 611, 722, 667, 944,
667, 667, 611, 278, 278, 278, 469, 557,
334, 556, 556, 500, 556, 556, 278, 556,
556, 222, 222, 500, 222, 833, 556, 556,
556, 556, 333, 500, 278, 556, 500, 722,
500, 500, 500, 334, 260, 334, 584, 350, # 127
556, 350, 222, 556, 333, 1000, 556, 556, # 135
333, 1000, 667, 333, 1000, 351, 611, 350, # 143
350, 223, 222, 333, 333, 351, 557, 1000, # 151
333, 1000, 500, 333, 945, 350, 500, 667, # 159
278, 333, 556, 556, 556, 556, 260, 556, # 167
333, 737, 370, 556, 584, 333, 737, 333, # 175
400, 584, 333, 333, 333, 578, 537, 278, # 183
333, 333, 365, 556, 835, 835, 835, 611, # 191
667, 667, 667, 667, 667, 667, 1000, 722,
667, 667, 667, 667, 278, 278, 278, 278,
722, 722, 778, 778, 778, 778, 778, 584,
778, 722, 722, 722, 722, 667, 667, 611,
556, 556, 556, 556, 556, 556, 889, 500,
556, 556, 556, 556, 278, 278, 278, 278,
556, 556, 556, 556, 556, 556, 556, 584,
611, 556, 556, 556, 556, 500, 556, 500],
'Helvetica-Bold' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000, #31
278, 333, 474, 556, 556, 889, 722, 238, #39
333, 333, 389, 584, 278, 333, 278, 278, #47
556, 556, 556, 556, 556, 556, 556, 556, #55
556, 556, 333, 333, 584, 584, 584, 611, #63
975, 722, 722, 722, 722, 667, 611, 778, #71
722, 278, 556, 722, 611, 833, 722, 778, #79
667, 778, 722, 667, 611, 722, 667, 944, #87
667, 667, 611, 333, 278, 333, 584, 556, #95
333, 556, 611, 556, 611, 556, 333, 611, #103
611, 278, 278, 556, 278, 889, 611, 611, #111
611, 611, 389, 556, 333, 611, 556, 778, #119
556, 556, 500, 389, 280, 389, 584, 350, # 127
556, 350, 278, 556, 500, 1000, 556, 556, # 135
333, 1000, 667, 333, 1000, 350, 611, 350, # 143
350, 278, 278, 500, 500, 350, 556, 1000, # 151
333, 1000, 556, 333, 944, 350, 500, 667, # 159
278, 333, 556, 556, 556, 556, 280, 556, #167
333, 737, 370, 556, 584, 333, 737, 333,
400, 584, 333, 333, 333, 611, 556, 278,
333, 333, 365, 556, 834, 834, 834, 611,
722, 722, 722, 722, 722, 722, 1000, 722,
667, 667, 667, 667, 278, 278, 278, 278,
722, 722, 778, 778, 778, 778, 778, 584,
778, 722, 722, 722, 722, 667, 667, 611,
556, 556, 556, 556, 556, 556, 889, 556,
556, 556, 556, 556, 278, 278, 278, 278,
611, 611, 611, 611, 611, 611, 611, 584,
611, 611, 611, 611, 611, 556, 611, 556],
'Helvetica-Oblique' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
278, 278, 355, 556, 556, 889, 667, 191,
333, 333, 389, 584, 278, 333, 278, 278,
556, 556, 556, 556, 556, 556, 556, 556,
556, 556, 278, 278, 584, 584, 584, 556,
1015, 667, 667, 722, 722, 667, 611, 778,
722, 278, 500, 667, 556, 833, 722, 778,
667, 778, 722, 667, 611, 722, 667, 944,
667, 667, 611, 278, 278, 278, 469, 556,
333, 556, 556, 500, 556, 556, 278, 556,
556, 222, 222, 500, 222, 833, 556, 556,
556, 556, 333, 500, 278, 556, 500, 722,
500, 500, 500, 334, 260, 334, 584, 350, # 127
556, 350, 222, 556, 333, 1000, 556, 556, # 135
333, 1000, 667, 333, 1000, 351, 611, 350, # 143
350, 223, 222, 333, 333, 351, 557, 1000, # 151
333, 1000, 500, 333, 945, 350, 500, 667, # 159
278, 333, 556, 556, 556, 556, 260, 556, # 167
333, 737, 370, 556, 584, 333, 737, 333, # 175
400, 584, 333, 333, 333, 578, 537, 278, # 183
333, 333, 365, 556, 834, 834, 834, 611, # 191
667, 667, 667, 667, 667, 667, 1000, 722,
667, 667, 667, 667, 278, 278, 278, 278,
722, 722, 778, 778, 778, 778, 778, 584,
778, 722, 722, 722, 722, 667, 667, 611,
556, 556, 556, 556, 556, 556, 889, 500,
556, 556, 556, 556, 278, 278, 278, 278,
556, 556, 556, 556, 556, 556, 556, 584,
611, 556, 556, 556, 556, 500, 556, 500],
'Helvetica-BoldOblique' =>
[000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
000, 000, 000, 000, 000, 000, 000, 000,
278, 333, 474, 556, 556, 889, 722, 238, #39
333, 333, 389, 584, 278, 333, 278, 278, #47
556, 556, 556, 556, 556, 556, 556, 556, #55
556, 556, 333, 333, 584, 584, 584, 611, #63
975, 722, 722, 722, 722, 667, 611, 778, #71
722, 278, 556, 722, 611, 833, 722, 778, #79
667, 778, 722, 667, 611, 722, 667, 944, #87
667, 667, 611, 333, 278, 333, 584, 556, #95
333, 556, 611, 556, 611, 556, 333, 611, #103
611, 278, 278, 556, 278, 889, 611, 611, #111
611, 611, 389, 556, 333, 611, 556, 778, #119
556, 556, 500, 389, 280, 389, 584, 350, # 127
556, 350, 278, 556, 500, 1000, 556, 556, # 135
333, 1000, 667, 333, 1000, 350, 611, 350, # 143
350, 278, 278, 500, 500, 350, 556, 1000, # 151
333, 1000, 556, 333, 944, 350, 500, 667, # 159
278, 333, 556, 556, 556, 556, 280, 556,
333, 737, 370, 556, 584, 333, 737, 333,
400, 584, 333, 333, 333, 611, 556, 278,
333, 333, 365, 556, 834, 834, 834, 611,
722, 722, 722, 722, 722, 722, 1000, 722,
667, 667, 667, 667, 278, 278, 278, 278,
722, 722, 778, 778, 778, 778, 778, 584,
778, 722, 722, 722, 722, 667, 667, 611,
556, 556, 556, 556, 556, 556, 889, 556,
556, 556, 556, 556, 278, 278, 278, 278,
611, 611, 611, 611, 611, 611, 611, 584,
611, 611, 611, 611, 611, 556, 611, 556]
);
1;
sub hyperLink
{ my $x = shift;
my $y = shift;
my $text = shift || ' ';
my $URI = shift;
my $fontSize = shift;
my $s = shift || 'URI';
my ($actualSize, $fontSizeBeforetheChange, $height, $x2, $y2);
if ((! defined $x) || (! defined $y) || (! defined $URI))
{ return undef;
}
my ($internalName, $externalName, $oldInternalName, $oldExternalname) =
PDF::Reuse::prFont('HO');
if (! defined $fontSize)
{ ($actualSize, $fontSizeBeforetheChange) = PDF::Reuse::prFontSize();
$fontSize = $fontSizeBeforetheChange;
PDF::Reuse::prFontSize($fontSize) if ($actualSize != $fontSizeBeforetheChange);
}
else
{ ($actualSize, $fontSizeBeforetheChange) = PDF::Reuse::prFontSize($fontSize);
}
$height = $fontSize + 2.5;
my $width = PDF::Reuse::prStrWidth($text);
$y2 = $y - 2;
$x2 = $x + $width;
PDF::Reuse::prAdd("q\n 0.3 0.3 1 RG 0.3 0.3 1 rg\n$x $y2 m\n$x2 $y2 l\n B*\n");
$y2 -= 1;
PDF::Reuse::prText($x, $y, $text);
PDF::Reuse::prLink( { x => $x,
y => $y2,
width => $width,
height => $height,
URI => $URI,
s => $s} );
PDF::Reuse::prAdd("0 0 0 RG 0 0 0 rg\nQ\n");
PDF::Reuse::prFont($oldExternalname)
if ($oldExternalname ne $externalName);
PDF::Reuse::prFontSize($fontSizeBeforetheChange)
if ($fontSizeBeforetheChange != $fontSize);
return $x2;
}
sub blackText
{ PDF::Reuse::prAdd("0 0 0 rg\n0 g\nf\n");
1;
}