NAME
GSAPI - Perl extension for accessing GNU Ghostscript
SYNOPSIS
use GSAPI;
my $inst = GSAPI::new_instance();
GSAPI::init_with_args($inst);
GSAPI::run_string($inst, "12345679 9 mul pstack quit\n");
GSAPI::exit($inst);
GSAPI::delete_instance $inst;
ABSTRACT
GSAPI is an interface to GNU Ghostscript. It's mainly written to provide a simply interface to ghostscript that works under Win32 and Unix.
DESCRIPTION
GSAPI is a very simple interface to the GNU Ghostscript Interpreter API. This API allows you to use Ghostscript without calling an external program. It also provides to more control over any output.
Please read the current Ghostscript documentation for more details.
FUNCTIONS
revision
my($prod, $cpy, $rev, $revd) = GSAPI::revision();
Returns Product name, Copyright, Revision and Revision Date of the ghostscript release.
new_instance
my $inst = GSAPI::new_instance();
Returns the instance handle.
delete_instance
GSAPI::delete_instance($inst);
Destroys the instance.
set_stdio
GSAPI::set_stdio($inst, &stdin, &stdout, &stderr)
Sets the callbacks for ghostscript I/O stdin gets the maximum number of bytes to return on input and should return a string up to that length.
stdout/stderr gets the string passed and they should return the number of bytes written.
Example:
set_stdio $inst,
          sub { "\n" },
          sub { print STDOUT $_[0]; length $_[0] },
          sub { print STDERR $_[0]; lenngth $_[0] };
init_with_args
$rc = GSAPI::init_with_args($inst, @args)
Initializes the ghostscript library. @args is an array that contains the same strings you would use on the gs command line.
exit
$rc = GSPAI::exit($inst)
Calls gsapi_exit
run_string
$rc = GSAPI::run_string($inst, $string, [$user_errors ])
Calls gsapi_run_string_with_length(), executing the Postscript code in $string.
run_file
$rc = GSAPI::run_file($inst, $filename, [$user_errors])
Calls gsapi_run_file(), running the Postscript code in $filename.
run_string_begin
$rc = GSAPI::run_string_begin($inst, [$user_errors])
Calls gsapi_run_string_begin(), which gets the interpreter ready to run the Postscript code given via subsequent "run_string_continue" calls.
run_string_continue
$rc = GSAPI::run_string_continue($inst, $string, [$user_errors])
Calls gsapi_run_string_continue(), running the Postscript code in $string in the interpreter which has been prepared with "run_string_begin".
run_string_end
$rc = GSAPI::run_string_end($inst, [$user_errors])
Calls gsapi_run_string_end(), finishing the execution started in "run_string_begin".
set_display_callback
$rc = GSAPI::set_display_callback( $inst, &callback );
Sets the callback used for -sDEVICE=display.
Your callback should look like:
sub callback {
    my( $func, $handle, $device, @more ) = @_;
    ...
    return $rv;
}
The arguments are:
- $func
 - 
Name of the current callback. See below.
 - $handle
 - 
Value of
-dDeviceHandle=as passed to init_with_args. - $device
 - 
Opaque pointer to Ghostscript's internal device.
 - @more
 - 
Extra parameters. See below.
 
The callback function is called multiple times. What is happening is decided by $func.
- display_open
 - 
New device has been opened. First call.
 - display_presize
 - 
Allows you to accept or reject a size and/or format.
my( $width, $height, $raster, $format ) = @more;$widthwidth of the page. Note that this is different from the width of the image, if there is a bounding box defined.$heightis the height of the page.$rasteris the byte count of a row.$formatformat of the data. - display_size
 - 
Called when the page size is fixed.
my( $width, $height, $raster, $format ) = @more;Note that in the GSAPI, display_size() is called with a pointer (
pimage) to the raw data. However, because of how XS works, this data is only available to "display_sync" and "display_page". - display_sync
 - 
my( $pimage ) = @more;Called when a page is ready to be flushed. Note that
$pimagewill be a blank page, if this is called before "display_page". - display_page
 - 
Called when a page is ready to be shown.
my( $copies, $flush, $pimage ) = @more;$pimageis a string containing the raw image data. It's format is decided by-dDisplayFormatwhich you passed to "init_with_args".To get the start of a given row, you use
$rowN * $rasterwhere$rasterwas provided to "display_size".See
eg/imager.plfor an example of how to get the data. - display_preclose
 - 
Device is about to be closed.
 - display_close
 - 
Device has been closed. This is the last call for this device.
 
Please refer to the Ghostscript documentation and examples for more details.
TIEHANDLE
TIEHANDLE 'GSAPI', [ stdin => sub { getc STDIN }, ]
                    [ stdout => &stdout, ]
                    [ stderr => stderr, ]
                    [ args => [ arg1, arg2, ...], ]
                    [ user_errors => 0|1, ]
You may also tie a GSAPI instance to a file handle. This allows you to print your Postscript code as if to the gs command.
my $output = '';
tie *FH, "GSAPI", stdout => sub { $output .= $_[0]; length $_[0] },
                 args => [ "gsapi",
                           "-sDEVICE=pdfwrite",
                           "-dNOPAUSE",
                           "-dBATCH",
                           "-sPAPERSIZE=a4",
                           "-DSAFER",
                           "-sOutputFile=/dev/null",
                         ];
$output = '';
print FH "12345679 9 mul pstack quit\n";
close FH;
## $output will contain 111111111.
EXPORT
None by default.
SEE ALSO
http://pages.cs.wisc.edu/~ghost/doc/svn/Readme.htm
AUTHORS
Stefan Traby, <stefan@hello-penguin.com> Philip Gwyn, <gwyn-at-cpan.org>
COPYRIGHT AND LICENSE
Copyright 2008 by Philip Gwyn. Copyright 2003,2005 by Stefan Traby <stefan@hello-penguin.com>. Copyright (C) 2003,2005 by KW-Computer Ges.m.b.H Graz, Austria.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License 2.0 or any later version.
The main reason why this module is not available under dual license (Artistic/GPL) is simply the fact that GNU Gostscript is only available under GPL and not under Artistic License.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 417:
 =begin without a target?