0

そこで、jQueryを介していくつかの値をサーバーに渡します。サーバーはPDFの文字化けを生成します。これは次のようになります。

$.post('/admin/printBatch',
data, // Some vars and such
function(data){
    if(data) {

        var batch =  window.open('','Batch Print','width=600,height=600,location=_newtab');
        var html = data; // Perhaps some header info here?!
        batch.document.open();
        batch.document.write(html);
        batch.document.close();

        $( this ).dialog( "close" ); // jQuery UI
    } else {
        alert("Something went wrong, dawg.");
    }
    return false;
});

出力ファイルはおおよそ次のようになります。

$pdf->AddPage(null, null, 'A PDF Page');
//....
$pdf->Output('', 'I'); // 'I' sends the file inline to the browser (http://fpdf.org/en/doc/output.htm)

ブラウザウィンドウに表示されるもの:

%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream ...

私は何か大きなものが欠けています、私はそれを知っています...考え?

みんなありがとう。

4

4 に答える 4

3

見た目では、PDFはかなり整形式です。そのため、ヘッダー関数を使用してPHP経由でPDFを出力する場合は、適切なコンテンツヘッダーを設定するだけでよいと思います。

header('Content-type: application/pdf');

注意:これはPHPからの最初の出力である必要があります。先行するHTML、空白などがある場合は機能しません。

理想的な世界では、コンテンツの長さなども設定します...

header('Content-Length: '.filesize($pathToYourPDF));

...また...

header('Content-Length: '.strlen($pdfData));

...プログラムでPDFを生成している場合。

アップデート

明確にするために、上記を機能させるには、PHPが提供するURLから上記を直接読み取るためにwindow.openを変更する必要があると思います。(そもそもなぜこれを行っているのかはよくわかりませんが、正当な理由があると思います。)

于 2011-01-06T21:46:33.730 に答える
0

私は自分のアプリケーションでこれをテストしましたが、結論として、iframeを使用する必要があります(show_pdfは "$ pdf-> Output(''、'I');"を返します):

$.ajax({
 url: "http://www.somesite.com/documents/generatePDF",
 success: function(){
  $('#theDocument').html('<iframe id="some_id" class="some_pdf" style="display:none" src="http://www.somesite.com/documents/show_pdf" width="100%" height="450" scrollbar="yes" marginwidth="0" marginheight="0" hspace="0" align="middle" frameborder="0" scrolling="yes" style="width:100%; border:0;  height:450px; overflow:auto;"></iframe>');
 }
});
$('#dialog-document').dialog('open');
于 2011-01-06T21:55:49.387 に答える
0

URLPDFを出力するphpスクリプトを指して、ポップアップウィンドウを設定したいと思います。

どうしてもこの方法で行う必要がある場合は、data-uriが役立つ可能性があります。

var batch =  window.open(
                    'data:application/pdf,'+encodeURIComponent(data),
                    'Batch Print',
                    'width=600,height=600,location=_newtab'
             );

しかし、私はそれをテストしていません。通常のブラウザで動作する場合でも、IEでは必ず失敗します。

于 2011-01-06T22:00:32.153 に答える
0

これは私のために働いた:変更

$pdf->Output('', 'I');

にとって

$return = $pdf->Output('name.pdf', 'S');
$return = base64_encode();
$return = 'data:application/pdf;base64,'.$return;
echo json_encode($return);

ここで、javascriptファイルで、戻り値を取得して新しいウィンドウを開く必要があります

success: function( data ) {
    var pdf = JSON.parse(data);
    window.open(pdf);
}

それはpdfであなたのブラウザに新しいタブを開きます。

于 2018-03-09T18:43:09.260 に答える