Sophie

Sophie

distrib > Mageia > 7 > armv7hl > media > core-release > by-pkgid > 4db3b4399d2c8a1cdd87df2ac0acf27b > files > 10

perl-PostScript-Simple-0.90.0-4.mga7.noarch.rpm

#! /usr/bin/perl -w

# Examples for PostScript::Simple module
# Matthew Newton
# 09 November 2003

use strict;
use lib qw(../lib);
use PostScript::Simple 0.06;

my $ps;
my $eps;
my $directeps;
my $y;

# First, create an EPS file for use later

$ps = new PostScript::Simple(xsize => 100,
                                ysize => 100,
                                colour => 1,
                                eps => 1,
                                reencode => undef);

$ps->setlinewidth(5);
$ps->box(10, 10, 90, 90);
$ps->setlinewidth("thin");
$ps->line(0, 50, 100, 50);
$ps->line(50, 0, 50, 100);
$ps->line(0, 40, 0, 60);
$ps->line(100, 40, 100, 60);
$ps->line(40, 0, 60, 0);
$ps->line(40, 100, 60, 100);
$ps->output("demo-square.eps");

# Let's also create a PostScript::Simple::EPS object directly from it

#$directeps = new PostScript::Simple::EPS(source => $ps->get());
$directeps = $ps->geteps();

undef $ps;

# Now generate the demo document. Start by creating the A4 document.
$ps = new PostScript::Simple(papersize => "a4",
                             units => "mm",
                             colour => 1,
                             eps => 0,
                             reencode => undef);

################################################################################
# PAGE 1
################################################################################

# Create page (EPS import from a file, demo-square.eps)
mynewpage($ps, "EPS import functions (from a file)");
$ps->setfont("Courier", 10);

#-------------------------------------------------------------------------------
# Red example (left)

$ps->setcolour("red");
$ps->box(20, 210, 45, 260);
$ps->importepsfile("demo-square.eps", 20, 210, 45, 260);
$ps->setcolour("darkred");
$ps->text({rotate => -90}, 14, 270, '$ps->importepsfile("demo-square.eps", 20, 210, 45, 260);');

#-------------------------------------------------------------------------------
# Green example (centre)

$ps->setcolour("green");
$ps->box(80, 210, 105, 260);
$ps->importepsfile({stretch => 1}, "demo-square.eps", 80, 210, 105, 260);
$ps->setcolour("darkgreen");
$ps->text({rotate => -90}, 74, 270, '$ps->importepsfile({stretch => 1}, "demo-square.eps", 80, 210, 105, 260);');

#-------------------------------------------------------------------------------
# Blue example (right)

$ps->setcolour("blue");
$ps->box(140, 210, 165, 260);
$ps->importepsfile({overlap => 1}, "demo-square.eps", 140, 210, 165, 260);
$ps->setcolour("darkblue");
$ps->text({rotate => -90}, 134, 270, '$ps->importepsfile({overlap => 1}, "demo-square.eps", 140, 210, 165, 260);');

#-------------------------------------------------------------------------------
# Purple example (bottom)

$ps->setcolour(200, 0, 200);
$ps->box(30, 30, 90, 90);

$eps = new PostScript::Simple::EPS(file => "demo-square.eps", clip => 1);
$eps->scale(60/100);
$eps->translate(50, 50);
$eps->rotate(20);
$eps->translate(-50, -50);
$ps->importeps($eps, 30, 30);
$ps->setfont("Courier", 10);
$y = 90;
$ps->text(100, $y-=5, '$eps = new PostScript::Simple::EPS');
$ps->text(110, $y-=5, '(file => "demo-square.eps");');
$ps->text(100, $y-=5, '$eps->scale(60/100);');
$ps->text(100, $y-=5, '$eps->translate(50, 50);');
$ps->text(100, $y-=5, '$eps->rotate(20);');
$ps->text(100, $y-=5, '$eps->translate(-50, -50);');
$ps->text(100, $y-=5, '$ps->importeps($eps, 30, 30);');


################################################################################
# PAGE 2
################################################################################

# Create page (using generated EPS object)
mynewpage($ps, "EPS import functions (using internal EPS object)");
$ps->setfont("Courier", 10);

$ps->setcolour("red");
$ps->box(20, 210, 45, 260);
#$ps->importepsfile("demo-square.eps", 20, 210, 45, 260);
$directeps->reset();
$directeps->scale(25/$directeps->width());
$ps->importeps($directeps, 20, 210);
$ps->setcolour("darkred");
$ps->text({rotate => -60}, 30, 205, '$directeps->reset();');
$ps->text({rotate => -60}, 25, 205, '$directeps->scale(25/$directeps->width());');
$ps->text({rotate => -60}, 20, 205, '$ps->importeps($directeps, 20, 210);');

$ps->setcolour("green");
$ps->box(80, 210, 105, 260);
#$ps->importepsfile({stretch => 1}, "demo-square.eps", 80, 210, 105, 260);
$directeps->reset();
$directeps->scale(25/$directeps->width(), 50/$directeps->height());
$ps->importeps($directeps, 80, 210);
$ps->setcolour("darkgreen");
$ps->text({rotate => -60}, 90, 205, '$directeps->reset();');
$ps->text({rotate => -60}, 85, 205, '$directeps->scale(25/$directeps->width(), 50/$directeps->height());');
$ps->text({rotate => -60}, 80, 205, '$ps->importeps($directeps, 80, 210);');

$ps->setcolour("blue");
$ps->box(140, 210, 165, 260);
$directeps->reset();
$directeps->scale(50/$directeps->height());
$ps->importeps($directeps, 140, 210);
$ps->setcolour("darkblue");
$ps->text({rotate => -60}, 150, 205, '$directeps->reset();');
$ps->text({rotate => -60}, 145, 205, '$directeps->scale(50/$directeps->height());');
$ps->text({rotate => -60}, 140, 205, '$ps->importeps($directeps, 140, 210);');

$ps->setcolour(200, 0, 200);
$ps->box(30, 30, 90, 90);

$directeps->reset();
$directeps->translate(50, 50);
$directeps->rotate(20);
$directeps->translate(-50, -50);
$eps = new PostScript::Simple(eps => 1, xsize => 100, ysize => 100);
$eps->importeps($directeps, 0, 0);
$directeps = $eps->geteps();
$directeps->scale(60/100);
$ps->importeps($directeps, 30, 30);
$ps->setfont("Courier", 10);
$y = 80;
$ps->text(100, $y-=5, '$directeps->reset();');
$ps->text(100, $y-=5, '$directeps->translate(50, 50);');
$ps->text(100, $y-=5, '$directeps->rotate(20);');
$ps->text(100, $y-=5, '$directeps->translate(-50, -50);');
$ps->text(100, $y-=5, '# round-about way to set clipping path');
$ps->text(100, $y-=5, '$eps = new PostScript::Simple(eps => 1,');
$ps->text(110, $y-=5, 'xsize => 100, ysize => 100);');
$ps->text(100, $y-=5, '$eps->importeps($directeps, 0, 0);');
$ps->text(100, $y-=5, '$directeps = $eps->geteps();');
$ps->text(100, $y-=5, '$directeps->scale(60/100);');
$ps->text(100, $y-=5, '$ps->importeps($directeps, 30, 30);');


################################################################################
# PAGE 3
################################################################################

# Create page (using generated EPS object)
mynewpage($ps, "Using different units");
$ps->setfont("Courier", 10);

$ps->setcolour("red");
$ps->text(20, 268, '$ps->line(20,265, 190,265);  # default units is mm');
$ps->line(20,265, 190,265);

$ps->setcolour("blue");
$ps->text(20, 258, '$ps->setlinewidth("5 pt");');
$ps->text(20, 253, '$ps->line(20,255,  190,255);');
$ps->setlinewidth("5 pt");
$ps->line(20,250, 190,250);

$ps->setcolour("green");
$ps->text(20, 243, '$ps->setlinewidth([0.25, "in");');
$ps->text(20, 238, '$ps->line(20,232,  190,232);');
$ps->setlinewidth([0.25, "in"]);
$ps->line(20,232, 190,232);

$ps->setcolour("purple");
$ps->text(20, 224, '$ps->setlinewidth("thin");  # thin is 0.4 pt');
$ps->text(20, 219, '$ps->line(20,216,  190,216);');
$ps->setlinewidth("thin");
$ps->line(20,216, 190,216);

$y = 210;
for (my $x = 1; $x < 7; $x++) {
  $ps->setlinewidth([8, "dd"]);
  $ps->line([$x, "in"],$y, [$x+1, "in"],$y, 255/$x, 128, 128);
  $ps->setlinewidth("thin");
  $ps->line([$x, "in"],212, [$x, "in"],198, 0,0,0);
  $y -= 2;
}
$ps->line([7, "in"],212, [7, "in"],198, 0,0,0);

$y = 198;
$ps->text(20, $y-=5, '$y = 210;');
$ps->text(20, $y-=5, 'for (my $x = 1; $x < 7; $x++) {');
$ps->text(20, $y-=5, '  $ps->setlinewidth([8, "dd"]);');
$ps->text(20, $y-=5, '  $ps->line([$x, "in"],$y, [$x+1, "in"],$y, 255/$x, 128, 128);  # also set colour');
$ps->text(20, $y-=5, '  $ps->setlinewidth("thin");');
$ps->text(20, $y-=5, '  $ps->line([$x, "in"],212, [$x, "in"],198, 0,0,0);  # set black');
$ps->text(20, $y-=5, '  $y -= 2;');
$ps->text(20, $y-=5, '}');
$ps->text(20, $y-=5, '$ps->line([7, "in"],212, [7, "in"],198, 0,0,0);');


$ps->setlinewidth("15 pt");
$ps->circle(50, "4.5in", "1in");
$ps->setfont("Courier-Bold", 10);
$ps->setcolour("yellow");
$ps->circletext({align => "outside"}, 50, "4.5in", "0.96in", 90, '$ps->setlinewidth("10 pt"); $ps->circle(50, "4.5in", "2in");');
$ps->setcolour("darkred");
$ps->setfont("Courier", 8);
$ps->circletext({align => "outside"}, 50, "4.5in", "0.78in", 90, '$ps->circletext({align => "outside"}, 50, "4.5in", "0.96in", 90, "...");');

# Write out the document.
$ps->output("demo.ps");
                

sub mynewpage
{
  my $ps = shift;
  my $title = shift;

  $ps->newpage;
  $ps->box(10, 10, 200, 287);
  $ps->line(10, 277, 200, 277);
  $ps->setfont("Times-Roman", 14);
  $ps->text(15, 280, "PostScript::Simple example file: $title");
}