This is most likely not an easy one but here is the situation:
I have written a C# command line application which:
- creates a PDF using ITextSharp
- writes it to disk
- uses
Acrord32.exe(this is Acrobat Reader) viaSystem.Diagnostics.Processin order to silently print the generated PDF
If I build my solution and double click the pdfGen.exe, it works as expected. The PDF is created and printed.
Now, my app has to be deployed on a internal server with Windows Vista running IIS 7. This server has some PHP webapp running. And it will be called via PHP using shell_exec() so that the resulting PDF will be printed on the printer attached to the server.
So my PHP page looks basically like this:
shell_exec('/path/to/pdfGen.exe');
But here things go wrong. What happens is according to task manager etc.:
pdfGen.exestarts- the PDF is created
Acrord32.exestartspdfGen.exehangs forever (and so does the PHP script) and nothing is printed
I am pretty sure it is some permission related problem. I already gave IIS_IUSRS access to the default printer, and to the directory where Acrord32.exe is located. But still, no printing. However, if I start my pdfGen.exe manually it works.
Any idea what I am missing?
EDIT:
I am not bound to use Acrobat Reader in order to print the PDF. If there is another way in order to silently print the created PDF serverside, I would not mind at all.
Thanks all for your comments. Unfortunately this “php start printjob” thing was part of a larger project that was cancelled today because of, well… I dont know… political reasons. Guess the project is pretty much dead.
Anyway, I tried myself a few more times in the last days and could not get it to work with IIS. My solution that I implemented and tested already: remove IIS, install a XAMPP or WAMPP package with a local apache and PHP that runs with admin access rights.
This did the trick. I used
pclose(popen('...command...', 'r'));in PHP in order to start the.exeand so that PHP does not wait until the PDF is finished. It all worked great.Here is my C# code which starts the print job using Acrobat Reader
The first argument is the path to the PDF that should be printed, the second parameter is the absolute path to the
AcroRd32.exe.The only problem left was that
AcroRd32.exewas started, printed and never got closed again. So every printjob started a new instance ofAcroRd32.exe(I am using Acrobat Reader 9.0). So if you printed 10 times, 10 acrobat reader instances were created.What I did was starting the print job, then waiting X seconds, hoping that the printer was finished and then killing all
AcroRd32.exeinstances:This worked out quite well.
Note that the above (killing all
AcroRd32.exeand running PHP with admin privilegs) was only doable because: The whole thing is only used by one user at a time and has a very limited area of use.It should be used on a touchscreen application deployed at the clients POS. A salesman would use the PHP app in order to configure a product, and then PHP would call my .exe which would create and print a PDF in the background. The printed document is then handed to the client. So security etc. was not really a concern in this case.
If anyone has a solution in order to use it with IIS, I am still willing to accept it as an answer.