Hi,

What i use for this is the PipedInputStream and PipedOutputStream.

By Szeak

2017-12-14 09:18 keltezéssel, Normen Ruhrus írta:

Hello everyone,

 

for some older printers we use the FOP direct printing via the PageableRenderer. Usually we use PostScript printing and there we do not stream directly to the printer but make the transformation via an ByteArrayOutputStream to a byte array.

This is possible because the created printouts are quite small so there is no issue with large data and additionally it gets us better traceability for problems cause we can better differntiate between FOP issues and Windows Printer issues.

 

The question is if there is a way to direct print to a ByteArrayOutputstream also, or if there is some similar way of doing this. Below i have put in our Print Postscript Function that wroks the way we want to handle direct printing, too.

 

We use FOP2.0 on Tomcat 8.0 on Windows Server 2012 R2 with Java 8.

 

Thanks a lot for any help; it is greatly appreciated!

 

Normen

 

 

    public void printPS(String xml, String xslt, String printer)

             throws Exception

    {

       try

       {

             C_Tools.log("Entering printPS().",LogLevel.DEBUG);

            

             // configure fopFactory as desired

               FopFactory fopFactory = getInstance().getFopFactory();

               C_Tools.log("FOP Factory set.",LogLevel.DEBUG);

              

               ByteArrayOutputStream out = new ByteArrayOutputStream();

               C_Tools.log("Buffer set.",LogLevel.DEBUG);

              

               FOUserAgent userAgent = fopFactory.newFOUserAgent();

               userAgent.getEventBroadcaster().addEventListener(new FOPEventListener(versionFOP));

               C_Tools.log("User Agent and EventListener set.",LogLevel.DEBUG);

              

               // Construct FOP with desired output format

               Fop fop = fopFactory.newFop(MimeConstants.MIME_POSTSCRIPT, userAgent, out);       

               C_Tools.log("FOP Object created.",LogLevel.DEBUG);

              

               TransformerFactory factory = TransformerFactory.newInstance();

               Transformer transformer = factory.newTransformer(new StreamSource(new StringReader(xslt)));

               C_Tools.log("XSLT (" + xslt.length() + " bytes) set up.",LogLevel.DEBUG);

              

               try

               {

                    transformer.setErrorListener(getErrorListener());

                    C_Tools.log("Transformer Error Listener set.",LogLevel.DEBUG);

               }

               catch (Exception ex)

               {

                    C_Tools.log("C_Render_FOP_2_0.printPS().setErrorListener():" + ex.getMessage(),LogLevel.ERROR);

 

                    StackTraceElement[] stack = ex.getStackTrace();

                   for (int y=0 ; y < stack.length; y++)

                   {

                       C_Tools.log("C_Render_FOP_2_0.printPS().setErrorListener()." + renderer.toString() + "["+(y+1)+"/"+stack.length+"]:" + stack[y].toString(), LogLevel.ERROR);

                   }

               }

              

               // Setup input stream

               Source src = new StreamSource(new StringReader(xml));

               C_Tools.log("XML (" + xml.length() + " bytes) set up.",LogLevel.DEBUG);

              

               // Resulting SAX events (the generated FO) must be piped through to FOP

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

               C_Tools.log("SAX Result Object created.",LogLevel.DEBUG);

              

               // Start XSLT transformation and FOP processing

               transformer.transform(src, result);

               C_Tools.log("Transformation completed.",LogLevel.DEBUG);

              

               out.flush();

              

               //Set up DocPrintJob instance

               DocPrintJob printJob = C_Renderer.createDocPrintJob(printer);       

               Doc doc = new SimpleDoc(out.toByteArray(), DocFlavor.BYTE_ARRAY.AUTOSENSE, null);

               C_Tools.log("Print Job and Document set.",LogLevel.DEBUG);

              

               printJob.print(doc, null);

               C_Tools.log("Document printed.",LogLevel.DEBUG);

              

               out.close();

           }

           catch(Throwable e)

           {

                    C_Tools.log("C_Render_FOP_2_0.printPS(" + e.getClass().getName() + "):" + e.getMessage(), LogLevel.ERROR);

                   

                    StackTraceElement[] stack = e.getStackTrace();

            for (int y=0 ; y<stack.length; y++)

            {

                C_Tools.log("C_Render_FOP_2_0.printPS()." + renderer.toString() + "["+(y+1)+"/"+stack.length+"]:" + stack[y].toString(), LogLevel.ERROR);

            }

              

               throw new Exception(e);

           }

    }


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

Reply via email to