簡體   English   中英

我無法在FOP流程中捕獲Java的控制台輸出,並且我的所有流程均無法正常運行

[英]I can't capture the console output from Java in FOP process and all my process it doesn't work

我正在使用Eclipse + Java。 我有一種從控制台執行指令的方法。 從互聯網復制並粘貼...

public void viewPDF(String cmd){

    try {

        Process p = Runtime.getRuntime().exec( cmd);

        BufferedReader in = new BufferedReader(  
                            new InputStreamReader(p.getInputStream()));  
        String line = null;  
        while ((line = in.readLine()) != null) {  
            System.out.println(line);  
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

如果我在控制台cmd中執行此代碼,則一切正常。

C:\fop-0.93\fop -xml C:\document.xml -xsl C:\document.xsl -pdf C:\document.pdf -d

但是,如果我嘗試從java方法執行,它將無法正常工作,因為我無法捕獲控制台輸出。

控制台正在等待,最后我需要按紅色按鈕停止...

有人可以捕獲控制台輸出嗎? 使用其他進程,我可以(.bat,讀取文件等),但是捕獲fop輸出是不可能的。

PD:對不起,我的英語... :(

謝謝!!!

最后,我制作了一個創建pdf的Java程序,而不是從控制台運行fop並捕獲其輸出。

這篇文章中的某人:

FopFactory.newInstance()時出現Fop異常

FWIW,FOP只是一個Java庫。 您不想將其作為外部進程執行,只需使用STI API。 例如,請參見code.google.com/p/fop-maven-plugin/source/browse / ...了解如何實現此目的的示例。 -陀螺儀無齒輪8月30日21:27

這是我創建的“啟發”類:D其他:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;

import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;

public class ConstructorFOP {

    private InputStream inputStream;

    public void xmlToPdf(String RUTA_XML, String RUTA_XSL, String RUTA_PDF) {

        try {
            System.out.println("Preparing...");

            // Setup directories
            File baseDir = new File("C:");
            File outDir = new File(baseDir, "out");
            outDir.mkdirs();

            File xmlfile = new File(RUTA_XML);
            File xsltfile = new File(RUTA_XSL);
            File pdffile = new File(RUTA_PDF);

            System.out.println("Input XML : " + xmlfile);
            System.out.println("Input XSL : " + xsltfile);
            System.out.println("OutputPDF : " + pdffile);
            System.out.println("");
            System.out.println("Transforming...");

            // configure fopFactory as desired
            final FopFactory fopFactory = FopFactory.newInstance();

            FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
            // configure foUserAgent as desired

            ByteArrayOutputStream out = new ByteArrayOutputStream();

            TransformerFactory tFactory = TransformerFactory.newInstance();

            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

            // Setup input
            Source src = new StreamSource(xmlfile);

            // Setup Transformer
            Source xsltSrc = new StreamSource(xsltfile);
            Transformer transformer = tFactory.newTransformer(xsltSrc);

            // Make sure the XSL transformation's result is piped through to FOP
            Result res = new SAXResult(fop.getDefaultHandler());
            transformer.transform(src, res);

            ByteArrayOutputStream baos = out;
            inputStream = new ByteArrayInputStream(baos.toByteArray());

            InputStreamAFile(pdffile, inputStream);
        } catch (FOPException e) {
            System.out.println("ERROR DOC 3");
            e.printStackTrace();
        } catch (TransformerConfigurationException e) {
            System.out.println("ERROR DOC 4");
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            System.out.println("ERROR DOC 5");
            e.printStackTrace();
        } catch (TransformerException e) {
            System.out.println("ERROR DOC 6");
            e.printStackTrace();
        }
    }

    public void InputStreamAFile(File pdffile, InputStream entrada) {
        try {
            OutputStream salida = new FileOutputStream(pdffile);
            byte[] buf = new byte[1024];// Actualizado me olvide del 1024
            int len;
            while ((len = entrada.read(buf)) > 0) {
                salida.write(buf, 0, len);
            }
            salida.close();
            entrada.close();
            System.out.println("Se realizo la conversion con exito");
        } catch (FileNotFoundException e) {
            System.out.println("ERROR DOC 1");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("ERROR DOC 2");
            e.printStackTrace();
        }
    }
}

謝謝!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM