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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

6554閲覧

サーバー側に作成した複数のPDFファイルをクライアント側にダウンロードさせ、その後も処理を実行したい

YukiTakahashi08

総合スコア6

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2015/03/28 04:20

サーバー側に作成した複数のPDFファイルをクライアント側にダウンロードさせたいと思っております。

「システムの概要」
ブラウザ画面上に表示した商品一覧から「送り状」「納品書」を作成したい商品を選択し、実行ボタンをクリックすることで、「送り状」「納品書」をPDFで作成し、クライアント側に自動でダウンロードされ、選択した商品は画面上消すという仕組みを考えております。物流発送現場での使用のため、検品しながら流れ作業で書類を作成していきたいので、極力ダイアログなどの画面操作をしないことを考えております。

PHPで構築しております。PDFの作成はFPDFを使用しています。
PDFの作成自体は上手くいっています。

「問題点」
サーバー側で作成したPDFをクライアント側にダイアログ、PDF内容の画面表示をさせずに、ダウンロードさせるところまでいくのですが、そこで処理が止まり、その後、画面の商品一覧から選択済みの商品を消す処理まで実行されない。
また、ダウンロードさせたいPDFは「送り状」「納品書」の2種類で、サイズが違うため、別々のPDFを作成しており、両方ともダウンロードさせたいのですが、1つ目のPDFをダウンロードした時点で処理が止まってしまいます。

「試みた事」
1.PDF作成処理後、以下「送り状」PDFダウンロード関数を呼び出し。
この関数呼び出しのあと、パスを変えたのみの「納品書」PDFダウンロード関数を呼び出す処理と画面で選択した商品を消す処理を書いていますが、そこまでは実行されず、以下「送り状」PDFのダウンロードをして処理は終わっているようです。

lang

1function statement_pdf_download() { 2//フルパス 3$fpath = '/home/xxxxxx/xxxxxxx/pdf/statement.pdf'; 4//ファイル名 5$fname = 'statement.pdf'; 6 7header("Content-Type: application/pdf"); 8header('Content-Length: '.filesize($fpath)); 9header('Content-disposition: attachment; filename="'.$fname.'"'); 10readfile($fpath); 11exit(); 12}

exit();のせいかとも思いましたが、これを無くすとダウンロードしたPDFが破損するようです。

2.上記1の関数の、headerの指定が良くないかと思い、色々変えて実行しましたが、結果は同じでした。

lang

1header('Content-Type: application/octet-stream');

lang

1header('Content-Type: application/force-download');

3.readfile()自体が、処理の終わりにしか使用できないのかと思い、非同期ajaxの実装を試みました。
PDF作成処理と、画面から選択した商品を消す処理を行った後、ブラウザ画面再描画の時に以下javascriptの呼び出しを行うようにしました。しかし、ファイルのダウンロードはされませんでした。

lang

1function getStatementPdf(){ 2 $.ajax({ 3 type: 'POST', 4 url: './lib/statement_pdf_download.php' 5 }).done(function(json){ 6 console.log('実行成功'); 7 console.log(json); 8 }).fail(function(json){console.log('error ', json);}); 9}

Javascriptコンソールを見たところ、このscriptの実行はされていると思います。
また、ダウンロードするPDFの内容もコンソールに表示されていたので、ファイルも読み込んでいると思います。
![イメージ説明]WIDTH:165
非同期だとダウンロード先を見失ってしまったりするのでしょうか。

以上、
そもそも実現可能性があるのかどうかも含め、どうかご助言よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

iframeをダウンロードファイル分定義し、
[iframeのname].location.hrefでphpを指定する事で、解決しました。
お騒がせしました。

投稿2015/03/28 06:30

YukiTakahashi08

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問