Re: catch EMF in Driver

Tech-Archive recommends: Fix windows errors by optimizing your registry



You have to look for the "end of file" record (a 0 length page record),
which indicates the end of the spoolfile data.

http://undocprint.printassociates.com/formats/winspool/spl

--
Christoph Lindemann
Undocumented Printing
http://undocprint.printassociates.com/


"Dieter" <dieter.riekert@xxxxxxxxxxx> wrote in message
news:ehlfu7$doc$00$1@xxxxxxxxxxxxxxxxxxxx
Hi Thomas,

sorry I don't know what the two functions are for.
(Copies
You have to ask Vivid Aravind, printmirror was developed by him.

When using ReadPrinter check the size of the read data with the size
of the generated spoolfile. I use this function too in a print processor
and there it reads too much data. But perhaps this problems won't occur
in printer driver environment.

Dieter


Hi Dieter

I'm trough now. I put some information (JobID etc) in the Devicestruct
that
I read later in DOCUMENTEVENT_ENDDOC. Because my Driver is based on
MS-Plotter thats all the I copied from your project.
Except ... I also did CreateWin2kcompatibleSplFile in
DOCUMENTEVENT_CREATEDCPRE. In that you have a PatchIAT and FixUpDevmode ?
What is this for ? The driver works on my machine but I may have to do
something special in other cases that I did'nt know until now. Thats why
I
ask.

Next weekend I will give ReadPrinter a try ( see answer from Christoph )

Thomas



Am Fri, 20 Oct 2006 07:48:43 +0200 schrieb Dieter:

Hi Dieter
Thanks a lot, if I can put the code in the printerdriver that should be
enough for me.
With clientside you mean the application that prints and serverside is
the
spooler which sends the data to the printer ?
Yes, with clientside I mean the address space of the printing
application. It's possible to show Dialogs and set breakpoints to debug
the client app (even in TMS environments). "Serverside" is called by the
spooler-process.

I did'nt found any really clear explanation of the printing process.
Sometime ago I wrote a device driver for my company and even in the
books
for that, they factor out printerdriver.

Good Luck

Dieter

Thomas

Am Thu, 19 Oct 2006 22:19:14 +0200 schrieb Dieter:

Hi Thomas,


I think you can copy the spool file in both calls, since the spooler
is configured not to delete the job (function
CreateWin2kcompatibleSplFile). The problem is to detect the name for
the spool file. Print Mirror uses a ExtEscape-Call to it's own driver
to get the jobid. In DOCUMENTEVENT_ENDDOCPOST the job has perhaps
finished and the driver is not alive any more (so leave it in
DOCUMENT_ENDDOC)
Be aware, that parts of the function are called on the client side
when printing (CREATEDC, STARTDOC, ...) and some on the server side
(SENDPAGE, ENDDOC, ...).
Perhaps you can read the EMF-File with ReadPrinter. In printprocessors
this works, but you have to open the printer in a special way. E.g.
for printer "Test" with job "4711" you have to call
OpenPrinter ("Test, Job 4711", ...)
but you have the same problem to get the jobid.

Dieter

Thomas Freudenreich schrieb:
Hi Dieter
Danke fuer die hilfreiche Antwort.
In the files I found you did the copying in DOCUMENTEVENT_ENDDOC not
DOCUMENTEVENT_ENDDOCPOST ? Should I change it to
DOCUMENTEVENT_ENDDOCPOST ?

And is there a totally different approach ? Maybe the EMF is
somewhere in
memory , that we did'nt need to copy files. What is BOOL ReadPrinter(
HANDLE hPrinter, // handle to printer object
LPVOID pBuf, // data buffer
DWORD cbBuf, // size of data buffer
LPDWORD pNoBytesRead // bytes received
);
doing ? I guess I saw somebody wroting that it gives you the EMF
Output.
But by reading the manual it seems to me that this has more the
meaning of
reading the physical printer ports ( Busy, Paper Out ...) ?

Thomas








Hi Thomas,

search for PrintMirror at www.sourceforge.net.

You can't get the emf-file in the driver. You have
to write a print processor (sample in ddk) or use the driver-UI
entry-points "DrvDocumentEvent" parameters DOCUMENTEVENT_ENDDOCPOST.
Look at printmirror. It uses emf-files this way.

Dieter

Thomas Freudenreich schrieb:
I've sucessfully wrote (sample) the code to copy the emf-Spoolfiles
away in
an printprocessor. Because I needed an modified printerdriver, too
I want
to put this code in the printerdriver ( plottersample by microsoft,
because
I need a kind of plotterdriver ). I thought a good place where
DrvEndDoc (
in the sample in page.c ) but in there the spoolfiles are not
finished
(size 0 if debug and look at the spooldirectory). Maybe
DrvSendPage. Or is
it impossible to get the emf-output in the printdriver itself ?

Thomas


.



Relevant Pages

  • Re: catch EMF in Driver
    ... if I can put the code in the printerdriver that should be ... with clientside I mean the address space of the printing application. ... I think you can copy the spool file in both calls, since the spooler is configured not to delete the job. ... Print Mirror uses a ExtEscape-Call to it's own driver to get the jobid. ...
    (microsoft.public.win2000.printing)
  • Re: catch EMF in Driver
    ... if I can put the code in the printerdriver that should be ... With clientside you mean the application that prints and serverside is the ... Sometime ago I wrote a device driver for my company and even in the books ... I think you can copy the spool file in both calls, ...
    (microsoft.public.win2000.printing)
  • Re: catch EMF in Driver
    ... You have to ask Vivid Aravind, printmirror was developed by him. ... in printer driver environment. ... Next weekend I will give ReadPrinter a try ... I think you can copy the spool file in both calls, since the spooler is configured not to delete the job. ...
    (microsoft.public.win2000.printing)
  • Re: catch EMF in Driver
    ... I think you can copy the spool file in both calls, since the spooler is configured not to delete the job (function CreateWin2kcompatibleSplFile). ... In DOCUMENTEVENT_ENDDOCPOST the job has perhaps finished and the driver is not alive any more ... Perhaps you can read the EMF-File with ReadPrinter. ...
    (microsoft.public.win2000.printing)
  • Re: catch EMF in Driver
    ... The driver works on my machine but I may have to do ... if I can put the code in the printerdriver that should be ... I think you can copy the spool file in both calls, ... the jobid. ...
    (microsoft.public.win2000.printing)