our
$VERSION
=
'3.027'
;
our
$LAST_UPDATE
=
'3.027'
;
our
$fonts
= {};
our
$cmap
= {};
our
$alias
;
our
$subs
;
sub
_look_for_font {
my
$fname
=
lc
(
shift
);
$fname
=~ s/[^a-z0-9]+//gi;
$fname
=
$alias
->{
$fname
}
if
defined
$alias
->{
$fname
};
return
{%{
$fonts
->{
$fname
}}}
if
defined
$fonts
->{
$fname
};
if
(
defined
$subs
->{
$fname
}) {
my
$data
= _look_for_font(
$subs
->{
$fname
}->{
'-alias'
});
foreach
my
$k
(
keys
%{
$subs
->{
$fname
}}) {
next
if
$k
=~ /^\-/;
if
(
substr
(
$k
, 0, 1) eq
'+'
) {
$data
->{
substr
(
$k
, 1)} .=
$subs
->{
$fname
}->{
$k
};
}
else
{
$data
->{
$k
} =
$subs
->{
$fname
}->{
$k
};
}
}
$fonts
->{
$fname
} =
$data
;
return
{
%$data
};
}
eval
"require 'PDF/Builder/Resource/CIDFont/CJKFont/$fname.data'"
;
unless
($@) {
return
{%{
$fonts
->{
$fname
}}};
}
else
{
die
"requested font '$fname' not installed "
;
}
}
sub
_look_for_cmap {
my
$map
=
shift
;
my
$fname
=
lc
(
$map
);
$fname
=~ s/[^a-z0-9]+//gi;
return
{%{
$cmap
->{
$fname
}}}
if
defined
$cmap
->{
$fname
};
eval
"require 'PDF/Builder/Resource/CIDFont/CMap/$fname.cmap'"
;
unless
($@) {
return
{%{
$cmap
->{
$fname
}}};
}
else
{
die
"requested cmap '$map' not installed "
;
}
}
sub
new {
my
(
$class
,
$pdf
,
$name
,
@opts
) =
@_
;
my
%opts
= ();
%opts
=
@opts
if
(
scalar
@opts
)%2 == 0;
if
(
defined
$opts
{
'-encode'
} && !
defined
$opts
{
'encode'
}) {
$opts
{
'encode'
} =
delete
(
$opts
{
'-encode'
}); }
$opts
{
'encode'
} ||=
'ident'
;
my
$data
= _look_for_font(
$name
);
my
$cmap
= _look_for_cmap(
$data
->{
'cmap'
});
$data
->{
'u2g'
} = { %{
$cmap
->{
'u2g'
}} };
$data
->{
'g2u'
} = [ @{
$cmap
->{
'g2u'
}} ];
$class
=
ref
$class
if
ref
$class
;
my
$key
= (
$data
->{
'apiname'
} //
''
) . pdfkey();
my
$self
=
$class
->SUPER::new(
$pdf
,
$key
);
$pdf
->new_obj(
$self
)
if
defined
(
$pdf
) && !
$self
->is_obj(
$pdf
);
$self
->{
' data'
} =
$data
;
if
(
defined
$opts
{
'encode'
} &&
$opts
{
'encode'
} ne
'ident'
) {
$self
->data->{
'encode'
} =
$opts
{
'encode'
};
}
my
$emap
= {
'reg'
=>
'Adobe'
,
'ord'
=>
'Identity'
,
'sup'
=> 0,
'map'
=>
'Identity'
,
'dir'
=>
'H'
,
'dec'
=>
'ident'
,
};
if
(
defined
$cmap
->{
'ccs'
}) {
$emap
->{
'reg'
} =
$cmap
->{
'ccs'
}->[0];
$emap
->{
'ord'
} =
$cmap
->{
'ccs'
}->[1];
$emap
->{
'sup'
} =
$cmap
->{
'ccs'
}->[2];
}
$self
->data()->{
'decode'
} =
$emap
->{
'dec'
};
$self
->{
'BaseFont'
} = PDFName(
join
(
'-'
,
$self
->fontname(),
$emap
->{
'map'
},
$emap
->{
'dir'
}));
$self
->{
'Encoding'
} = PDFName(
join
(
'-'
,
$emap
->{
'map'
},
$emap
->{
'dir'
}));
my
$des
=
$self
->descrByData();
my
$de
=
$self
->{
' de'
};
$de
->{
'FontDescriptor'
} =
$des
;
$de
->{
'Subtype'
} = PDFName(
'CIDFontType0'
);
$de
->{
'BaseFont'
} = PDFName(
$self
->fontname());
$de
->{
'DW'
} = PDFNum(
$self
->missingwidth());
$de
->{
'CIDSystemInfo'
}->{
'Registry'
} = PDFString(
$emap
->{
'reg'
},
'x'
);
$de
->{
'CIDSystemInfo'
}->{
'Ordering'
} = PDFString(
$emap
->{
'ord'
},
'x'
);
$de
->{
'CIDSystemInfo'
}->{
'Supplement'
} = PDFNum(
$emap
->{
'sup'
});
return
$self
;
}
sub
tounicodemap {
my
$self
=
shift
;
return
$self
;
}
sub
glyphByCId {
my
(
$self
,
$cid
) =
@_
;
my
$uni
=
$self
->uniByCId(
$cid
);
return
nameByUni(
$uni
);
}
sub
outobjdeep {
my
(
$self
,
$fh
,
$pdf
) =
@_
;
my
$notdefbefore
= 1;
my
$wx
= PDFArray();
$self
->{
' de'
}->{
'W'
} =
$wx
;
my
$ml
;
foreach
my
$i
(0 .. (
scalar
@{
$self
->data()->{
'g2u'
}} - 1 )) {
if
(
ref
(
$self
->data()->{
'wx'
}) eq
'ARRAY'
&&
(
defined
$self
->data()->{
'wx'
}->[
$i
]) &&
(
$self
->data()->{
'wx'
}->[
$i
] !=
$self
->missingwidth()) ) {
if
(
$notdefbefore
) {
$notdefbefore
= 0;
$ml
= PDFArray();
$wx
->add_elements(PDFNum(
$i
),
$ml
);
}
$ml
->add_elements(PDFNum(
$self
->data()->{
'wx'
}->[
$i
]));
}
elsif
(
ref
(
$self
->data()->{
'wx'
}) eq
'HASH'
&&
(
defined
$self
->data()->{
'wx'
}->{
$i
}) &&
(
$self
->data()->{
'wx'
}->{
$i
} !=
$self
->missingwidth()) ) {
if
(
$notdefbefore
) {
$notdefbefore
= 0;
$ml
= PDFArray();
$wx
->add_elements(PDFNum(
$i
),
$ml
);
}
$ml
->add_elements(PDFNum(
$self
->data()->{
'wx'
}->{
$i
}));
}
else
{
$notdefbefore
= 1;
}
}
return
$self
->SUPER::outobjdeep(
$fh
,
$pdf
);
}
BEGIN {
$alias
= {
'traditional'
=>
'adobemingstdlightacro'
,
'traditionalbold'
=>
'mingbold'
,
'traditionalitalic'
=>
'mingitalic'
,
'traditionalbolditalic'
=>
'mingbolditalic'
,
'ming'
=>
'adobemingstdlightacro'
,
'simplified'
=>
'adobesongstdlightacro'
,
'simplifiedbold'
=>
'songbold'
,
'simplifieditalic'
=>
'songitalic'
,
'simplifiedbolditalic'
=>
'songbolditalic'
,
'song'
=>
'adobesongstdlightacro'
,
'korean'
=>
'adobemyungjostdmediumacro'
,
'koreanbold'
=>
'myungjobold'
,
'koreanitalic'
=>
'myungjoitalic'
,
'koreanbolditalic'
=>
'myungjobolditalic'
,
'myungjo'
=>
'adobemyungjostdmediumacro'
,
'japanese'
=>
'kozminproregularacro'
,
'japanesebold'
=>
'kozminbold'
,
'japaneseitalic'
=>
'kozminitalic'
,
'japanesebolditalic'
=>
'kozminbolditalic'
,
'kozmin'
=>
'kozminproregularacro'
,
'kozgo'
=>
'kozgopromediumacro'
,
};
$subs
= {
'mingitalic'
=> {
'-alias'
=>
'adobemingstdlightacro'
,
'+fontname'
=>
',Italic'
,
},
'mingbold'
=> {
'-alias'
=>
'adobemingstdlightacro'
,
'+fontname'
=>
',Bold'
,
},
'mingbolditalic'
=> {
'-alias'
=>
'adobemingstdlightacro'
,
'+fontname'
=>
',BoldItalic'
,
},
'songitalic'
=> {
'-alias'
=>
'adobesongstdlightacro'
,
'+fontname'
=>
',Italic'
,
},
'songbold'
=> {
'-alias'
=>
'adobesongstdlightacro'
,
'+fontname'
=>
',Bold'
,
},
'songbolditalic'
=> {
'-alias'
=>
'adobesongstdlightacro'
,
'+fontname'
=>
',BoldItalic'
,
},
'kozgoitalic'
=> {
'-alias'
=>
'kozgopromediumacro'
,
'+fontname'
=>
',Italic'
,
},
'kozgobold'
=> {
'-alias'
=>
'kozgopromediumacro'
,
'+fontname'
=>
',Bold'
,
},
'kozgobolditalic'
=> {
'-alias'
=>
'kozgopromediumacro'
,
'+fontname'
=>
',BoldItalic'
,
},
'kozminitalic'
=> {
'-alias'
=>
'kozminproregularacro'
,
'+fontname'
=>
',Italic'
,
},
'kozminbold'
=> {
'-alias'
=>
'kozminproregularacro'
,
'+fontname'
=>
',Bold'
,
},
'kozminbolditalic'
=> {
'-alias'
=>
'kozminproregularacro'
,
'+fontname'
=>
',BoldItalic'
,
},
'myungjoitalic'
=> {
'-alias'
=>
'adobemyungjostdmediumacro'
,
'+fontname'
=>
',Italic'
,
},
'myungjobold'
=> {
'-alias'
=>
'adobemyungjostdmediumacro'
,
'+fontname'
=>
',Bold'
,
},
'myungjobolditalic'
=> {
'-alias'
=>
'adobemyungjostdmediumacro'
,
'+fontname'
=>
',BoldItalic'
,
},
};
}
1;