"template, report and xmlData are supposed to be parameters passed to the method. did I not do that correctly?"
You did, but then you also defined them as part of the class definition, outside the method, which makes them object properties.
"or when I try to add arguments I get the error:
"'can't convert arg to object'"
That's because the generatePdfReport method expects to be passed three Java objects as parameters. This is totally possible with Inline::Java, but generally speaking I find it much easier to pass plain old strings back and forth over the language barrier.
In your case, the FileInputStream and FileOutputStream objects can easily be constructed from a filename (i.e. a string), so it certainly makes a lot of sense to pass them into the method as plain old strings instead of instantiating InputStream/OutputStream objects at the Perl end and passing them in.
Anyway, this is how I'd do it...
#!/usr/bin/perl use strict; use warnings; BEGIN { $ENV{CLASSPATH}='.:/usr/share/java/*:/the paths to the jars used/' +; } use Inline Java => <<'END', CLASSPATH => $ENV{CLASSPATH}; import java.datasource.dom4j.Dom4jDataSource; import java.xmlreport.ProcessPdf; import java.xmlreport.ProcessReport; import java.io.InputStream; import java.io.OutputStream; import org.dom4j.Element; public class PdfReportGenerator { public static void generatePdfReport( String template_filename, String report_filename, String xmlData_filename ) throws Exception { // This function gets passed its parameters as strings // (makes it easier to call from Perl), so turn them into // InputStream and OutputStream objects. InputStream template = new FileInputStream(template_filename); OuputStream report = new FileOutputStream(report_filename); InputStream xmlData = new FileInputStream(xmlData_filename); ProcessReport.init(); // create the report. ProcessPdf proc = new ProcessPdf(template, report); proc.processSetup(); proc.processData(new Dom4jDataSource(xmlData), ""); proc.processComplete(); } } END my $generator = PdfReportGenerator->new; $generator->generatePdfReport( "/path/template.docx", "/path/report.pdf", "/path/datasource.xml", );
This is obviously untested, as I don't have the required Java libraries on this system. But, based on my fairly limited experience of Inline::Java, I think it ought to work (or at least be close to working).
In reply to Re^3: inline::java error
by tobyink
in thread inline::java error
by cliffrubinmusic
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |