2017-02-07 11 views
0

PDFを含むサーバーからの応答があります。文字列のPDFコンテンツをJavaのファイルに書き込む方法は?

%PDF-1.4 
%???? 
9 0 obj 
%%EOF 

この文字列またはバイト配列を使用して、私はpdfファイルを作成する方法を以下に示すような何かが(真下短い編集されたバージョンを示しますか)?

私はすでに次を使用しようとしましたが、それは私が長い文字列であるコンソールのwholeStringは、%PDF-1.4から始まり、%% EOFで終わる見ることができるPDFファイルで空白のページ

OutputStream oos = new FileOutputStream("test.pdf"); 
oos.write(b); 

を示し。私も8192バイトを読み込み、書き込みしようとしました。それでも同じ結果:私はストリームを取得するためにEntityUtilsを使用しています

 byte[] buf = wholeString.getBytes(Charset.forName("UTF-8")); 

     OutputStream oos = new FileOutputStream(tpath); 

     InputStream is = new ByteArrayInputStream(buf); 
     int c = 0; 

     while ((c = is.read(buf, 0, buf.length)) > 0) { 
      System.out.println(); 
      oos.write(buf, 0, c); 
      oos.flush(); 
     } 

     oos.close(); 
     is.close(); 

String responseBody = EntityUtils.toString(httpResponse.getEntity(), Charset.forName("UTF-8")); 

変換された文字列は、その後、私は、ファイルに書き込みしようと別の方法に送信されます。 常にバイトとしてでてくるあなたのプログラムに入ってくる

byte[] entityBytes = EntityUtils.toByteArray(httpResponse.getEntity()); 
Files.write(Paths.get("test.pdf"), entityBytes); 

何か:

+0

はい。私は最後にoos.close()を持っています。 – Crusaderpyro

+3

サーバーからの応答がある場合は、バイト数があります。これらのバイトを文字列に変換してから、それを避けることができればバイトに変換してはなりません。それはバグを求めているだけです。 –

+2

ヘッダーは '%PDF-1.1 %¥± 'のようになります。これらの疑問符は、文字列に変換するときにバイトを破損していることを示しています。 –

答えて

2

コメントで議論した後、これはあなたの当面の問題を解決する必要があります。

プログラムの外部からバイトを取得していない場合は、フレームワークまたはライブラリのデコードが既に正しく行われていない可能性があります。あなたは、文字列を必要とする100%確信している

  1. がない限り、あなたは常に文字列に変換しないようにする必要があり、原則として注意してください。 (PDF、JSON、XMLは文字列ではなくバイトとして保存して解析する必要があります)

  2. バイトは実際に文字列を表します。バイトはPDFを表し、文字列ではないため、ここでは該当しません。
  3. バイトを文字列にデコードするために使用するエンコードを100%確信しています。 PDFはUTF-8文字列ではありません。
+0

@AaronそれはOPに応じて、サーバーからのデータがPDFではなく、XMLまたはJSONではないことがあると言っていました。私はあなたが絶対にしなければ、バイトを文字列に変換しないように私の提案でできるだけ重くしようとしています。 –

+0

私は彼が受け取っていた他の種類のデータが特にXMLとJSONであることを忘れていましたので、サーバーから受け取った文字列に変換するのは意味がありません。 – Aaron

+0

そうです。バイトから文字列への変換が問題を引き起こしていました! – Crusaderpyro

関連する問題