2016-12-16 5 views
0

URLからgzip pdfをダウンロードし、解凍してファイルに書き込もうとしています。それはほとんど動作しますが、現在私のコードの不一致から作られたpdfの一部の文字は実際のpdfです。私はメモ帳に両方のpdfを開いてこれをチェックしました。URLからファイルへのJava gzip pdf - 結果がマイナーな文字の不一致を示します

私は2つのpdfsからいくつかの短いテキストサンプルを提供します。私のコードから

「8 /qªMiUe°Ä[H`ðKíulýªäqvA®v8;xÒhÖßÚ²ýÆ¢OK $áýçpF[T1本当のPDFからのy $ 93

@! :

ƒ8/qªMiUe°Ä[H`ðKíulªäqvA®-V8;ŸÒhÖßÚ²¢OK $áçpF[T1の@のy $ '<3

は、ここに私のコードです:

public void readPDFfromURL(String urlStr) throws IOException { 
     URL myURL = new URL(urlStr); 
     HttpURLConnection urlCon = (HttpURLConnection) myURL.openConnection(); 
     urlCon.setRequestProperty("Accept-Encoding", "gzip"); 
     urlCon.setRequestProperty("Content-Type", "application/pdf"); 
     urlCon.setRequestMethod("GET"); 
     urlCon.setDoInput(true); 
     urlCon.connect(); 
     Reader reader; 
     if ("gzip".equals(urlCon.getContentEncoding())) { 
      reader = new InputStreamReader(new GZIPInputStream(urlCon.getInputStream())); 
     } 
     else { 
      reader = new InputStreamReader(urlCon.getInputStream()); 
     } 
     FileOutputStream fos = new FileOutputStream("document.pdf"); 
     int data = reader.read(); 
     while(data != -1) { 
      char c = (char) data; 
      fos.write(c); 
      data = reader.read(); 
     } 
     fos.close(); 
     reader.close(); 
    } 

私はPDFファイルを開くことができ、そしてそれは、ページの正確な量を持っていますが、ページがすべて空白です。

私の最初の考え、それが何を文字コードとは何かを得たかもしれないということです、私のJavaプロジェクトでは、いくつかの設定のような、のIntelliJなど

代わりに、私は実際にファイルにそれを置く必要はありません。 。ダウンロードするだけで別の場所にアップロードできます。しかし、pdfはどちらの場合でも動作するはずです。私は実際にそれが動作するかどうかを確認するために実際のファイルに入れています。

ありがとうございました!ここで

+2

文字のためだリーダーを、使用しないでください。バイトの入力ストリームを使用します。 – lexicore

+2

**バイナリストリームの 'Reader'を使用しないでください**(gzipから' char'へのランダムバイトのキャストは良いアイデアでしょうか?) –

+0

Lexicons or Boris、それを回答。 – mkl

答えて

0

は私の質問を解決し、私の新しい実装、次のとおりです。

public void readPDFfromURL(String urlStr) throws IOException { 
    URL myURL = new URL(urlStr); 
    HttpURLConnection urlCon = (HttpURLConnection) myURL.openConnection(); 
    urlCon.setRequestProperty("Accept-Encoding", "gzip"); 
    urlCon.setRequestProperty("Content-Type", "application/pdf"); 
    urlCon.setRequestMethod("GET"); 
    urlCon.setDoInput(true); 
    urlCon.connect(); 
    GZIPInputStream reader = new GZIPInputStream(urlCon.getInputStream()); 
    FileOutputStream fos = new FileOutputStream("document.pdf"); 
    byte[] buffer = new byte[1024]; 
    int len; 
    while((len = reader.read(buffer)) != -1){ 
     fos.write(buffer, 0, len); 
    } 
    fos.close(); 
    reader.close(); 
} 
関連する問題