[lazarus] Printers unit

Michael Van Canneyt michael.vancanneyt at wisa.be
Tue Nov 5 09:41:10 EST 2002




On 5 Nov 2002, andrew johnson wrote:

> On Tue, 2002-11-05 at 01:38, Tony Maro wrote:
> > I've got a basic working printers unit.
> >
> > I've tried to make it as ready for real printer support as possible.
> > What I've done is added a TPostScriptCanvas object that handles most of
> > the Postscript work - not that there's a lot to do.  Unfortunately part
> > of it must be handled at the Printer object level (page separation, etc)
> > so I can't encapsulate all of the postscript generation in that object.
>
> Are you certain? I was fairly sure that Postscript supported multiple
> pages from the same file... with %%Page

AFAIK the showpage command takes care of this.
%%PAGE is for structured documents, so Ghostview and other PSUtils
can 'see' the different pages.

[cut]
>
> It's a start. Portions of this would be much easier on the interface
> side of things, but that would make things harder for Cross-Platform
> support. My Suggestion would be to write a third object. A TPostscript
> object encapsulating the Postscript calls. Not a translation, not
> anything. Pure Postscript calls. This way it would be easier later on to
> separate the Postscript code from your canvas and move it to the
> back-end of things.

I also think this is the way to go; I would put this object in the
FCL instead of the LCL, since it is OS-independent, and has nothing
visual about it.

If you can output the postscript to a stream, then everything should run
on any platform we support.


> > How can I (in Linux) stream the stringlist holding the postscript into
> > LPR directly?  Or must I go through a temp file?
> >
>
> I would suggest for now a temp file, but you could probably find a way
> to do it via stdin/stdout.

Use the TProcess object of the FCL:

With TProcess.Create(Self) do
  Try
    CommandLine:='/usr/bin/lpr -PPrintterName');
    options:=[poUsePipes];
    Execute;
    With InputStream do
      begin
      // Write postscript to stream.
      end;
  finally
    Free;
  end;

There is a process.txt which describes the object. The object will work
on linux/unix/windows.

As far as I know, lazarus uses this to call the compiler.

Michael.






More information about the Lazarus mailing list