2017-01-12 1 views
0

원격 서버에서 pdf 파일을 읽고, pdfbox를 사용하여 분할하고 분할 된 파일을 로컬 시스템에 저장할 수 있지만 분할 된 파일을 원격 서버에 저장할 수 없습니다. 어떻게하면 pdfbox를 사용하여 할 수 있습니다. 다음은 로컬 시스템의 분할에 대한 코드 및 저장 갈라 파일 아래pdf 문서를 원격 아파치 서버에 저장 pdfbox를 사용하여

 String urlPath = "http://localhost/input/"+pdfName; 
String outputPath = "http://localhost/output/"; 
URL url = new URL(urlPath); 
InputStream is = url.openStream(); 
document = new PDDocument(); 
try { 
    document = PDDocument.load(is); 
} catch (IOException e2) { 
    e2.printStackTrace(); 
} 

    List<PDDocument> listOfSplitPages = null; 
    Splitter splitter = new Splitter(); 
    splitter.setStartPage(splitStartPage); // split start page 
     splitter.setEndPage(splitPageNumber); // split start page 
     splitter.setSplitAtPage(splitPageNumber); 
     try { 
      listOfSplitPages = splitter.split(document); // splitting the document 
     } catch (Exception e1) { 
      e1.printStackTrace(); 
     } 
     Iterator<PDDocument> iterator = listOfSplitPages.listIterator(); 
     while(iterator.hasNext()){ 
      PDDocument pdfDocument = iterator.next(); 
      try{ 
       pd.save(new FileOutputStream(outputPath+"file1.pdf")); 
      } catch (Exception e){ 
       e.printStackTrace(); 
       System.out.println("Something went wrong with page \n Here is the error message" + e);     
      }    
     } 

     document.close(); 

인 스택 트레이스

java.io.FileNotFoundException: http:\localhost\Invoices\output\file1.pdf (The filename, directory name, or volume label syntax is incorrect) 
at java.io.FileOutputStream.open0(Native Method) 
at java.io.FileOutputStream.open(Unknown Source) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1118) 
at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1106) 
at Invoice.SplitPdfServlet.saveFileToRelavantFolder(SplitPdfServlet.java:174) 
at Invoice.SplitPdfServlet.splitPdfUsingPageNumber(SplitPdfServlet.java:127) 
at Invoice.SplitPdfServlet.doPost(SplitPdfServlet.java:81) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
+0

스택 트레이스를 보여주세요. 또한 'outputFileName'은 어떻게 정의되어 있습니까? – VHS

+0

@VHS 편집 내 코드 – codeHunter

+0

이 전체 질문은 PDFBox와 아무 관련이 없습니다. 파일을 전달하는 방법에 대한 오해입니다. 당신이 할 수있는 당신의 분할 된 파일을 zip 파일에 저장하고 올바른 형식 등 (HttpServletResponse 출력 스트림의 일부로 반환합니다. 스택 추적에서 볼 수있는 서블릿을 프로그래밍하고있다) –

답변

1

예외가 코드에서오고있는 곳은 다음과 같습니다

pd.save(new FileOutputStream(outputPath+"file1.pdf"));

http에이 방법으로 파일을 쓸 수 없습니다. '출력 경로'는 파일 시스템이 아닙니다. 최근 편집 전에이 질문을 처음 게시했을 때 'outputpath'는 로컬 파일 시스템이었습니다. 나는 당신이 그것으로 시도한 것이 효과가 있었을 것이라고 확신합니다. 문제를 해결하는 가장 쉬운 방법은 파일을 업로드하려는 원격 서버의 네트워크 파일 공유를 만드는 것입니다.

http를 통해 파일을 쓰거나 업로드하려면 가장 먼저 실행중인 서버가 POST 요청을 처리해야합니다. 대신 아파치를 사용하고 있다면, 파일을 받아들이 기 위해 servr-side 스크립팅이 필요합니다. 그런 다음 바이트 배열의 pdf 출력 파일에서 바이트를 가져 와서 원격 스트림에 쓸 수 있습니다.

+0

예, 파일 시스템을 사용하면 잘 작동합니다. 솔루션을 주셔서 감사합니다. 나는 그것을 시도 할 것입니다. – codeHunter