1

ここでは、カスタムの社内フレームワークを使用して ajax を実行する興味深い方法があります。

    CT.postSynch('report/index/downloadProjectsInProgress', {}, function(data){
    });

Reportこれは ajax に、 と呼ばれるモジュール、 と呼ばれるコントローラー、 と呼ばれるIndexアクションを探すように指示しますajazDownloadProjectInprogress

関数ajazDownloadProjectInprogressを作成しました。これは、返されたデータに基づいて単純なPDFを作成するだけです。その関数には、次のようなものがあります(DOMPDFを使用):

$dompdf = new DOMPDF();

$content = $this->raw('./report.header','./projectsInProgressReport','./report.footer');

$dompdf->load_html($content);
$dompdf->render();
$dompdf->output();
header('Pragma:');
header('Cache-Control: private,no-cache');
return $dompdf->stream("Structure Report - ProgressReports.pdf", array('Attachment' => 1));

ここで行っているのは、ビューを html または raw データとしてレンダリングする方法に基づいてコンテンツを取得し、ajax を介して pdf をストリーミングしようとすることだけです。

上記のコードでは、ajax 呼び出しを処理する方法を示しましたが、次のようにしました。

    CT.postSynch('report/index/downloadProjectsInProgress', {}, function(data){
        return data;
    });

これで、ネットワーク タブに次のように表示されます。

%PDF-1.3
1 0 obj
<< /Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R >>
endobj
2 0 obj
<< /Type /Outlines /Count 0 >>
endobj
3 0 obj
<< /Type /Pages
/Kids [6 0 R
]
/Count 1
/Resources <<
/ProcSet 4 0 R
/Font << 
/F1 8 0 R
/F2 9 0 R
>>
/XObject << 
/I1 10 0 R
/I2 11 0 R

これは、返されたものの単なるサンプルです.... ajaxを介してこれを行っておらず、このアクションを直接呼び出しただけの場合、実際のP​​DFが目的のコンテンツでダウンロードされます。

ajax呼び出しを介してPDFをダウンロードするためにあなたが何をすべきか知っている人はいますか? ajax自体がファイルをダウンロードしないことは知っていますが、関数がダウンロードプロセスを開始するようにすべてを設定しました。

4

1 に答える 1

4

AJAX を使用して PDF をダウンロードするということは、最も単純な形式では、PDF のバイナリ データをビット単位で要求する必要があることを意味します。AJAX を介して PDF ファイルのバイナリ チャンクを要求し、解析して表示する例については、Mozilla のPDF.js ライブラリ、特にそのネットワーク コードを確認してください。

代わりに、単にサーバーから PDF を要求し、ブラウザでダウンロードまたは表示したいだけの場合は、問題の PDF の URL (カスタム コントローラまたはその他のものである可能性があります)window.locationを取得し、その値に を設定する必要があります。 . 例のアウトラインを使用すると、次のように簡単になります。

window.location.href = 'report/index/downloadProjectsInProgress';

サーバーコードがヘッダーを追加していることを確認してください。これにより、ファイルを表示しようとするのではなく、ファイルをダウンロードするよう Content-disposition: attachment; filename=file.pdfに変更が強制されます。これを正確に行う方法を説明する StackOverflow の投稿を次に示します。window.location

于 2013-10-31T02:35:22.037 に答える