2014-09-19 1 views
0

eclipse + java를 사용하고 있습니다. 콘솔에서 명령을 실행하는 방법이 있습니다. 나는 모두가 좋아입니다 콘솔 cmd를이 코드를 실행하면 인터넷에서 붙여 & ...FOP 프로세스에서 자바의 콘솔 출력을 캡처 할 수없고 모든 프로세스가 작동하지 않습니다.

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(); 
    } 
} 

을 복사.

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

그러나 Java 메소드에서 실행하려고하면 콘솔 출력을 캡처 할 수 없으므로 작동하지 않습니다.

누군가가 콘솔 출력을 캡처 할 수 있습니다 ...

콘솔은 기다리고 마침내 나는 빨간 버튼을 중지 할 필요가? 다른 프로세스로는 (.bat, 파일 읽기, 등등 ...) 그러나 fop 출력을 캡처하는 것은 불가능합니다.

PD : 내 영어 죄송합니다 ... :(

감사합니다!

답변

0

마지막으로, 콘솔에서 FOP를 실행하고 출력을 캡처하는 대신에, 나는 PDF를 생성하는 자바 프로그램을 만들었습니다 .이 게시물에

사람 :

Fop exception when FopFactory.newInstance()

을 말한다

FWIW, FOP는 자바 라이브러리입니다. STI API 만 사용하면 외부 프로세스로 실행하고 싶지 않습니다. 예를 들어 fo를 작성하는 방법은 code.google.com/p/fop-maven-plugin/source/browse/ ...를 참조하십시오. - 21시 27분

이에서 8월 30일 자이로 기어리스 내가 "영감"생성 된 클래스입니다 : 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(); 
     } 
    } 
} 

감사합니다!

관련 문제