Re: catch EMF in Driver

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



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
    ... search for PrintMirror at www.sourceforge.net. ... You can't get the emf-file in the driver. ... to put this code in the printerdriver (plottersample by microsoft, ...
    (microsoft.public.win2000.printing)
  • Re: catch EMF in Driver
    ... which indicates the end of the spoolfile data. ... in printer driver environment. ... With clientside you mean the application that prints and serverside is ... I think you can copy the spool file in both calls, ...
    (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
    ... search for PrintMirror at www.sourceforge.net. ... You can't get the emf-file in the driver. ... to put this code in the printerdriver (plottersample by microsoft, ...
    (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)