APIにアクセスして購入注文のPDFをダウンロード/表示しています。生のPDFデータを解析してPHPを使用してPDFを作成する
APIは、生のPDFデータと思われるものを返す開始されます。
%PDF-1.2
%����
4 0 obj
<<
/E 12282
/H [1239 144]
/L 12655
/Linearized 1
/N 1
/O 7
/T 12527
私がダウンロード可能PDFにこれを変換するか、ブラウザでPDFをレンダリングする方法を見つけるのに苦労しています。
私はPHPを使用していますが、応答をエコーしてみましたが、これは生のPDFを完全に表示します。
私はまた、エコーの前にヘッダを定義しようとしました:
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=purchase.pdf");
header("Content-Transfer-Encoding: binary");
これはダウンロードを生成しませんが、あなたがそれを開くと、私はエラー「PDF文書のロードに失敗しました」を得ます。
私はこれを行う方法を探しましたが、問題に近いものは見つかりませんでした。私はTCPDFのようなものでこの応答を解析する必要がありますか、何かが本当に明白でないのですか?
UPDATE:
は、以下のコードを使用して、私はこれをダウンロードした場合、それが開いている私が期待するように、私はまだブラウザでそれを提供することができない、サーバーにファイルを保存することができます。
$data = $results->body;
$destination = '../pos/'.$id.'.pdf';
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);
$filename = $id.'.pdf';
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/pdf");
header("Content-Transfer-Encoding: binary");
readfile($destination);
ドライブにバイナリストリームを保存するPHPコードを提供できますか?破損したバイナリPDFストリームのように見えます。例えば。保存時にストリームの最後に空白がないことを確認してください(PHPスクリプトをPHPスクリプトに閉じて 'file_put_content'を使用しないでください)。 'readfile($ destination)'の後に 'exit()'を追加してみてください。 – lubosdz