PDF printing in C# ?

C

cybertof

Hello,

Is there a way to easily print a .pdf file to the printer ?
(without an external component)


Thanks.
 
A

Anders Eriksson

Hello,

Is there a way to easily print a .pdf file to the printer ?
(without an external component)
I would say No!

The only way I have made it print is using Acrobat Reader or Ghostscript
gsprint and then starting it via System.Diagnostics.Process

If your application is commercial then Acrobat Reader is your only choice,
unless you sell a million copies of it...

The really hard way would of cause be to create a .NET component that
prints PDF... If you do, PLEASE let me know!!!

// Anders
 
C

cybertof

The only way I have made it print is using Acrobat Reader or Ghostscript
gsprint and then starting it via System.Diagnostics.Process

Hi !

Yes but I don't think Acrobat Reader exposes a robust COM interface to
do it.

It is possible to do it through a shell call like :

acrord32.exe /h /p d:\test.pdf

But :
- it makes acrobat reader appear
- it does not close at the end


Any idea to do it properly (not appear and closing at the end) ?


Regards,
Cybertof.
 
S

Shakir Hussain

You can close acrobot after printing by using System.Windows.Forms.SendKeys
class. You have to send ALT+F4 to close the app.

However, you have to check the printer queue first to ensure that printing
is completed before closing it..

Shak.
 
M

Mark Rae

The iTextSharp is a very nice Library, but I haven't seen anyone using it
for printing.

That's because it doesn't work...
If you know how to do it then _PLEASE_ let us know!!

Yep, I'll eat my hat, as we say here in Blighty... :)
 
J

Javier Ros Moreno

hi,

I´m using this for print the .pdf files:

acrord32.exe /h /p d:\mypdf.pdf

but I´m getting some errors.

In my case, I´m printing several files, 100, 150, 200, ...
I have a list of pdf files, and for each pdf I execute the command:

acrord32.exe /h /p d:\mypdfX.pdf

The error is the following: acrobat print the documents in other order
than I have executed, and don´t print some documents ...

Any ideas?

PD: sorry, my inglish is very poor.
 
A

Anders Eriksson

Hello Javier,

In my case, I´m printing several files, 100, 150, 200, ...
I have a list of pdf files, and for each pdf I execute the command:

acrord32.exe /h /p d:\mypdfX.pdf

The error is the following: acrobat print the documents in other order
than I have executed, and don´t print some documents ...

Any ideas?

The problem is that Adobe has change the behavior of Acrobat Reader! If you
are using a version later than 4.0 then the /p flag is not performed.

Acrobat will 'never' exit and is reused for the next document you print.
Only one document can be printed at a time. This explains the error that
some documents are not printed. Your command to print is executed when
Acrobat is busy printing and your command is ignored!

The reason for that the documents are printed in a different order on the
printer than you have executed the commands is that you are using a print
queue (which is the normal way of printing in Windows). You are not
printing directly to the printer just to the print queue and then the print
queue will send the documents to the printer, in the order that the print
queue thinks is appropriate.

The only way I have gotten this to work is to use iTextSharp to merge all
the documents into one big document that has all pages in the correct order
and then print this AllInOne document.

I have created a .net Assembly that I can include in any .net project, but
since I did this for the company I work for I need to check with the bosses
if I can share it.

It's really simple to create it yourself. Just go to iTextSharps site and
download the library and the source. then check the sample on merging
pdf-documents...
http://itextsharp.sourceforge.net/
PD: sorry, my inglish is very poor.
su inglés es mucho mejor que mi español ;-)


// Anders
 
J

Javier Ros Moreno

Anders, I had tryed to merge these document into one big document but
iTextSharp don´t support encrypted documents, my pdf documents are
encryted.

Thanks.
 
A

Anders Eriksson

Anders, I had tryed to merge these document into one big document but
iTextSharp don´t support encrypted documents, my pdf documents are
encryted.
OK, then there are one thing that you might do. This depends on the license
of your application.

I'm sure you have heard of Ghostscript. Well there is a utility program
that comes with Ghostscript called gsprint. Using gsprint instead of
Acrobat Reader will do everything you want.

gsprint will end when the printing is done so you can use
System.Diagnostics.Process to start gsprint and then use
Process::WaitForExit(); to wait until the printing is done.

This way you will get all documents printed in order!

The only problem is that to be able to use gsprint/Ghostscript your
application has to be released under the GPL License or you need to buy a
license from Artifex Software, Inc. and the license cost from 20000$ and up

// Anders
 
Joined
Feb 8, 2008
Messages
1
Reaction score
0
I FINALLY found an answer to this mystery

Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe";
proc.StartInfo.Arguments = @"/p /h C:\Documents and Settings\brendal\Desktop\Test.pdf";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();

for (int i = 0; i < 5; i++)
{
if (!proc.HasExited)
{
proc.Refresh();
Thread.Sleep(2000);
}
else
break;
}
if (!proc.HasExited)
{
proc.CloseMainWindow();
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top