The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use Test::Simple tests => 7;

use Text::PDF::File;
use Text::PDF::Page;        # pulls in Pages
use Text::PDF::Utils;       # not strictly needed
use Text::PDF::SFont;

my ($testpdf) = 't/temp.pdf';
my ($testdata) = 'BT 1 0 0 1 250 600 Tm /F0 14 Tf (Hello World!) Tj ET';

unlink($testpdf);
ok(!(-f $testpdf), 'verify pdf does not pre-exist');

# Create a Hello world PDF

my ($pdf, $root, $page, $font);

$pdf = Text::PDF::File->new;            # Make up a new document
$root = Text::PDF::Pages->new($pdf);    # Make a page tree in the document
$root->proc_set("PDF", "Text");         # Say that all pages have PDF and Text instructions
$root->bbox(0, 0, 595, 840);            # hardwired page size A4 (for this app.) for all pages
$page = Text::PDF::Page->new($pdf, $root);      # Make a new page in the tree

$font = Text::PDF::SFont->new($pdf, 'Helvetica', 'F0');     # Make a new font in the document
$root->add_font($font);                                     # Tell all pages about the font

$page->add($testdata);        # put some content on the page
$pdf->out_file($testpdf);   # output the document to a file
$pdf->release;

ok(-f $testpdf, "write temporary file $testpdf");

# Now try to read the PDF

my ($file, $offset, $res, $str);

$file = Text::PDF::File->open($testpdf);
ok($file, 'open pdf');
$offset = $file->locate_obj(5, 0);
ok($offset, 'find object');
seek($file->{' INFILE'}, $offset, 0);
($res, $str) = $file->readval("");
ok(defined($res->{' stream'}), 'got stream');
my ($data) = $res->read_stream(1)->{' stream'};
$file->release;
$data =~ s/\s+$//;
ok( $data eq $testdata, 'correct content');

# Finally make sure we can delete the PDF

unlink($testpdf);
ok(!(-f $testpdf), "delete temporary file $testpdf");

# all done!