2017-01-12 9 views
0

私はリモートサーバからpdfファイルを読み込み、pdfboxを使って分割し、その分割ファイルをローカルシステムに保存できますが、分割されたファイルをリモートサーバに保存することはできません。どのように私はpdfboxを使用してそれを行うことができます。 以下は、ローカルシステムでの分割のためのコードとセーブ分割さファイルで以下pdfファイルをリモートサーバに保存する

 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ファイルにあなたの分割さファイルを保存し、正しいタイプなど(私は、スタックトレースに表示されるものと、あなたがサーブレットをプログラミングしている) –

答えて

1

例外はあなたのコードに来ている場所です:

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

httpでこの方法でファイルを書き込むことはできません。あなたの 'outputpath'はファイルシステムではありません。あなたの最近の編集の前にこの質問を最初に投稿したとき、あなたの 'outputpath'はローカルファイルシステムでした。私はそれを試してもうまくいったと確信しています。あなたの問題を解決する最も簡単な方法は、ファイルをアップロードするリモートサーバーのネットワークファイル共有を作成することです。

書き込みまたはHTTP経由でファイルをアップロードするには、あなたが必要がある最初の事は、POSTリクエストを処理し実行しているサーバーです。代わりにApacheを実行している場合は、ファイルを受け入れるためにいくつかのservr-sideスクリプトが必要です。次に、バイト配列のpdf出力ファイルからバイトを取得し、それらのバイトをリモートストリームに書き込むことができます。

+0

であなたのHttpServletResponseの出力ストリームの一部として1つを返すことですええ、もし私がファイルシステムを使用して、それは正常に動作しています。解決していただきありがとうございます。私はそれを試してみます。 – codeHunter

関連する問題