質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

4回答

3099閲覧

ファイルを作成せずに、ブラウザにPDFを表示したい

DaraGuda

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/06/18 03:49

前提・実現したいこと

現在、PHP、PHPExcelを使用して、Excelのテンプレートへの書き込みと、書き込んだExcelファイルのpdfへの変換を行っています。
いままでは、一度PDFを作成し、そのPDFを表示する様にしていました。
この状態から、PDFファイルを作成せずに、ブラウザに表示するように変更したいです。

該当のソースコード

$book = new PHPExcel();
$sheet = $book->getActiveSheet();
$sheet->setCellValue('A1', 'テスト');

header('Content-Type: application/pdf');
header('Content-Disposition: inline;filename="output.pdf"');
header('Cache-Control: max-age=0');

$writer = PHPExcel_IOFactory::createWriter($book, 'Excel2007');
$writer->save('php://output');
exit;

上記を実行しても、
PDFドキュメントを開けませんでした
と表示されます。

Content-Type: application/pdf
の部分を、Content-Type: application/octet-stream
に変更してみたりなどしたのですが、
壊れたPdfがダウンロードされてしまいます。

どうにかできないでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

エクセルデータなら表示できるのでしょうか?
pdfはpdf用のツールを使うのが妥当では?

投稿2018/06/18 03:52

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

壊れたPdfがダウンロードされてしまいます。

ダウンロードされるのであれば、以前に保存できていた状態で保存したpdfファイルと現状で保存したpdfファイルをメモ帳で開いて比べてみることは可能なはずです。
(バイナリデータを含むファイルなので、文字情報として読めない部分はもちろんありますが、見た目で異なる部分は確認できるはずです。)

問題の切り分けが必要に感じます。
PDFファイルの出力は、以前も出来ていたという事なので、恐らく間違っていないのだと思います。
他の方も言っていますが、header()以前になにかしらの出力がある場合はheader()は正しく扱われません。BOM付きのphpが原因の場合もあります。
HTMLではなくファイルをレスポンスする場合は、出力をキャッシュするか、header()を出来る限り前方で宣言する事などが必要になってきます。

投稿2018/06/18 22:28

efcode

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

createWriter($book, 'Excel2007');だと、Excel2007形式、つまり、xlsxでの保存ですね。
'PDF'を指定してみればどうでしょうか。

投稿2018/06/18 04:21

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

壊れたpdfの冒頭にどんなバイナリーデータが含まれているか確認すれば、
対策も見つかりそうな気がします。

もしかして、header()や$writer->save('php://output');に至る途中で
なにか標準出力していたりしないでしょうか。
デバッグ出力しているのを忘れているとかで。

後処理が必要になりますが、
一時ファイルとしてurlでアクセス可能な場所にファイルを出力してみて
挙動が変わるかも点検すると良い気がします。

投稿2018/06/18 03:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問