Php tcpdf库。数据库内容太多时不打印
我试图写一个代码,我必须打印我的数据库的内容,并将其输出为pdf文件 然而,我似乎遇到了一个问题 当我导出数据库中的所有内容时,我的pdf不会显示任何内容 但是如果我限制它,例如限制5 它可以正常工作并正确打印数据 有没有一种方法可以让它打印我的数据库而不必使用limit,因为我需要在单个pdf文件中打印 //tcpdf库的设置Php tcpdf库。数据库内容太多时不打印,php,mysql,tcpdf,Php,Mysql,Tcpdf,我试图写一个代码,我必须打印我的数据库的内容,并将其输出为pdf文件 然而,我似乎遇到了一个问题 当我导出数据库中的所有内容时,我的pdf不会显示任何内容 但是如果我限制它,例如限制5 它可以正常工作并正确打印数据 有没有一种方法可以让它打印我的数据库而不必使用limit,因为我需要在单个pdf文件中打印 //tcpdf库的设置 ob_start(); session_start(); include('connect.php'); include('../lib
ob_start();
session_start();
include('connect.php');
include('../libraries/tcpdf/tcpdf.php');
include('../libraries/tcpdf/config/lang/eng.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Test');
$pdf->SetTitle('Report');
$pdf->SetSubject('Report');
$pdf->SetKeywords('Test, Report, Data, Form, Results');
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
$pdf->setFooterData($tc=array(0,64,0), $lc=array(0,64,128));
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
//set some language-dependent strings
$pdf->setLanguageArray($l);
// ---------------------------------------------------------
// set default font subsetting mode
$pdf->setFontSubsetting(true);
// Set font
// dejavusans is a UTF-8 Unicode font, if you only need to
// print standard ASCII chars, you can use core fonts like
// helvetica or times to reduce file size.
$pdf->SetFont('dejavusans', '', 14, '', true);
// remove default header
$pdf->setPrintHeader(false);
// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->AddPage();
//查询和打印为pdf
//queries
$c_name=DB::queryOneField('report_name',"SELECT * from reports r INNER JOIN report_fields rf on r.report_id=rf.report_id INNER JOIN searchcolumn s on rf.field_id=s.scol_id where r.report_id=%i",$_GET['c_id']);
if($_GET['custom']==true)
{
$a=DB::query("SELECT * from reports r INNER JOIN report_fields rf on r.report_id=rf.report_id INNER JOIN searchcolumn s on rf.field_id=s.scol_id where r.report_id=%i",$_GET['c_id']);
$s = DB::query("SELECT * FROM alumni order by ln,batch ASC); //<-- ------------------ this is the part where it works if you add LIMIT 5 in the sql statement
foreach($s as $m){
foreach($a as $c){
$line2 .=
str_replace(",","",$c['advsearch_name']) . ": " . str_replace(",","",$m[$c['advsearch_col']]) . "<br />";
}
$line2 .="<br />";
}
$data="$line2";
}
// Set some content to print
$html = <<<EOD
<hr>
<table>
<tr>
<td width="60%">REPORTS - $rp_name</td>
</tr>
</table>
<br>
$data
EOD;
// Print text using writeHTMLCell()
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);
ob_end_clean();
// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$pdf->Output('application.pdf', 'I');
//查询
$c_name=DB::queryOneField('report_name',“SELECT*from reports r internal JOIN report_fields r.report_id=rf.report_id=rf.report_id内部连接搜索列s on rf.field_id=s.scol_id其中r.report_id=%i“,$\u GET['c_id');
如果($\u GET['custom']==true)
{
$a=DB::query(“从报告中选择*r.report\u id=rf.report\u id内部连接报告\u字段rf on r.report\u id=rf.report\u id内部连接搜索列s on rf.field\u id=s.scol\u id其中r.report\u id=%i”,$\u GET['c\u id'];
$s=DB::query(“按ln从校友订单中选择*,批ASC);//在TCPDF脚本开头添加此代码:
ob_start();
set_time_limit(0);
ini_set("memory_limit", "256M");
如果内容不能放在一个页面上,可能会出现问题?您有多少数据?另外-在代码开头添加以下代码:错误报告(E_ALL);ini_set('display_errors','on');
并查看是否会出现一些错误(请注意,由于ob.*
函数可能看不到错误-请在测试时尝试删除它们)出现了一个“TCPDF错误:一些数据已经输出,无法发送PDF文件”警告,我注意到我的输出的另一个问题是(这是ob标题)一旦需要打印的数据超过第五页,pdf将不再显示任何内容。第一个错误是自我解释的。ob_end_clean是一个应该修复它的东西(但对我来说,这是错误的方法。你最好先弄清楚发送的内容,然后再删除该代码)。关于第五页:尝试用简单的writeHTML替换writeHTML单元格。(只是猜测,我从未尝试用TCPDF放置长HTML)。此外,TCPDF可能会占用大量内存。我会尝试这样设置:set\u time\u limit(0);ini\u set(“memory\u limit”,“256M”);
可能没有足够的内存来创建文件。