独自の配列をコードに追加しようとすると、このエラーが引き続き表示されます。これが私の配列です。
$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つ以上のアイテムがあります。何か案は?
Ob_start()を使用してください。ページの上部にあります。
関数ob_end_clean()を追加します。出力関数を呼び出す前に。カスタムのWordpress=関数!
ob_end_clean();
$pdf->Output($pdf_name, 'I');
Output関数を呼び出す前に、ob_end_clean()関数を追加します。
このエラーが発生していることを付け加えます。Output
宛先パラメーターをF
からFI
に変更するまで、何も修正しません。つまり、ファイルとインラインの両方に出力する必要があります。
Output('doc.pdf', 'I')
に
Output('doc.pdf', 'FI')
なぜこれが違いを生んだのかわかりませんが、それは私のためにエラーを修正しました...
この問題は、ヘッダーがあることを意味します。タグを削除します
?>
コードの最後で、先頭に空白を入れないようにしてください。
「データが既に出力されている」原因となる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データベースに接続していると思います。
ob_end_clean()を使用します。
$ pdf-> Output($ file、 'I'); pdfを開きます。わたしにはできる
この奇妙なエラーが発生し、犯人はPHPオープンタグの先頭にある空白です
ob_flush
とob_end_clean
がなくても
white spaces
ブロックの上または後に余分な<?php ?>
がないことを確認してください
Ob_start()を使用します。コードの最初に。
これはありましたが、OPとは異なり、TCPDFエラーメッセージの前に出力が表示されませんでした。
私のスクリプトの一番最初の<?phpタグの前にob_start()を呼び出す機会がある前に、UTF8 BOM(byte-order-mark)があったことがわかりました。また、TCPDFエラーメッセージの前にUTF8 BOMがありました。
まだこの問題に直面している人のために追加してみてください:
libxml_use_internal_errors(true);
loadHtml
呼び出しの前に追加します
libxml_use_internal_errors(false);
呼び出しの後。
これで解決しました。
この問題は、Apache/php
エラーを表示します。
このdata(html
)は、pdf出力を破棄します。
php.iniの表示エラーをオフにする必要があります。
私の場合、フッターメソッドはosxでエラーを引き起こす不正なhtmlコード(tdが欠落している)を持っていました。
public function Footer() {
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
}
同じエラーがありましたが、最終的に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