TCPDF创建损坏的pdf

时间:2014-02-11 16:27:32

标签: php pdf tcpdf

TCPDF不断创建一个无法打开的损坏的pdf。任何解决方案我是从一个html表单发布的。我不确定我的代码是否错误,但我测试了tcpdf的例子,它们工作正常。

这是我的php:

ob_start();

require_once('tcpdf.php');

$pdf = & new TCPDF("P","mm","A4",true,"UTF-8",false);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetAutoPageBreak(false);
$pdf->SetMargins(15,20,15);
$pdf->AddPage();
$pdf->SetFont('helvetica','B',12);
$pdf->SetFillColor(255,255,255);

// set image scale factor

$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// IMPORTANT: disable font subsetting to allow users editing the document

$pdf->setFontSubsetting(false);

//data

$pdf->writeHTMLCell(0,0,0,0, "Job Number ". $_POST["jobnum"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,5, "Program ". $_POST["program"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,10, "Ship Date ". $_POST["shipdate"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,15, "Description ". $_POST["description"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,20, "Proto Verified By ". $_POST["name"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,25, "Additional Notes ". $_POST["notes"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,30, "File Name". $_POST["filename1"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,35, "Doc Siize ". $_POST["Docsize1"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->Cell(35, 5, 'FC ');
$pdf->CheckBox('fc1', 5, true, array(), array(), 'OK');
$pdf->Ln(40);
$pdf->Cell(35, 5, 'DC ');
$pdf->CheckBox('dc1', 5, true, array(), array(), 'OK');
$pdf->Ln(45);
$pdf->Cell(35, 5, 'Flip ');
$pdf->CheckBox('flip1', 5, true, array(), array(), 'OK');
$pdf->Ln(50);
$pdf->writeHTMLCell(0,0,0,55, "Quantity ". $_POST["quantity1"], $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true);
$pdf->writeHTMLCell(0,0,0,60, "Flip Quantity ". $_POST["flipqty1"], $border=0, $ln=0,   $fill=false, $reseth=true, $align='', $autopadding=true);

//Close and output PDF document

$pdf->Output('job.pdf', 'D');


ob_clean();

EDIT1 有人可以帮忙吗?

EDIT2 我得出的结论是我的代码没有问题。我测试了一个基本的“你好世界”,仍然收到一个我无法打开的损坏的PDF格式?我做了一些广泛的研究,没有人得到这个问题的答案,虽然这似乎很常见。如果有人能帮助我,那就太棒了。

edit3 我还尝试过“hellow world”的FPDF,但是我仍然遇到了与pdf损坏相同的问题? adobe acrobat reader会成为问题吗?

1 个答案:

答案 0 :(得分:2)

您的代码至少存在两个问题,其中一个或两个都可能导致问题。

第一个问题是您不应该尝试通过引用分配新的TCPDF实例。也就是说,你应该删除&符号,使得有问题的行看起来像这样:

$pdf = new TCPDF("P","mm","A4",true,"UTF-8",false);

第二个问题是,通过调用ob_clean(),您实际上在调用$pdf->Output()时删除了创建的输出(并存储在输出缓冲区中)。如果您确实想明确管理输出缓冲区,请改用ob_end_flush()。话虽如此,您可能无需在代码中管理输出缓冲,因为PHP默认缓冲所有输出并在脚本完成时自动将其发送到客户端。

为了记录,我复制了你的代码,在上面进行了两次调整并且它有效。