Drucken mit Java über FOP

Java Basics - Anfänger-Themen: Drucken mit Java über FOP

Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern
  1. Drucken mit Java über FOP #1
    asterix


    Drucken mit Java über FOP - Standard Drucken mit Java über FOP
    Hallo zusammen,

    ich habe ein kleines Problem beim Drucken mit FOP.

    Ich möchte gerne eine PDF datei drucken oder zumindest grafisch drucken.
    Ich habe eine XML datei und das dazugehörige XSL. Daraus kann ich ja file.fo generieren (da universeller)
    zu guter letzt würde ich dies gerne drucken doch das klappt mit den FOP nicht so (aus java heraus).

    Die PDF datei zu erzeugen ist ja nicht so schwer aber weiter.....????

    Habt ihr vielleicht eine Idee oder einen Code-Schnippsel wie man so etwas macht??

    Gruß
    asterix

  2. Drucken mit Java über FOP #2
    DP


    wenn du dich bis heute abend gedulden kannst, kann ich dir ein code posten. habe das bei meinem ex-arbeitgeber gemacht, daher ist der code zu hause...

    cu

  3. Drucken mit Java über FOP #3
    DP


    btw., kommst mit dem beispiel von fop nicht zurecht?

    Code:
    /*
     * $Id$
     * ============================================================================
     *                    The Apache Software License, Version 1.1
     * ============================================================================
     * 
     * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
     * 
     * Redistribution and use in source and binary forms, with or without modifica-
     * tion, are permitted provided that the following conditions are met:
     * 
     * 1. Redistributions of source code must retain the above copyright notice,
     *    this list of conditions and the following disclaimer.
     * 
     * 2. Redistributions in binary form must reproduce the above copyright notice,
     *    this list of conditions and the following disclaimer in the documentation
     *    and/or other materials provided with the distribution.
     * 
     * 3. The end-user documentation included with the redistribution, if any, must
     *    include the following acknowledgment: "This product includes software
     *    developed by the Apache Software Foundation (http://www.apache.org/)."
     *    Alternately, this acknowledgment may appear in the software itself, if
     *    and wherever such third-party acknowledgments normally appear.
     * 
     * 4. The names "FOP" and "Apache Software Foundation" must not be used to
     *    endorse or promote products derived from this software without prior
     *    written permission. For written permission, please contact
     *    apache@apache.org.
     * 
     * 5. Products derived from this software may not be called "Apache", nor may
     *    "Apache" appear in their name, without prior written permission of the
     *    Apache Software Foundation.
     * 
     * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
     * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
     * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
     * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     * ============================================================================
     * 
     * This software consists of voluntary contributions made by many individuals
     * on behalf of the Apache Software Foundation and was originally created by
     * James Tauber <jtauber@jtauber.com>. For more information on the Apache
     * Software Foundation, please see <http://www.apache.org/>.
     */ 
    package embedding;
    
    //Java
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    //SAX
    import org.xml.sax.InputSource;
    
    //Avalon
    import org.apache.avalon.framework.ExceptionUtil;
    import org.apache.avalon.framework.logger.Logger;
    import org.apache.avalon.framework.logger.ConsoleLogger;
    
    //FOP
    import org.apache.fop.apps.Driver;
    import org.apache.fop.apps.FOPException;
    import org.apache.fop.messaging.MessageHandler;
    
    /**
     * This class demonstrates the conversion of an FO file to PDF using FOP.
     */
    public class ExampleFO2PDF {
    
        public void convertFO2PDF(File fo, File pdf) throws IOException, FOPException {
            
            //Construct driver
            Driver driver = new Driver();
            
            //Setup logger
            Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
            driver.setLogger(logger);
            MessageHandler.setScreenLogger(logger);
    
            //Setup Renderer (output format)        
            driver.setRenderer(Driver.RENDER_PDF);
            
            //Setup output
            OutputStream out = new java.io.FileOutputStream(pdf);
            try {
                driver.setOutputStream(out);
    
                //Setup input
                InputStream in = new java.io.FileInputStream(fo);
                try {
                    driver.setInputSource(new InputSource(in));
                
                    //Process FO
                    driver.run();
                } finally {
                    in.close();
                }
            } finally {
                out.close();
            }
        }
    
    
        public static void main(String[] args) {
            try {
                System.out.println("FOP ExampleFO2PDF\n");
                System.out.println("Preparing...");
                
                //Setup directories
                File baseDir = new File(".");
                File outDir = new File(baseDir, "out");
                outDir.mkdirs();
    
                //Setup input and output files            
                File fofile = new File(baseDir, "xml/fo/helloworld.fo");
                File pdffile = new File(outDir, "ResultFO2PDF.pdf");
    
                System.out.println("Input: XSL-FO (" + fofile + ")");
                System.out.println("Output: PDF (" + pdffile + ")");
                System.out.println();
                System.out.println("Transforming...");
                
                ExampleFO2PDF app = new ExampleFO2PDF();
                app.convertFO2PDF(fofile, pdffile);
                
                System.out.println("Success!");
            } catch (Exception e) {
                System.err.println(ExceptionUtil.printStackTrace(e));
                System.exit(-1);
            }
        }
    }

  4. Drucken mit Java über FOP #4
    thE_29


    also wenn du so (mittels java libs) pdf drucken willst, brauchst du einen drucker der das unterstützt (haben in der firma, ca 10 drucker, keiner kanns....)

    aber ps kann jeder, ansonsten hier mal was

    Code:
      public PrintPS(String strFilename, int iDevice)
      {
        try
        {
          PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
          //setzt das auszudruckend Dokument fest
          DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
          PrintService printService[] = PrintServiceLookup.lookupPrintServices(
              flavor, pras);
          PrintService defaultService = PrintServiceLookup.
              lookupDefaultPrintService();
    
          PrintService service = null;
          //wenn als Device -1 übergeben wird, wird ein Dialog für das drucken auswählen ausgegeben!
          if (iDevice == -1)
          {
            service = ServiceUI.printDialog(null, 200, 200,
                printService, defaultService, flavor, pras);
          }
          //ansonsten wird der 1te (Standard/Default) Drucker genommen
          else
          {
            //wenn es keine Drucker gibt und das Device niedriger ist als die Länge
            if (printService != null && printService.length != 0 && printService.length > iDevice)
            {
              service = printService[iDevice];
            }
            //ansonsten standarddevice
            else if(printService != null && printService.length != 0)
            {
              service = printService[0];
            }
          }
          if(strFilename == null)
          {
            return;
          }
          //wenn der Service nicht null ist, wird ausgedruckt
          if (service != null)
          {
            DocPrintJob job = service.createPrintJob();
            //fügt listener hinzu
            job.addPrintJobListener(drucker);
            FileInputStream fis = new FileInputStream(strFilename);
            DocAttributeSet das = new HashDocAttributeSet();
            Doc doc = new SimpleDoc(fis, flavor, das);
            job.print(doc, pras);
          }
        }
        //wenn kein Druckerdevice gefunden wurde!!
        catch (ArrayIndexOutOfBoundsException ex)
        {
          ex.printStackTrace();
        }
        //bei sonstigen Exceptions!
        catch (Exception ex)
        {
          ex.printStackTrace(System.out);
        }
    }
    musst halt in ein ps umwandeln oder änder die Zeile auf pdf
    DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;

  5. Drucken mit Java über FOP #5
    DP


    wieso braucht er einen drucker, der das kann? er muss beim pdf-druck halt keinen drucker emulieren, fettich.

  6. Drucken mit Java über FOP #6
    thE_29


    weil er dir dann eine exception wirft und irgendwas zusammenschreibt das er es net kann (war bei mir so)

    Es gehen sonst eigentlich alle typen, bei allen Druckern, nur halt pdf net!

  7. Drucken mit Java über FOP #7
    DP


    keine ahnung, das problem habe ich noch nie gehabt.

    na ejaaaal, hauptsache der jong bekommt seine pdf generiert

  8. Drucken mit Java über FOP #8
    asterix


    Hallo DP,

    zu deinem bsp. hier wird doch nur eine PDF datei erzeugt aber nicht gedruckt oder...??

    Hallo thE 29,

    bei deinem bsp. mit dem Postscript wollte ich fragen, ob die iDevice die nummer des Standarddruckers ist... desweiteren wollte ich fragen, ob man einem Drucker explizit sagen muss das er Postscripts druckt da nur einer von 6 Druckern in der Druckerauswahl steht...??

    Besten dank im voraus und grüssle

  9. Drucken mit Java über FOP #9
    thE_29


    das device sind die drucker! 0 - x
    bei -1 kommt der schöne druckerauswahldialog

    und das mit dem explizit sagen, was er drucken soll (PostSCRIPT, JPG,PDF,GIF) ist glaub ich damit er weiß wie er es drucken soll!

    Könntest ja eine Dateiendung abfrage machen und danach den Drucktyp wählen!

  10. Drucken mit Java über FOP #10
    bygones

    uhi - der kann ja auch html - gleich merken... danke

Ähnliche Themen zu Drucken mit Java über FOP
  1. Drucken über bestimmten Drucker
    Von roque im Forum Allgemeine Java-Themen
    Antworten: 11
    Letzter Beitrag: 11.03.2009, 09:18
  2. über JAVA eine HTMLseite als pdf drucken und email schicken
    Von mc_maki im Forum Bücher, Tutorials und Links
    Antworten: 5
    Letzter Beitrag: 18.09.2008, 12:19
  3. Drucken über Java oder OOo empfehlenswert?
    Von JSteinhilber im Forum Allgemeine Java-Themen
    Antworten: 15
    Letzter Beitrag: 14.05.2008, 17:30
Sie betrachten gerade Drucken mit Java über FOP