#
# An example program which creates graph paper. Very simple, but shows the basics
# page creation, etc.
use Text::PDF::File;
use Text::PDF::Page;
use Text::PDF::Utils;
use Getopt::Std;
getopts('d:g:p:s:');
unless(defined $ARGV[0])
{
die <<'EOT';
GRAPH [-d size] [-g num] [-p num] [-s num] outfile
Generates graph paper as a PDF file to outfile.
-d size grid size in pts [8]
-g percent percentage black [100]
-p num primary (thick) lines every num lines [10]
-s num secondary (somewhat thick) lines every num lines [5]
EOT
}
$opt_d = 8 unless $opt_d;
$opt_g = 100 unless $opt_g;
$opt_g = 1. - $opt_g / 100.;
$opt_p = 10 unless defined $opt_p;
$opt_s = 5 unless defined $opt_s;
$pdf = Text::PDF::File->new;
$root = Text::PDF::Pages->new($pdf);
$root->proc_set("PDF");
$root->bbox(0, 0, 595, 840); # hardwired page size A4 (for this app.)
$page = Text::PDF::Page->new($pdf, $root);
# Now pretend to make a simple font:
# $font = Text::PDF::SFont->new($pdf, 'Helvetica', 'F0');
# $root->add_font($font);
# Use same principle for other fonts. Could use $page->add_font($font) just as well.
# OK Now put something on this exciting page!
# assume 58 pt margin
$max_x = int(479 / $opt_d) * $opt_d + 58;
$max_y = int(724 / $opt_d) * $opt_d + 58;
$page->add("$opt_g G ");
$i = 0;
$curx = 58;
while ($curx <= 537)
{
if ($opt_p and $i % $opt_p == 0)
{ $width = 1; }
elsif ($opt_s and $i % $opt_s == 0)
{ $width = .5; }
else
{ $width = .25; }
# No fancy interface for drawing. You create your own PDF code!
$page->add("$width w $curx 58 m $curx $max_y l S\n");
$curx += $opt_d;
$i++;
}
$i = 0;
$cury = 58;
while ($cury <= 782)
{
if ($opt_p and $i % $opt_p == 0)
{ $width = 1; }
elsif ($opt_s and $i % $opt_s == 0)
{ $width = .5; }
else
{ $width = .25; }
$page->add("$width w 58 $cury m $max_x $cury l S\n");
$cury += $opt_d;
$i++;
}
# Only now that something has been added can we mess with the content stream
$page->{' curstrm'}{'Filter'} = PDFArray(PDFName('FlateDecode'));
$pdf->out_file($ARGV[0]);