2017-07-08 1 views
-2

HtmlUnitを使用してウェブサイトからpdfLinkをダウンロードするにはどうすればよいですか? HtmlClient.getPage()のデフォルトの戻り値はHtmlPageです。これはpdfファイルを処理しません。HtmlUnit:PDFリンクを保存

+0

downvoteの前に。これは同じユーザーのQ&Aでした。インターナショナルをブラウズして、これを行う方法をまとめているのに約20分かかりました。だから私はすぐに他の人に時間を節約するために共有することにしました。これのために私を落ち着かせるのはちょっと難しいですね。 – Jake

答えて

1

答えがHTMLファイルではない場合、HtmlClient.getPageはUnexpectedPageを返します。あなたは入力ストリームとしてpdfを入手して保存することができます。

private void grabPdf(String urlNow) 
{ 
    OutputStream outStream =null; 
    InputStream is = null; 
    try 
    { 
     if(urlNow.endsWith(".pdf")) 
     { 
      final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_45); 
      try 
      { 
       setWebClientOptions(webClient); 
       final UnexpectedPage pdfPage = webClient.getPage(urlNow); 
       is = pdfPage.getWebResponse().getContentAsStream(); 

       String fileName = "myfilename"; 
       fileName = fileName.replaceAll("[^A-Za-z0-9]", ""); 

       File targetFile = new File(outputPath + File.separator + fileName + ".pdf"); 
       outStream = new FileOutputStream(targetFile); 
       byte[] buffer = new byte[8 * 1024]; 
       int bytesRead; 
       while ((bytesRead = is.read(buffer)) != -1) 
       { 
        outStream.write(buffer, 0, bytesRead); 
       } 


      } 
      catch (Exception e) 
      { 
       NioLog.getLogger().error(e.getMessage(), e); 
      } 
      finally 
      { 
       webClient.close(); 
       if(null!=is) 
       { 
        is.close(); 
       } 
       if(null!=outStream) 
       { 
        outStream.close(); 
       } 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     NioLog.getLogger().error(e.getMessage(), e); 
    } 

} 

サイドノート。出力ストリームはtryブロック内でのみ初期化できるので、私はリソースを使ってtryを使用しませんでした。私は2つの方法にぶつかる可能性がありますが、それはプログラマが読むことが認知的に遅くなります。

関連する問題