Print Job Accepting and routing Software

2019-08-17 06:59发布

问题:

I want to create a software which can accept Print Jobs from other computers, and then route those print jobs to PCs on LAN with printers attached.

How it's going to happen -> 1- When that software called "Virtual Printer" is installed on a computer "X", Windows should think that it is a print driver/attached printer to that computer. 2- Then administrator of that PC goes to "Devices and Printers" in windows and select the "Virtual Printer", right click and view properties and select the check box "Share this printer" 3- Now other PCs on the LAN can see that there is a shared printer call "Virtual printer" in the LAN connected to the computer "X" 4- So they can send print jobs to this "Virtual Printer", by selecting "Virtual Printer" when they need to print something.

How can I write this program (possibly c#) to Appear itself as a printer to the Windows, and then Accept incoming print jobs and send them to desired computers with printers attached.

I don't have any idea how to code this thing, and I don't have knowledge either, please help me with some resources, codes or sample projects or at least samples similar to this. Thanks

回答1:

Looking back at my first answer in the light of your original question, I do no longer understand why I put so much emphasize on a "convert incoming job to an image"-stage. Probably because you had mentioned in one of your answers that you wanted a functionality similar to imageprinter.

Anyway, since you now made clear that your main goal is to forward all incoming jobs to other computers (which have the real printers installed) -- this can also be achieved with:

  • a print queue with a PostScript driver
  • Ghostscript
  • RedMon as port monitor for the print queue
  • a DOS batch script

The difference now is twofold:

  1. now you don't setup RedMon/Ghostscript in a way that converts incoming PostScript to an image format.
  2. now you setup RedMon to run Ghostscript in a way that routes the job through the real target queue 'sharedprintername' at 'remotecomputer' (including real driver).

The Ghostscript command would be similar to:

  gswin32c.exe ^
   -dNOPAUSE ^
   -dBATCH ^
   -dQUIET ^
   -sDEVICE=mswinpr2 ^
   -dNoCancel ^
   -sOutputFile="%%printer%%\\remotecomputer\sharedprintername" ^
   -        ### <-- note this '-' !


回答2:

There is a commercial component that allows you to create virtual printers in windows. See http://www.colorpilot.com/emfprinterpilot.html



回答3:

This can be done combining four ingredients in the right way:

  • a print queue setup with a PostScript printer driver, shared on the LAN;
  • Ghostscript (scroll down for fetching gs871w{32,64}.exe) to convert PostScript to image;
  • RedMon (download redmon17.zip) to serve as the 'printer port monitor';
  • a DOS batch file (or a C# program if you want) to do exactly what you want;

The printqueue will be using the 'Redirector Port Monitor' (RedMon) to channel the incoming PostScript jobs to a program/application/batchscript of your choice.

What's left to do is your job: write a simple program/application/batchscript which does three things:

  1. take the incoming PostScript as its input,
  2. call a Ghostscript commandline to convert input to the %imageformat% of your choice,
  3. and finally send the %imageformat% as jobs to a printer of your choice.

Here is a document that describes some of the basic need-to-know things regarding RedMon:

  • http://pages.cs.wisc.edu/~ghost/redmon/en/redmon.htm

If you are a newbie to Ghostscript, you'll probably have the biggest problem with constructing a commandline that would do what you neeed. Here are some examples.

The first one converts data arriving at standard input (stdin, - at the end of the command) into single-page, black+white TIFF G4, with a resolution of 600dpi, where each page is a separate file, named page_001.tif, page_002.tif, etc.:

gswin32c ^
   -dBATCH ^
   -dNOPAUSE ^
   -dSAFER ^
   -sDEVICE=tiffg4 ^
   -r600x600 ^
   -sOutputFile=c:/path/to/output/page_%03d.tif ^
   -       ### <-- note this '-'!

Here is a Ghostscript commandline which would generate the same output, but this time as one single multi-page TIFF G4:

gswin32c ^
   -dBATCH ^
   -dNOPAUSE ^
   -dSAFER ^
   -sDEVICE=tiffg4 ^
   -r600x600 ^
   -sOutputFile=c:/path/to/output/multi_page_g4.tif ^
   -       ### <-- note this '-'!

Oh, you don't want black+white G4 TIFF, but colored TIFF, 32-bit CMYK? OK, use a different output device for Ghostscript:

gswin32c ^
   -dBATCH ^
   -dNOPAUSE ^
   -dSAFER ^
   -sDEVICE=tiff32nc^
   -r600x600 ^
   -sOutputFile=c:/path/to/output/multi_page_color.tif ^
   -       ### <-- note this '-'!

You want JPEG? Sorry, there is no such thing as multi-page JPEG. But single-page no problem:

set outputname=some-uniq-name && ^
gswin32c ^
   -dBATCH ^
   -dNOPAUSE ^
   -dSAFER ^
   -sDEVICE=jpeg ^
   -dJPEGQ=95 ^
   -r600x600 ^
   -sOutputFile=c:/path/to/output/%outputname%-page_%03d.jpeg ^
   -       ### <-- note this '-'!