问题
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:
- now you don't setup RedMon/Ghostscript in a way that converts incoming PostScript to an image format.
- 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:
- take the incoming PostScript as its input,
- call a Ghostscript commandline to convert input to the %imageformat% of your choice,
- 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 '-'!
来源:https://stackoverflow.com/questions/3311565/print-job-accepting-and-routing-software