Skip to content
Snippets Groups Projects
Commit 8592f0df authored by Martin Mareš's avatar Martin Mareš
Browse files

PPD: A bit more paper handling...

parent 19b6c9d6
No related branches found
No related tags found
No related merge requests found
...@@ -2,14 +2,22 @@ package PPD::Paper; ...@@ -2,14 +2,22 @@ package PPD::Paper;
use PPD; use PPD;
sub mm($) {
my ($mm) = @_;
return int($mm/25.4*72 + 0.5);
}
# Media parameters: # Media parameters:
# Name human-readable name # Name human-readable name
# W width in PS points # W width in PS points
# H height in PS points # H height in PS points
my %media = ( my %media = (
'A3' => { Name => 'A3 (297 x 420 mm)', W => 842, H => 1191 }, 'A3' => { Name => 'A3', W => mm(297), H => mm(420) },
'A4' => { Name => 'A4 (210 x 297 mm)', W => 595, H => 842 }, 'A4' => { Name => 'A4', W => mm(210), H => mm(297) },
'A5' => { Name => 'A5 (148 x 210 mm)', W => 419, H => 595 }, '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({ # add_papers({
...@@ -18,9 +26,10 @@ my %media = ( ...@@ -18,9 +26,10 @@ my %media = (
# MinH => pt, # Minimum paper height (default: 0) # MinH => pt, # Minimum paper height (default: 0)
# MaxH => pt, # Maximum paper height (default: 842) # MaxH => pt, # Maximum paper height (default: 842)
# MarginH => pt, # Horizontal margin (default: 0) # 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) # 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($) { sub add_papers($) {
# Scan available paper formats # Scan available paper formats
...@@ -72,7 +81,7 @@ sub add_papers($) { ...@@ -72,7 +81,7 @@ sub add_papers($) {
{ {
Key => $k, Key => $k,
Name => ($m->{Name} // $k), Name => ($m->{Name} // $k),
PS => &{$o->{PSPageSize}}($m), PS => &{$o->{PSPageRegion} // $o->{PSPageSize}}($m),
Default => ($k eq $o->{'DefPaper'}), Default => ($k eq $o->{'DefPaper'}),
} }
} sort keys %real_media ] } sort keys %real_media ]
...@@ -87,7 +96,22 @@ sub add_papers($) { ...@@ -87,7 +96,22 @@ sub add_papers($) {
{ {
Key => $k, Key => $k,
Name => ($m->{Name} // $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'}), Default => ($k eq $o->{'DefPaper'}),
} }
} sort keys %real_media ] } sort keys %real_media ]
......
...@@ -85,7 +85,10 @@ option({ ...@@ -85,7 +85,10 @@ option({
PPD::PJL::add_jcl(); PPD::PJL::add_jcl();
PPD::Paper::add_papers({ 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(); generate();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment