diff --git a/src/devices/gropdf/gropdf.pl b/src/devices/gropdf/gropdf.pl index 9a8288c..8103914 100644 --- a/src/devices/gropdf/gropdf.pl +++ b/src/devices/gropdf/gropdf.pl @@ -467,7 +465,7 @@ sub GetObj sub PDFDate { my $dt=shift; - return(sprintf("D:%04d%02d%02d%02d%02d%02d% +02d'00'",$dt->[5]+1900,$dt->[4]+1,$dt->[3],$dt->[2],$dt->[1],$dt->[0],( localtime time() + 3600*( 12 - (gmtime)[2] ) )[2] - 12)); + return(sprintf("D:%04d%02d%02d%02d%02d%02d%+03d'00'",$dt->[5]+1900,$dt->[4]+1,$dt->[3],$dt->[2],$dt->[1],$dt->[0],( localtime time() + 3600*( 12 - (gmtime)[2] ) )[2] - 12)); } sub ToPoints @@ -711,6 +709,7 @@ sub do_x { my $pdfmark=$1; $pdfmark=~s((\d{4,6}) u)(sprintf("%.1f",$1/$desc{sizescale}))eg; + $pdfmark=~s(\\\[u00(..)\])(chr(hex($1)))eg; if ($pdfmark=~m/(.+) \/DOCINFO/) { @@ -768,7 +767,10 @@ sub do_x } elsif ($pdfmark=~m/(.+) \/OUT/) { - my @xwds=split(' ',"<< $1 >>"); + my $t=$1; + $t=~s/\\\) /\\\\\) /g; + $t=~s/\\e/\\\\/g; + my @xwds=split(' ',"<< $t >>"); my $out=ParsePDFValue(address@hidden); my $this=[$out,[]]; @@ -1125,6 +1127,7 @@ sub PutHotSpot $l=~s/Color/C/; $l=~s/Action/A/; $l=~s'/Subtype /URI'/S /URI'; + $l=~s(\\\[u00(..)\])(chr(hex($1)))eg; my @xwds=split(' ',"<< $l >>"); my $annotno=BuildObj(++$objct,ParsePDFValue(address@hidden)); my $annot=$obj[$objct]; @@ -1622,7 +1625,7 @@ sub nextwd return('') if !defined($wd); - if ($wd=~m/^(.*?)(<<|>>|\[|\])(.*)/) + if ($wd=~m/^(.*?)(<<|>>|(?:(? '/Font', 'Subtype' => '/Type1', 'BaseFont' => '/'.$fnt{internalname}, + 'Widths' => $fnt{WID}, + 'FirstChar' => 0, + 'LastChar' => $lastchr, 'Encoding' => BuildObj($objct+1, {'Type' => '/Encoding', 'Differences' => $fnt{GNO} } - ) + ), + 'FontDescriptor' => BuildObj($objct+2, + {'Type' => '/FontDescriptor', + 'FontName' => '/'.$fnt{internalname}, + 'Flags' => $t1flags, + 'FontBBox' => address@hidden, + 'ItalicAngle' => $slant, + 'Ascent' => $ascent, + 'Descent' => $fntbbox[1], + 'CapHeight' => $capheight, + 'StemV' => 0, + 'CharSet' => "($charset)", + } + ) } ); - $objct+=1; + + $objct+=2; $fontlst{$fontno}->{NM}='/F'.$fontno; $pages->{'Resources'}->{'Font'}->{'F'.$fontno}=$fontlst{$fontno}->{OBJ}; $fontlst{$fontno}->{FNT}=\%fnt; @@ -2326,6 +2346,7 @@ sub do_p $cpage=$obj[$cpageno]->{DATA}; $pages->{'Count'}++; $stream="q 1 0 0 1 0 0 cm\n$linejoin J\n$linecap j\n"; + $stream.=$strkcol."\n", $curstrk=$strkcol if $strkcol ne ''; $mode='g'; $curfill=''; # @address@hidden; @@ -3028,6 +3049,7 @@ sub TextWid my $txt=shift; my $w=0; my $ck=0; + $txt=~s/^\\(\d\d\d)/chr($1)/e; foreach my $c (split('',$txt)) { @@ -3068,7 +3090,7 @@ sub do_t $xpos+=($pendmv-$nomove)/$unitwidth; $stream.="% == '$par'=$wid 'xpos=$xpos\n" if $debug; - $par=~s/\\/\\\\/g; + $par=~s/\\(?!\d\d\d)/\\\\/g; $par=~s/\)/\\)/g; $par=~s/\(/\\(/g; @@ -3198,7 +3220,7 @@ sub FindChar my $ch=$fnt->{GNM}->{$chnm}; $ch=RemapChr($ch,$fnt,$chnm) if ($ch > 255); - return(chr($ch),$fnt->{WID}->[$ch]*$cftsz); + return(($ch<32)?sprintf("\\%03o",$ch):chr($ch),$fnt->{WID}->[$ch]*$cftsz); } else { @@ -3222,7 +3244,7 @@ sub RemapChr { $fnt->{GNM}->{$chnm}=$unused++; $fnt->{GNO}->[$unused]=$fnt->{GNO}->[$ch+1]; - $fnt->{WID}->[$unused]=$fnt->{WID}->[$ch+1]; + $fnt->{WID}->[$unused]=$fnt->{WID}->[$ch]; $ch=$unused-1; return($ch); } @@ -3274,3 +3296,11 @@ sub do_n @lin=(); PutHotSpot($xpos) if defined($mark); } + + +1; +######################################################################## +### Emacs settings +# Local Variables: +# mode: CPerl +# End: