From 8592f0dfecfe795c4c4be608fdbe37ecac4fa47d Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Fri, 15 Jun 2012 10:20:33 +0200 Subject: [PATCH] PPD: A bit more paper handling... --- ppd/PPD/Paper.pm | 38 +++++++++++++++++++++++++++++++------- ppd/gen-hp | 5 ++++- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/ppd/PPD/Paper.pm b/ppd/PPD/Paper.pm index 6a67900..2112b7b 100644 --- a/ppd/PPD/Paper.pm +++ b/ppd/PPD/Paper.pm @@ -2,14 +2,22 @@ package PPD::Paper; use PPD; +sub mm($) { + my ($mm) = @_; + return int($mm/25.4*72 + 0.5); +} + # Media parameters: # Name human-readable name # W width in PS points # H height in PS points my %media = ( - 'A3' => { Name => 'A3 (297 x 420 mm)', W => 842, H => 1191 }, - 'A4' => { Name => 'A4 (210 x 297 mm)', W => 595, H => 842 }, - 'A5' => { Name => 'A5 (148 x 210 mm)', W => 419, H => 595 }, + 'A3' => { Name => 'A3', W => mm(297), H => mm(420) }, + 'A4' => { Name => 'A4', W => mm(210), H => mm(297) }, + 'A5' => { Name => 'A5', W => mm(148), H => mm(210) }, + 'A6' => { Name => 'A6', W => mm(105), H => mm(148) }, + 'Letter' => { Name => 'US Letter', W => 612, H => 792 }, + 'Legal' => { Name => 'US Legal', W => 612, H => 1008 }, ); # add_papers({ @@ -18,9 +26,10 @@ my %media = ( # MinH => pt, # Minimum paper height (default: 0) # MaxH => pt, # Maximum paper height (default: 842) # MarginH => pt, # Horizontal margin (default: 0) -# MarginW => pt, # Vertical margin (default: 0) +# MarginV => pt, # Vertical margin (default: 0) # DefPaper => paper, # Default paper type (default: A4) -# PSPageSize => PS, # PS code for setting page size (subroutine called with ref to media object) +# PSPageSize => PS, # PS code for setting PageSize (subroutine called with ref to media object) +# PSPageRegion => PS, # The same for PageRegion (default: use PSPageSize) # }) sub add_papers($) { # Scan available paper formats @@ -72,7 +81,7 @@ sub add_papers($) { { Key => $k, Name => ($m->{Name} // $k), - PS => &{$o->{PSPageSize}}($m), + PS => &{$o->{PSPageRegion} // $o->{PSPageSize}}($m), Default => ($k eq $o->{'DefPaper'}), } } sort keys %real_media ] @@ -87,7 +96,22 @@ sub add_papers($) { { Key => $k, Name => ($m->{Name} // $k), - PS => sprintf("%.2f %.2f %.2f %.2f", $margh, $margv, $m->{W} - $margh, $m->{H} - $margv), + PS => sprintf("%d %d %d %d", $margh, $margv, $m->{W} - $margh, $m->{H} - $margv), + Default => ($k eq $o->{'DefPaper'}), + } + } sort keys %real_media ] + }); + + option({ + Group => 'Media', + Key => 'PaperDimension', + Values => [ map { + my $k = $_; + my $m = $real_media{$_}; + { + Key => $k, + Name => ($m->{Name} // $k), + PS => sprintf("%d %d", $m->{W}, $m->{H}), Default => ($k eq $o->{'DefPaper'}), } } sort keys %real_media ] diff --git a/ppd/gen-hp b/ppd/gen-hp index 9c1f2e3..7bf8f68 100755 --- a/ppd/gen-hp +++ b/ppd/gen-hp @@ -85,7 +85,10 @@ option({ PPD::PJL::add_jcl(); PPD::Paper::add_papers({ - 'PSPageSize' => sub { my ($m) = @_; return sprintf("<< /PageSize [%d %d] >> setpagedevice", $m->{W}, $m->{H}); }, + MinW => 216, MaxW => 612, + MinH => 360, MaxH => 1008, + MarginH => 16, MarginV => 16, + PSPageSize => sub { my ($m) = @_; return sprintf("<< /PageSize [%d %d] >> setpagedevice", $m->{W}, $m->{H}); }, }); generate(); -- GitLab