web-dev-qa-db-ja.com

TCPDFエラー:一部のデータはすでに出力されています。送信できませんPDF file

独自の配列をコードに追加しようとすると、このエラーが引き続き表示されます。これが私の配列です。

$array = array();

while (odbc_fetch_row($rs))
{
$array[] = odbc_result($rs,'Product Name');
} 
$test = print_r($array);

元のコードはこちらです。サンプルページが正常に機能することがわかっているため、サンプルページを使用して試しています。

http://www.tcpdf.org/examples/example_001.phps

このコードは$ html変数の前にあり、設定されると、$ test変数を$ html変数に追加するだけです。 odbc接続は正常に動作し、コードを追加する前にサンプルは正常に動作しますが、スクリプトを実行するとこのエラーが発生します。

Array ( [0] => Test1 [1] => Test2 ) TCPDF ERROR: Some data has already been output, can't send PDF file

また、配列には3つ以上のアイテムがあります。何か案は?

18
Alex

Ob_start()を使用してください。ページの上部にあります。

31
vishal jaura

関数ob_end_clean()を追加します。出力関数を呼び出す前に。カスタムのWordpress=関数!

ob_end_clean();
$pdf->Output($pdf_name, 'I');
25
fmarrot

Output関数を呼び出す前に、ob_end_clean()関数を追加します。

9
user2928471

このエラーが発生していることを付け加えます。Output宛先パラメーターをFからFIに変更するまで、何も修正しません。つまり、ファイルとインラインの両方に出力する必要があります。

Output('doc.pdf', 'I')

Output('doc.pdf', 'FI')

なぜこれが違いを生んだのかわかりませんが、それは私のためにエラーを修正しました...

5
Black

この問題は、ヘッダーがあることを意味します。タグを削除します

?>

コードの最後で、先頭に空白を入れないようにしてください。

5
xavit

「データが既に出力されている」原因となるtcpdfファイルは、tcpdf.phpという名前のtcpdfフォルダーにあります。変更できます:

行を追加しますob_end_clean();次のように(最後の3行目):

public function Output($name='doc.pdf', $dest='I') {
    //LOTS OF CODE HERE....}
    switch($dest) {
        case 'I': {
        // Send PDF to the standard output
        if (ob_get_contents()) {
        $this->Error('Some data has already been output, can\'t send PDF file');}
        //some code here....}
            case 'D': {         // download PDF as file
        if (ob_get_contents()) {
    $this->Error('Some data has already been output, can\'t send PDF file');}
            break;}
        case 'F':
        case 'FI':
        case 'FD': {
            // save PDF to a local file
                 //LOTS OF CODE HERE.....       break;}
        case 'E': {
            // return PDF as base64 mime email attachment)
        case 'S': {
            // returns PDF as a string
            return $this->getBuffer();
        }
        default: {
            $this->Error('Incorrect output destination: '.$dest);
        }
    }
           ob_end_clean(); //add this line here 
    return '';
}

次に、コードを見てみましょう。
$ rsと$ sqlが混在しているようです。これらは一緒に働く2つの異なるものです。

$conn=odbc_connect('northwind','****','*****');
if (!$conn) {
   exit("Connection Failed: " . $conn);
 }

$sql="SELECT * FROM products"; //is products your table name?
$rs=odbc_exec($conn,$sql);
if (!$rs) {
  exit("Error in SQL");
}

while (odbc_fetch_row($rs)) {
  $prodname=odbc_result($rs,"Product Name"); //but preferably never use spaces for table names.
 $prodid=odbc_result($rs,"ProdID");  //prodID is assumed attribute
  echo "$prodname";
  echo "$prodid";
}
odbc_close($conn);

now you can use the $prodname and output it to the TCPDF output.  

そして、あなたはMS Accessデータベースに接続していると思います。

3
Clark Superman

ob_end_clean()を使用します。

$ pdf-> Output($ file、 'I'); pdfを開きます。わたしにはできる

2
him

この奇妙なエラーが発生し、犯人はPHPオープンタグの先頭にある空白です

ob_flushob_end_cleanがなくても

white spacesブロックの上または後に余分な<?php ?>がないことを確認してください

1
tomexsans

Ob_start()を使用します。コードの最初に。

1

これはありましたが、OPとは異なり、TCPDFエラーメッセージの前に出力が表示されませんでした。

私のスクリプトの一番最初の<?phpタグの前にob_start()を呼び出す機会がある前に、UTF8 BOM(byte-order-mark)があったことがわかりました。また、TCPDFエラーメッセージの前にUTF8 BOMがありました。

1
Syboor

まだこの問題に直面している人のために追加してみてください:

libxml_use_internal_errors(true);

loadHtml呼び出しの前に追加します

libxml_use_internal_errors(false);

呼び出しの後。

これで解決しました。

1
S.Simkhada

この問題は、Apache/phpエラーを表示します。

このdata(html)は、pdf出力を破棄します。

php.iniの表示エラーをオフにする必要があります。

1
Maykel

私の場合、フッターメソッドはosxでエラーを引き起こす不正なhtmlコード(tdが欠落している)を持っていました。

public function Footer() {
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
 Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
}
1
ranjeetcao

同じエラーがありましたが、最終的にPHPエラーを抑制して解決しました。このコードerror_reporting(0);を印刷ページの先頭に置くだけです

    <?php 
    error_reporting(0); //hide php errors
    if( ! defined('BASEPATH')) exit('No direct script access allowed');
    require_once dirname(__FILE__) . '/tohtml/tcpdf/tcpdf.php';
    .... //continue
0
JOB