diff --git a/src/devices/gropdf/pdfmom.pl b/src/devices/gropdf/pdfmom.pl index a4f250c6..af48d6d5 100644 --- a/src/devices/gropdf/pdfmom.pl +++ b/src/devices/gropdf/pdfmom.pl @@ -123,7 +123,36 @@ if ($readstdin) if ($dev eq 'pdf') { - system("groff -Tpdf -dLABEL.REFS=1 -mom -z $preconv $cmdstring 2>&1 | grep '^\. *ds' | groff -Tpdf -dPDF.EXPORT=1 -dLABEL.REFS=1 -mom -z - $preconv $cmdstring 2>&1 | grep '^\. *ds' | groff -Tpdf -mom $preconv - $cmdstring"); + my (@strings); + my ($tmpfh, $tmpfn) = tempfile('pdfmom-XXXXX', UNLINK => 1); + die "pdf: binmode tmpfile: $^E" unless binmode $tmpfh; + + die "pdf: open 1: $^E" unless open ROFF, + 'groff -Tpdf -dLABEL.REFS=1 -mom -z ' .$preconv. ' ' .$cmdstring. + ' 2>&1 |'; + die "pdf: binmode 1: $^E" unless binmode ROFF; + while(){ + print $tmpfh $_ if /^\.ds/ + } + die "pdf: close 1: $^E" unless close ROFF; + $tmpfh->flush; + + die "pdf: open 2: $^E" unless open ROFF, + 'groff -Tpdf -dPDF.EXPORT=1 -dLABEL.REFS=1 -mom -z ' .$tmpfn1. ' ' . + $preconv. ' ' .$cmdstring. ' 2>&1 |'; + die "pdf: binmode 2: $^E" unless binmode ROFF; + while(){ + push @strings, $_ if /^\.ds/ + } + die "pdf: close 2: $^E" unless close ROFF; + + die "pdf: open 3: $^E" unless open ROFF, + '| groff -Tpdf -mom - ' .$preconv. ' ' .$cmdstring; + for my $s (@strings){ + print ROFF $s + } + die "pdf: close 3: $^E" unless close ROFF + } elsif ($dev eq 'ps') {