2017-01-23 120 views
0

我尝试将一些数据从MYSQLi保存为pdf。文件是通过浏览器下载的,但是当我尝试打开它时,Adobe喊我“已损坏”。这里是我的代码:PHP,fpdf,损坏的文件下载

ob_start(); 
require('fpdf.php'); 
$pdf = new FPDF(); 
$pdf->AddPage('A4'); 
$pdf->SetFont('Arial','',16); 
$line="Użytkownik: ".$login." Miesiąc: ".$miesiac." Dzień: ".$dzien; 
$pdf->Cell(0,5,$line); 
$query="select * from ".$prefix."_Przychody where Login='$login'"; 
$start=mysqli_query($link, $query); 
while($dane=mysqli_fetch_assoc($start)) 
{ 
    $data=date("Y-m-").$dzien; 
    if($dane['Data']==$data) 
    { 
     $line="Opis: ".$dane['Opis']." Kategoria: ".$dane['Kategoria_przychodu']." Kwota: ".$dane['Kwota']."."; 
     $pdf->Cell(0,5,$line); 
     $y = $pdf->GetY(); 
     $pdf->SetXY(0,$y+10); 
    } 
} 

$query="select * from ".$prefix."_Wydatki where Login='$login'"; 
$start=mysqli_query($link, $query); 
while($dane=mysqli_fetch_assoc($start)) 
{ 
    $data=date("Y-m-").$dzien; 
    if($dane['Data']==$data) 
    { 
     $line="Opis: ".$dane['Opis']." Kategoria: ".$dane['Kategoria_przychodu']." Kwota: ".$dane['Kwota']."."; 
     $pdf->Cell(0,5,$line); 
     $y = $pdf->GetY(); 
     $pdf->SetXY(0,$y+10); 

    } 
} 
$name=$login.".pdf"; 
$pdf->Output('D',$name,true); 
ob_end_flush(); 

顺便说一句。我尝试保存某些日期的数据,并为使用波兰名称感到遗憾,但它不是我的数据库:D

+0

如果您保存PDF到磁盘的服务器上,你可以打开生成的PDF,然后,在服务器上,或者如果你FTP到你的系统? – RiggsFolly

+0

PS:你不需要'ob_start()'和'ob_flush()',也许这就是造成问题的原因 – RiggsFolly

+0

Ya当我将它保存在服务器上时,我可以打开它,但我需要将它保存在本地计算机上 –

回答

0

现在我创建PDF文件并将其保存到我的服务器。这个文件是可以的,我可以打开它并在Adobe中读取,但是当我尝试将它保存在本地计算机上并打开时,Adobe再次将它的损坏喊出来。在后以上是我的代码来创建PDF文件,这里是我的代码从服务器下载到本地计算机:

if($zapis==1) 
{ 
$file = $login.".pdf"; 
if(!$file){ 
header('Location: index.php?w=laczne_podsumowanie'); 
} 
else 
{ 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); 
header("Content-Type: application/pdf"); 
header("Content-Transfer-Encoding: binary"); 
readfile($file); 
} 
} 

现在怎么我可以编辑代码下载没有损坏的PDF文件。 我将不胜感激任何答案。 和平:)

编辑:我使用修复此:

flush(); 
ob_clean(); 

前:

readfile($file);