no
warnings
qw[ deprecated recursion uninitialized ]
;
our
$VERSION
=
'2.030_001'
;
sub
new {
my
(
$class
,
$api
,
$parent
,
$prev
)=
@_
;
my
$self
=
$class
->SUPER::new;
$self
->{
' apipdf'
}=
$api
->{pdf};
$self
->{
' api'
}=
$api
;
$self
->{Parent}=
$parent
if
(
defined
$parent
);
$self
->{Prev}=
$prev
if
(
defined
$prev
);
return
(
$self
);
}
sub
parent {
my
$self
=
shift
@_
;
if
(
defined
$_
[0]) {
$self
->{Parent}=
shift
@_
;
}
return
$self
->{Parent};
}
sub
prev {
my
$self
=
shift
@_
;
if
(
defined
$_
[0]) {
$self
->{Prev}=
shift
@_
;
}
return
$self
->{Prev};
}
sub
next
{
my
$self
=
shift
@_
;
if
(
defined
$_
[0]) {
$self
->{Next}=
shift
@_
;
}
return
$self
->{Next};
}
sub
first {
my
$self
=
shift
@_
;
$self
->{First}=
$self
->{
' childs'
}->[0]
if
(
defined
$self
->{
' childs'
} &&
defined
$self
->{
' childs'
}->[0]);
return
$self
->{First} ;
}
sub
last
{
my
$self
=
shift
@_
;
$self
->{Last}=
$self
->{
' childs'
}->[-1]
if
(
defined
$self
->{
' childs'
} &&
defined
$self
->{
' childs'
}->[-1]);
return
$self
->{Last};
}
sub
count {
my
$self
=
shift
@_
;
my
$cnt
=
scalar
@{
$self
->{
' childs'
}||[]};
map
{
$cnt
+=
$_
->count();} @{
$self
->{
' childs'
}};
$self
->{Count}=PDFNum(
$self
->{
' closed'
} ? -
$cnt
:
$cnt
)
if
(
$cnt
>0);
return
$cnt
;
}
sub
fix_outline {
my
(
$self
)=
@_
;
$self
->first;
$self
->
last
;
$self
->count;
}
sub
title {
my
(
$self
,
$txt
)=
@_
;
$self
->{Title}=PDFStr(
$txt
);
return
(
$self
);
}
sub
closed {
my
$self
=
shift
@_
;
$self
->{
' closed'
}=1;
return
$self
;
}
sub
open
{
my
$self
=
shift
@_
;
delete
$self
->{
' closed'
};
return
$self
;
}
sub
outline {
my
$self
=
shift
@_
;
my
$obj
=PDF::API2::Outline->new(
$self
->{
' api'
},
$self
);
$obj
->prev(
$self
->{
' childs'
}->[-1])
if
(
defined
$self
->{
' childs'
});
$self
->{
' childs'
}->[-1]->
next
(
$obj
)
if
(
defined
$self
->{
' childs'
});
push
(@{
$self
->{
' childs'
}},
$obj
);
$self
->{
' api'
}->{pdf}->new_obj(
$obj
)
if
(!
$obj
->is_obj(
$self
->{
' api'
}->{pdf}));
return
$obj
;
}
sub
dest
{
my
(
$self
,
$page
,
%opts
)=
@_
;
if
(
ref
$page
)
{
$opts
{-xyz}=[
undef
,
undef
,
undef
]
if
(
scalar
(
keys
%opts
)<1);
if
(
defined
$opts
{-fit})
{
$self
->{Dest}=PDFArray(
$page
,PDFName(
'Fit'
));
}
elsif
(
defined
$opts
{-fith})
{
$self
->{Dest}=PDFArray(
$page
,PDFName(
'FitH'
),PDFNum(
$opts
{-fith}));
}
elsif
(
defined
$opts
{-fitb})
{
$self
->{Dest}=PDFArray(
$page
,PDFName(
'FitB'
));
}
elsif
(
defined
$opts
{-fitbh})
{
$self
->{Dest}=PDFArray(
$page
,PDFName(
'FitBH'
),PDFNum(
$opts
{-fitbh}));
}
elsif
(
defined
$opts
{-fitv})
{
$self
->{Dest}=PDFArray(
$page
,PDFName(
'FitV'
),PDFNum(
$opts
{-fitv}));
}
elsif
(
defined
$opts
{-fitbv})
{
$self
->{Dest}=PDFArray(
$page
,PDFName(
'FitBV'
),PDFNum(
$opts
{-fitbv}));
}
elsif
(
defined
$opts
{-fitr})
{
die
"insufficient parameters to ->dest( page, -fitr => [] ) "
unless
(
scalar
@{
$opts
{-fitr}} == 4);
$self
->{Dest}=PDFArray(
$page
,PDFName(
'FitR'
),
map
{PDFNum(
$_
)} @{
$opts
{-fitr}});
}
elsif
(
defined
$opts
{-xyz})
{
die
"insufficient parameters to ->dest( page, -xyz => [] ) "
unless
(
scalar
@{
$opts
{-xyz}} == 3);
$self
->{Dest}=PDFArray(
$page
,PDFName(
'XYZ'
),
map
{
defined
$_
? PDFNum(
$_
) : PDFNull()} @{
$opts
{-xyz}});
}
}
else
{
$self
->{Dest}=PDFStr(
$page
);
}
return
(
$self
);
}
sub
url {
my
(
$self
,
$url
,
%opts
)=
@_
;
delete
$self
->{Dest};
$self
->{A}=PDFDict();
$self
->{A}->{S}=PDFName(
'URI'
);
$self
->{A}->{URI}=PDFStr(
$url
);
return
(
$self
);
}
sub
file {
my
(
$self
,
$file
,
%opts
)=
@_
;
delete
$self
->{Dest};
$self
->{A}=PDFDict();
$self
->{A}->{S}=PDFName(
'Launch'
);
$self
->{A}->{F}=PDFStr(
$file
);
return
(
$self
);
}
sub
pdfile {
my
(
$self
,
$file
,
$pnum
,
%opts
)=
@_
;
delete
$self
->{Dest};
$self
->{A}=PDFDict();
$self
->{A}->{S}=PDFName(
'GoToR'
);
$self
->{A}->{F}=PDFStr(
$file
);
if
(
defined
$opts
{-fit}) {
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'Fit'
));
}
elsif
(
defined
$opts
{-fith}) {
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'FitH'
),PDFNum(
$opts
{-fith}));
}
elsif
(
defined
$opts
{-fitb}) {
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'FitB'
));
}
elsif
(
defined
$opts
{-fitbh}) {
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'FitBH'
),PDFNum(
$opts
{-fitbh}));
}
elsif
(
defined
$opts
{-fitv}) {
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'FitV'
),PDFNum(
$opts
{-fitv}));
}
elsif
(
defined
$opts
{-fitbv}) {
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'FitBV'
),PDFNum(
$opts
{-fitbv}));
}
elsif
(
defined
$opts
{-fitr}) {
die
"insufficient parameters to ->dest( page, -fitr => [] ) "
unless
(
scalar
@{
$opts
{-fitr}} == 4);
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'FitR'
),
map
{PDFNum(
$_
)} @{
$opts
{-fitr}});
}
elsif
(
defined
$opts
{-xyz}) {
die
"insufficient parameters to dest( page, -xyz => [] ) "
unless
(
scalar
@{
$opts
{-fitr}} == 3);
$self
->{A}->{D}=PDFArray(PDFNum(
$pnum
),PDFName(
'XYZ'
),
map
{PDFNum(
$_
)} @{
$opts
{-xyz}});
}
return
(
$self
);
}
sub
out_obj {
my
(
$self
,
@param
)=
@_
;
$self
->fix_outline;
return
$self
->SUPER::out_obj(
@param
);
}
sub
outobjdeep {
my
(
$self
,
@param
)=
@_
;
$self
->fix_outline;
foreach
my
$k
(
qw/ api apipdf apipage /
) {
$self
->{
" $k"
}=
undef
;
delete
(
$self
->{
" $k"
});
}
my
@ret
=
$self
->SUPER::outobjdeep(
@param
);
foreach
my
$k
(
qw/ First Parent Next Last Prev /
) {
$self
->{
$k
}=
undef
;
delete
(
$self
->{
$k
});
}
return
@ret
;
}
1;