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

PPD: Bits of media setting options

parent 70c7b2d8
No related branches found
No related tags found
No related merge requests found
package PPD::Paper;
use PPD;
# 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 },
);
# add_papers({
# MinW => pt, # Minimum paper width (default: 0)
# MaxW => pt, # Maximum paper width (default: 595)
# 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)
# DefPaper => paper, # Default paper type (default: A4)
# PSPageSize => PS, # PS code for setting page size (subroutine called with ref to media object)
# })
sub add_papers($) {
# Scan available paper formats
my ($o) = @_;
my $minw = $o->{MinW} // 0;
my $maxw = $o->{MaxW} // 595;
my $minh = $o->{MinH} // 0;
my $maxh = $o->{MaxH} // 842;
my $margh = $o->{MarginH} // 0;
my $margv = $o->{MarginV} // 0;
my %real_media = ();
for my $p (keys %media) {
my $m = $media{$p};
$m->{W} >= $minw && $m->{W} <= $maxw && $m->{H} >= $minh && $m->{H} <= $maxh or next;
$real_media{$p} = $m;
$m->{Key} = $p;
}
$o->{DefPaper} //= 'A4';
option({
Key => 'PageSize',
Name => 'Page Size',
UI => '',
Priority => 30,
Values => [ map {
my $k = $_;
my $m = $real_media{$_};
{
Key => $k,
Name => ($m->{Name} // $k),
PS => &{$o->{PSPageSize}}($m),
Default => ($k eq $o->{'DefPaper'}),
}
} sort keys %real_media ]
});
option({
Key => 'PageRegion',
Name => 'Page Region',
UI => '',
Priority => 40,
Values => [ map {
my $k = $_;
my $m = $real_media{$_};
{
Key => $k,
Name => ($m->{Name} // $k),
PS => &{$o->{PSPageSize}}($m),
Default => ($k eq $o->{'DefPaper'}),
}
} sort keys %real_media ]
});
option({
Key => 'ImageableArea',
Values => [ map {
my $k = $_;
my $m = $real_media{$_};
{
Key => $k,
Name => ($m->{Name} // $k),
PS => sprintf("%.2f %.2f %.2f %.2f", $margh, $margv, $m->{W} - $margh, $m->{H} - $margv),
Default => ($k eq $o->{'DefPaper'}),
}
} sort keys %real_media ]
});
}
42;
......@@ -6,6 +6,7 @@ use warnings;
use lib ".";
use PPD;
use PPD::PJL;
use PPD::Paper;
set('f/FileVersion', '1.0');
set('f/PCFileName', 'HP4350.PPD');
......@@ -80,5 +81,8 @@ option({
});
PPD::PJL::add_jcl();
PPD::Paper::add_papers({
'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