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;
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 ]
......
......@@ -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();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment