You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by flyingscot <im...@sartorius.com> on 2006/09/06 10:52:43 UTC

NullPointerException while printing

Hello!

I have some problems embedding FOP 0.92b with an overridden Print-Renderer,
similar to the  ExampleFO2OldStylePrint.java example.

Her is my simplified sourcecode:

class printFO
{
    public static void main(String[] args)
    {
	try {
	    PrinterJob printerJob = PrinterJob.getPrinterJob();
	    PrintRenderer p_renderer = new PrintRenderer(printerJob);
	    
	    FopFactory fopFactory = FopFactory.newInstance();
	    FOUserAgent foUserAgent= fopFactory.newFOUserAgent();

	    foUserAgent.setRendererOverride(p_renderer);
	     
	    Fop fop= fopFactory.newFop(MimeConstants.MIME_FOP_PRINT, foUserAgent,
null);
	    File sourcefile=new File(args[0]);
	    String baseURL = null;
	    
	    baseURL = new File(sourcefile.getAbsolutePath()).
		getParentFile().toURL().toExternalForm();
	    
	    foUserAgent.setBaseURL(baseURL);

	    Result res = new SAXResult(fop.getDefaultHandler());

            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer;
            
	    transformer = factory.newTransformer();

            // Create a SAXSource from the input Source file
            Source src = new StreamSource(sourcefile);

            // Start XSLT transformation and FOP processing
            transformer.transform(src, res);
	} catch (Exception e) {
	e.printStackTrace();
	}	
    }
}

This program works fine until I do not refer external images. When I do so,
Java comes to a NullPointerException. Here my example FO-File:
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:svg="http://www.w3.org/2000/svg">
<fo:layout-master-set>
<fo:simple-page-master margin-bottom="0.5cm" margin-left="1.5cm"
margin-right="0.5cm" margin-top="1.1cm" master-name="A4"
page-height="29.7cm" page-width="21cm">
<fo:region-body column-count="1" column-gap="0.5cm" region-name="Layout"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="Layout">
  <fo:block>
    Test!
  </fo:block>
<fo:block>
  <fo:external-graphic
src="file:///home/iwedekind/Programmierung/Java/barcode.svg"/>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>

Processing this file the following Stack trace is printed:
java.lang.NullPointerException
        at
org.apache.fop.render.java2d.Java2DRenderer.putImage(Java2DRenderer.java:1033)
        at
org.apache.fop.render.java2d.Java2DRenderer.renderImage(Java2DRenderer.java:1018)
        at
org.apache.fop.render.AbstractRenderer.renderViewport(AbstractRenderer.java:739)
        at
org.apache.fop.render.java2d.Java2DRenderer.renderViewport(Java2DRenderer.java:407)
        at
org.apache.fop.render.AbstractRenderer.renderInlineArea(AbstractRenderer.java:634)
        at
org.apache.fop.render.AbstractRenderer.renderLineArea(AbstractRenderer.java:609)
        at
org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:535)
        at
org.apache.fop.render.AbstractRenderer.renderBlock(AbstractRenderer.java:585)
        at
org.apache.fop.render.AbstractRenderer.renderBlocks(AbstractRenderer.java:525)
        at
org.apache.fop.render.AbstractRenderer.renderFlow(AbstractRenderer.java:430)
        at
org.apache.fop.render.AbstractRenderer.renderMainReference(AbstractRenderer.java:409)
        at
org.apache.fop.render.AbstractRenderer.renderBodyRegion(AbstractRenderer.java:343)
        at
org.apache.fop.render.AbstractRenderer.renderRegionViewport(AbstractRenderer.java:288)
        at
org.apache.fop.render.AbstractRenderer.renderPageAreas(AbstractRenderer.java:261)
        at
org.apache.fop.render.java2d.Java2DRenderer.print(Java2DRenderer.java:1168)
        at sun.print.RasterPrinterJob.printPage(RasterPrinterJob.java:1785)
        at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1334)
        at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1196)
        at
org.apache.fop.render.print.PrintRenderer.stopRenderer(PrintRenderer.java:142)
        at
org.apache.fop.area.RenderPagesModel.endDocument(RenderPagesModel.java:240)
        at
org.apache.fop.area.AreaTreeHandler.endDocument(AreaTreeHandler.java:357)
        at
org.apache.fop.fo.FOTreeBuilder.endDocument(FOTreeBuilder.java:170)
        at
org.apache.xalan.transformer.TransformerIdentityImpl.endDocument(TransformerIdentityImpl.java:962)
        at org.apache.xerces.parsers.AbstractSAXParser.endDocument(Unknown
Source)
        at org.apache.xerces.impl.XMLDocumentScannerImpl.endEntity(Unknown
Source)
        at org.apache.xerces.impl.XMLEntityManager.endEntity(Unknown Source)
        at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
        at org.apache.xerces.impl.XMLEntityScanner.skipSpaces(Unknown
Source)
        at
org.apache.xerces.impl.XMLDocumentScannerImpl$TrailingMiscDispatcher.dispatch(Unknown
Source)
        at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at
org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
        at printFO.main(printFO.java:68)

When I commended out the line overriding the Renderer, then everythings is
ok (but I cannot control the PrinterJob, and so it is no solution).

Any suggestions to this problem?

CU Immo!

PS.: My main point is to direct the printer output to a special printer and
a special tray, so I need this PrinterJob instance. If you have an
alternative way to do so: please drop me a note!

-- 
View this message in context: http://www.nabble.com/NullPointerException-while-printing-tf2225561.html#a6167228
Sent from the FOP - Users forum at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org


Re: NullPointerException while printing

Posted by flyingscot <im...@sartorius.com>.


Jeremias Maerki-2 wrote:
> 
> That seems to be a bug in ExampleFO2OldStylePrint.java. If you
> instantiate the Renderer yourself, you also have to set the user agent.
> See additional line below. Sorry for the trouble.
> 
Thank you, it runs perfectly...



Jeremias Maerki-2 wrote:
> 
> Well, a better way would be support for the Java Printing System (JPS,
> available since J2SE 1.4). If you can make it work with the hint above,
> good. Otherwise, someone has to implement support for JPS first. It's
> on my personal list but I don't have much "fun time" left lately.
> 
> Jeremias Maerki
> 

I use the JPS in my application. The "old style" classes PrintJob have some
new methods (in Java 1.5) to set the Printer Services similar to the modern
JPS.

CU Immo!

-- 
View this message in context: http://www.nabble.com/NullPointerException-while-printing-tf2225561.html#a6262441
Sent from the FOP - Users forum at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org


Re: NullPointerException while printing

Posted by Jeremias Maerki <de...@jeremias-maerki.ch>.
That seems to be a bug in ExampleFO2OldStylePrint.java. If you
instantiate the Renderer yourself, you also have to set the user agent.
See additional line below. Sorry for the trouble.

On 06.09.2006 10:52:43 flyingscot wrote:
> 
> Hello!
> 
> I have some problems embedding FOP 0.92b with an overridden Print-Renderer,
> similar to the  ExampleFO2OldStylePrint.java example.
> 
> Her is my simplified sourcecode:
> 
> class printFO
> {
>     public static void main(String[] args)
>     {
> 	try {
> 	    PrinterJob printerJob = PrinterJob.getPrinterJob();
> 	    PrintRenderer p_renderer = new PrintRenderer(printerJob);
> 	    
> 	    FopFactory fopFactory = FopFactory.newInstance();
> 	    FOUserAgent foUserAgent= fopFactory.newFOUserAgent();
> 
> 	    foUserAgent.setRendererOverride(p_renderer);

            p_renderer.setUserAgent(foUserAgent);


> 	     
> 	    Fop fop= fopFactory.newFop(MimeConstants.MIME_FOP_PRINT, foUserAgent,
> null);
> 	    File sourcefile=new File(args[0]);
> 	    String baseURL = null;
> 	    
> 	    baseURL = new File(sourcefile.getAbsolutePath()).
> 		getParentFile().toURL().toExternalForm();
> 	    
> 	    foUserAgent.setBaseURL(baseURL);
> 
> 	    Result res = new SAXResult(fop.getDefaultHandler());
> 
>             TransformerFactory factory = TransformerFactory.newInstance();
>             Transformer transformer;
>             
> 	    transformer = factory.newTransformer();
> 
>             // Create a SAXSource from the input Source file
>             Source src = new StreamSource(sourcefile);
> 
>             // Start XSLT transformation and FOP processing
>             transformer.transform(src, res);
> 	} catch (Exception e) {
> 	e.printStackTrace();
> 	}	
>     }
> }

<snip/>

> PS.: My main point is to direct the printer output to a special printer and
> a special tray, so I need this PrinterJob instance. If you have an
> alternative way to do so: please drop me a note!

Well, a better way would be support for the Java Printing System (JPS,
available since J2SE 1.4). If you can make it work with the hint above,
good. Otherwise, someone has to implement support for JPS first. It's
on my personal list but I don't have much "fun time" left lately.


Jeremias Maerki


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org


Re: NullPointerException while printing

Posted by koenig <an...@gmatic.de>.

High,
I had the same problem. It seems I have solved the problem.
Replace foUserAgent.setRendererOverride(p_renderer) with
renderer.setUserAgent(foUserAgent). I hope your printjob is 
directed to the right printer.

Andrea


---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org