PDF::Writer - PDF writer abstraction layer


PDF-Writer documentation Contained in the PDF-Writer distribution.

Index


Code Index:

NAME

Top

PDF::Writer - PDF writer abstraction layer

VERSION

Top

This document describes version 0.05 of PDF::Writer, released Oct 25, 2005.

SYNOPSIS

Top

  use PDF::Writer;

  # Or, to explicitly specify a back-end ...
  use PDF::Writer 'pdflib';
  use PDF::Writer 'pdfapi2';
  use PDF::Writer 'mock';

  my $writer = PDF::Writer->new;

DESCRIPTION

Top

This is a generalized API that allows a module that generates PDFs to transparently target multiple backends without changing its code. The currently supported backends are:

* PDF::API2

Available from CPAN

* PDFlib (versions 3+)

Available from http;//www.pdflib.com. There is both a pay and free version. PDF::Writer will work with both, within their limitations. Please see the appropriate documentation for details.

* Mock

This allows modules that target PDF::Writer to write their tests against a mock interface. Please see PDF::Writer::mock for more information.

If both PDF::API2 and pdflib_pl are available, PDF::API2 is preferred. If neither is available, a run-time exception will be thrown. You must explicitly load the PDF::Writer::mock driver, if you wish to use it.

METHODS

Top

* new()

This acts as a factory, loading the appropriate PDF::Writer driver.

CODE COVERAGE

Top

We use Devel::Cover to test the code coverage of our tests. Below is the Devel::Cover report on this module's test suite.

AUTHORS

Top

Originally written by:

Autrijus Tang <autrijus@autrijus.org>

Currently maintained by:

Rob Kinyon <rob.kinyon@iinteractive.com>

Stevan Little <stevan.little@iinteractive.com>

Thanks to Infinity Interactive for generously donating our time.

COPYRIGHT

Top


PDF-Writer documentation Contained in the PDF-Writer distribution.

package PDF::Writer;

use strict;
use warnings;

our $VERSION = '0.06';

our $Backend;

sub import {
    my $class = shift;
    $Backend = shift if @_;
    require "PDF/Writer/$Backend.pm" if $Backend && $Backend eq 'mock';
}

sub new {
    my $class = shift;

    my $backend = $Backend || (
        eval { require PDF::API2; 1 } ? 'pdfapi2' :
        eval { require pdflib_pl; 1 } ? 'pdflib' : undef
    );

    if ($backend) {
        require "PDF/Writer/$backend.pm";
    }
    else {
        die "No supported PDF backends found!";
    }

    $class .= "::$backend";
    return $class->new(@_);
}

1;
__END__