0

PHPDOCXを使用して「ダウンロード」コントローラーで生成されたWordドキュメントをダウンロードするダウンロードアクションを作成しようとしています。これまでのところ、PHPDOCXは目的の.docxファイルを正しいフォルダーに保存できますが、ダウンロードしようとすると問題が発生します。メディアビューは非推奨になったため、CakePHP2.xクックブックで提案されているCakeResponseファイルメソッドを使用する必要があります。

// In the controller:
$this->response->file($file['path'], array('download' => true, 'name' => $filename));
return $this->response;

このメソッドを使用してRTFを問題なくエクスポートできました(RTFはPHPRTFLiteを使用して生成されました)が、PHPDOCXを使用して.docxファイルのメソッドを使用すると、Firefoxで次のエラーが発生します。

ファイルの最初の1024バイトをプレスキャンしたときに、HTMLドキュメントの文字エンコード宣言が見つかりませんでした。別の設定のブラウザで表示すると、このページは自動的に再読み込みされます。エンコーディング宣言は、ファイルの最初の1024バイト以内に移動する必要があります。

HTMLを受け入れるドキュメントジェネレータを使用したいので、PHPDOCXを選択しました。上記のエラーを考慮して、次の方法を使用してヘッダーとコンテンツタイプを定義することにしました。

$this->response->header(array('Content-type'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document'));

しかし、CakePHPでも同じエラーが発生します。

要求されたファイルAPP/files / info_sheets / filename.docxが見つからないか、読み取れません

私が考えていたのは、PHPDOCXがドキュメントを生成するときに多くのエラーを送信し、これがMimeタイプまたはエンコーディングに干渉しているということです。しかし、2.xクックブックによると:

が呼び出されても、ヘッダーは送信されませんCakeResponse::header()。これらは、応答が実際に送信されるまでバッファリングされます。

もう1つのアイデアは、content-typeの直後のヘッダーで文字エンコードを設定する必要があるということです。

$this->response->header(array('Content-type'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'));

ただし、これによりテキストが文字化けします。

誰かがこれを解決する方法について何かアイデアがありますか?「download.ctp」ビューファイルは現在空白です。この問題に関する追加情報が必要な場合はお知らせください。

ありがとう!

クリス

4

2 に答える 2

1

まず第一に、あなたはautoRenderを無効にしようとするかもしれません、さもなければCakePHPはあなたのビューとレイアウトをレンダリングしようとするかもしれません。

$this->autoRender = false;

また、テストはしていませんが、ヘッダーを設定するためにこれを試しましたか?

// register the type 
$this->response->type(array('docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'));
// set the type for the response
$this->response->type('docx');

ドキュメントを参照してください:http: //book.cakephp.org/2.0/en/controllers/request-response.html#dealing-with-content-types

于 2013-02-07T21:20:10.430 に答える
0

フレームワークのコアでmedia.phpファイルを変更し、タイプを持つ配列にmime-typeを追加できます。例えば:

'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
于 2016-09-05T20:28:53.300 に答える