Printing PDF files using Win32::OLE and Acrobat Exchange

D

Domenico Discepola

Hello. My goal is to print Adobe PDF files from a Perl script without any
user intervention. I have been experimenting with various methods and am
now trying to use Win32::OLE to control Adobe Acrobat Exchange (v5.0.5).
Please refer to the code below. I can create the acrobat object, open the
document and retrieve some information from the document. My problems are:

1. Although I make acrobat visible using the show method, only the
application becomes visible, not the document. How do I fix this?

2. What is the method to print the document once it has been opened? The
"PrintPagesEx" method produces an error "Win32::OLE 0.1701) error
0x80020003: "Member not found" in METHOD/PROPERTYGET "" at jps2.pl line 30".
I then tried to loop through the hash referenced by the $doc variable but no
output from the hash was printed.

3. As an aside, if someone can provide me with the class name for Acrobat
Reader (not Acrobat exchange, as I have coded below) that would be great (or
inform me how to find it). I am relatively inexperienced in the world of
OLE Automation so any hints would be helpful.


##############
#!perl
use strict;
use warnings;
use diagnostics;
use Win32::OLE;
use Win32::OLE::Const "Acrobat";
our $g_file_input = shift @ARGV;
die "Usage: $0 filename\n" unless $g_file_input;

sub process_main {
my $acrobat = Win32::OLE->new("AcroExch.App","Quit");
my $doc = Win32::OLE->new("AcroExch.PDDoc");
$doc->Open( ${g_file_input} ) or die("Could not open $g_file_input: $!\n");
$acrobat->show;
print "Title=",$doc->GetInfo("Title"),"\n\n";

#This does not work

#$doc->PrintPagesEx(1,5,2,'True','True','False','True','True','PDAllPages');

}

sub main {
print "PDF program\n";
&process_main();
print "Ending now\n";
}

&main();
exit 0;
###############
 
M

Matt Garrish

Domenico Discepola said:
3. As an aside, if someone can provide me with the class name for Acrobat
Reader (not Acrobat exchange, as I have coded below) that would be great (or
inform me how to find it). I am relatively inexperienced in the world of
OLE Automation so any hints would be helpful.

4.1 Differences Among the Acrobat Viewers

Acrobat supports all of the OLE automation methods
listed in this chapter.

The Acrobat Reader does not support OLE automation.


For more info: http://partners.adobe.com/asn/acrobat/docs/iacovr.pdf

(And I don't have Exchange, so I can't help you with the rest.)

Matt
 
D

Domenico Discepola

Matt Garrish said:
Acrobat supports all of the OLE automation methods
listed in this chapter.

The Acrobat Reader does not support OLE automation.


For more info: http://partners.adobe.com/asn/acrobat/docs/iacovr.pdf

Success! Here is the code that opens up and prints a PDF using Win32::OLE
and Acrobat Exchange (v5.0.5 is the version I have). Thanks for the link to
Acrobat Exchange's OLE Objects and Methods. Too bad that Acrobat Reader
doesn't support OLE automation - I'm sure more people could have benefited
from this.

######################
#!perl
use strict;
use warnings;
use diagnostics;
use Win32::OLE;
use Win32::OLE::Const "Acrobat";
our $g_file_input = shift @ARGV;
die "Usage: $0 filename\n" unless $g_file_input;

sub process_main {
my $acrobat = Win32::OLE->new("AcroExch.App", "Quit");
my $avdoc = Win32::OLE->new("AcroExch.AVDoc");
$avdoc->Open( $g_file_input, "" );
my $pddoc = Win32::OLE->new("AcroExch.PDDoc");
$pddoc->Open( $g_file_input);
my $pp = $pddoc->GetNumPages; #index starts at 0
if ( $pp ) {
$pp--;
}
print "Num pages: $pp\n";
$avdoc->PrintPagesSilent(0,$pp,1,1,0);
$acrobat->Exit;
}

sub main {
print "PDF program\n";
&process_main();
print "Ending now\n";
}

&main();
exit 0;
 

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

Members online

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top